// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/class.Snapshot.html).
pub type Snapshot

///|
pub(open) trait ISnapshot {
  fn as_snapshot(Self) -> Snapshot
  fn append_layout(Self, &@pango.ILayout, @gdk.RGBA) -> Unit = _
  fn perspective(Self, Float) -> Unit = _
  fn pop(Self) -> Unit = _
  fn push_blur(Self, Double) -> Unit = _
  fn push_copy(Self) -> Unit = _
  fn push_cross_fade(Self, Double) -> Unit = _
  fn push_opacity(Self, Double) -> Unit = _
  fn restore(Self) -> Unit = _
  fn rotate(Self, Float) -> Unit = _
  fn save(Self) -> Unit = _
  fn scale(Self, Float, Float) -> Unit = _
  fn scale_3d(Self, Float, Float, Float) -> Unit = _
}

///|
pub impl ISnapshot for Snapshot with fn as_snapshot(self) {
  self
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.Snapshot.new.html).
pub extern "c" fn Snapshot::new() -> Snapshot = "moonbit_gtk_snapshot_new"

///|
#borrow(self_, layout, color)
extern "c" fn moonbit_gtk_snapshot_append_layout(
  self_ : Snapshot,
  layout : @pango.Layout,
  color : @gdk.RGBA,
) = "moonbit_gtk_snapshot_append_layout"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.append_layout.html).
pub fn Snapshot::append_layout(
  self : Snapshot,
  layout : &@pango.ILayout,
  color : @gdk.RGBA,
) -> Unit {
  moonbit_gtk_snapshot_append_layout(self, layout.as_layout(), color)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.perspective.html).
#borrow(self)
pub extern "c" fn Snapshot::perspective(self : Snapshot, depth : Float) = "moonbit_gtk_snapshot_perspective"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.pop.html).
#borrow(self)
pub extern "c" fn Snapshot::pop(self : Snapshot) = "moonbit_gtk_snapshot_pop"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.push_blur.html).
#borrow(self)
pub extern "c" fn Snapshot::push_blur(self : Snapshot, radius : Double) = "moonbit_gtk_snapshot_push_blur"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.push_copy.html).
#borrow(self)
pub extern "c" fn Snapshot::push_copy(self : Snapshot) = "moonbit_gtk_snapshot_push_copy"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.push_cross_fade.html).
#borrow(self)
pub extern "c" fn Snapshot::push_cross_fade(self : Snapshot, progress : Double) = "moonbit_gtk_snapshot_push_cross_fade"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.push_opacity.html).
#borrow(self)
pub extern "c" fn Snapshot::push_opacity(self : Snapshot, opacity : Double) = "moonbit_gtk_snapshot_push_opacity"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.restore.html).
#borrow(self)
pub extern "c" fn Snapshot::restore(self : Snapshot) = "moonbit_gtk_snapshot_restore"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.rotate.html).
#borrow(self)
pub extern "c" fn Snapshot::rotate(self : Snapshot, angle : Float) = "moonbit_gtk_snapshot_rotate"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.save.html).
#borrow(self)
pub extern "c" fn Snapshot::save(self : Snapshot) = "moonbit_gtk_snapshot_save"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.scale.html).
#borrow(self)
pub extern "c" fn Snapshot::scale(
  self : Snapshot,
  factor_x : Float,
  factor_y : Float,
) = "moonbit_gtk_snapshot_scale"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Snapshot.scale_3d.html).
#borrow(self)
pub extern "c" fn Snapshot::scale_3d(
  self : Snapshot,
  factor_x : Float,
  factor_y : Float,
  factor_z : Float,
) = "moonbit_gtk_snapshot_scale_3d"

///|
impl ISnapshot with fn append_layout(self, layout, color) -> Unit {
  self.as_snapshot().append_layout(layout, color)
}

///|
impl ISnapshot with fn perspective(self, depth) -> Unit {
  self.as_snapshot().perspective(depth)
}

///|
impl ISnapshot with fn pop(self) -> Unit {
  self.as_snapshot().pop()
}

///|
impl ISnapshot with fn push_blur(self, radius) -> Unit {
  self.as_snapshot().push_blur(radius)
}

///|
impl ISnapshot with fn push_copy(self) -> Unit {
  self.as_snapshot().push_copy()
}

///|
impl ISnapshot with fn push_cross_fade(self, progress) -> Unit {
  self.as_snapshot().push_cross_fade(progress)
}

///|
impl ISnapshot with fn push_opacity(self, opacity) -> Unit {
  self.as_snapshot().push_opacity(opacity)
}

///|
impl ISnapshot with fn restore(self) -> Unit {
  self.as_snapshot().restore()
}

///|
impl ISnapshot with fn rotate(self, angle) -> Unit {
  self.as_snapshot().rotate(angle)
}

///|
impl ISnapshot with fn save(self) -> Unit {
  self.as_snapshot().save()
}

///|
impl ISnapshot with fn scale(self, factor_x, factor_y) -> Unit {
  self.as_snapshot().scale(factor_x, factor_y)
}

///|
impl ISnapshot with fn scale_3d(self, factor_x, factor_y, factor_z) -> Unit {
  self.as_snapshot().scale_3d(factor_x, factor_y, factor_z)
}

///|
pub fn Snapshot::as_gdk_snapshot(self : Snapshot) -> @gdk.Snapshot = "%identity"

///|
pub impl @gdk.ISnapshot for Snapshot with fn as_snapshot(self) {
  self.as_gdk_snapshot()
}

///|
pub fn Snapshot::as_gobject_object(self : Snapshot) -> @gobject.Object = "%identity"

///|
pub impl @gobject.IObject for Snapshot with fn as_object(self) {
  self.as_gobject_object()
}