// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IFixed {
  fn as_fixed(Self) -> Fixed
  fn get_child_position(Self, &IWidget) -> (Double, Double) = _
  fn move_(Self, &IWidget, Double, Double) -> Unit = _
  fn put(Self, &IWidget, Double, Double) -> Unit = _
  fn remove(Self, &IWidget) -> Unit = _
}

///|
pub impl IFixed for Fixed with fn as_fixed(self) {
  self
}

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

///|
#borrow(self_, widget, x, y)
extern "c" fn moonbit_gtk_fixed_get_child_position(
  self_ : Fixed,
  widget : Widget,
  x : Ref[Double],
  y : Ref[Double],
) = "moonbit_gtk_fixed_get_child_position"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Fixed.get_child_position.html).
pub fn Fixed::get_child_position(
  self : Fixed,
  widget : &IWidget,
) -> (Double, Double) {
  let x = Ref(0.0)
  let y = Ref(0.0)
  moonbit_gtk_fixed_get_child_position(self, widget.as_widget(), x, y)
  (x.val, y.val)
}

///|
#borrow(self_, widget)
extern "c" fn moonbit_gtk_fixed_move(
  self_ : Fixed,
  widget : Widget,
  x : Double,
  y : Double,
) = "moonbit_gtk_fixed_move"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Fixed.move.html).
pub fn Fixed::move_(
  self : Fixed,
  widget : &IWidget,
  x : Double,
  y : Double,
) -> Unit {
  moonbit_gtk_fixed_move(self, widget.as_widget(), x, y)
}

///|
#borrow(self_, widget)
extern "c" fn moonbit_gtk_fixed_put(
  self_ : Fixed,
  widget : Widget,
  x : Double,
  y : Double,
) = "moonbit_gtk_fixed_put"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Fixed.put.html).
pub fn Fixed::put(
  self : Fixed,
  widget : &IWidget,
  x : Double,
  y : Double,
) -> Unit {
  moonbit_gtk_fixed_put(self, widget.as_widget(), x, y)
}

///|
#borrow(self_, widget)
extern "c" fn moonbit_gtk_fixed_remove(self_ : Fixed, widget : Widget) = "moonbit_gtk_fixed_remove"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.Fixed.remove.html).
pub fn Fixed::remove(self : Fixed, widget : &IWidget) -> Unit {
  moonbit_gtk_fixed_remove(self, widget.as_widget())
}

///|
impl IFixed with fn get_child_position(self, widget) -> (Double, Double) {
  self.as_fixed().get_child_position(widget)
}

///|
impl IFixed with fn move_(self, widget, x, y) -> Unit {
  self.as_fixed().move_(widget, x, y)
}

///|
impl IFixed with fn put(self, widget, x, y) -> Unit {
  self.as_fixed().put(widget, x, y)
}

///|
impl IFixed with fn remove(self, widget) -> Unit {
  self.as_fixed().remove(widget)
}

///|
pub fn Fixed::as_widget(self : Fixed) -> Widget = "%identity"

///|
pub impl IWidget for Fixed with fn as_widget(self) {
  self.as_widget()
}

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

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