// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IGestureClick {
  fn as_gesture_click(Self) -> GestureClick
  fn connect_pressed(Self, (GestureClick, Int, Double, Double) -> Unit) -> UInt64 = _
  fn connect_released(Self, (GestureClick, Int, Double, Double) -> Unit) -> UInt64 = _
  fn connect_stopped(Self, (GestureClick) -> Unit) -> UInt64 = _
  fn connect_unpaired_release(
    Self,
    (GestureClick, Double, Double, UInt, @gdk.EventSequence?) -> Unit,
  ) -> UInt64 = _
}

///|
pub impl IGestureClick for GestureClick with fn as_gesture_click(self) {
  self
}

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

///|
#borrow(instance)
extern "c" fn gtk_gesture_click_connect_pressed(
  instance : GestureClick,
  function : FuncRef[
    (
      GestureClick,
      Int,
      Double,
      Double,
      (GestureClick, Int, Double, Double) -> Unit,
    ) -> Unit,
  ],
  closure : (GestureClick, Int, Double, Double) -> Unit,
) -> UInt64 = "moonbit_gtk_gesture_click_connect_pressed"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.GestureClick.pressed.html).
pub fn GestureClick::connect_pressed(
  self : GestureClick,
  f : (GestureClick, Int, Double, Double) -> Unit,
) -> UInt64 {
  gtk_gesture_click_connect_pressed(
    self,
    fn(instance_, n_press, x, y, f) { f(instance_, n_press, x, y) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_gesture_click_connect_released(
  instance : GestureClick,
  function : FuncRef[
    (
      GestureClick,
      Int,
      Double,
      Double,
      (GestureClick, Int, Double, Double) -> Unit,
    ) -> Unit,
  ],
  closure : (GestureClick, Int, Double, Double) -> Unit,
) -> UInt64 = "moonbit_gtk_gesture_click_connect_released"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.GestureClick.released.html).
pub fn GestureClick::connect_released(
  self : GestureClick,
  f : (GestureClick, Int, Double, Double) -> Unit,
) -> UInt64 {
  gtk_gesture_click_connect_released(
    self,
    fn(instance_, n_press, x, y, f) { f(instance_, n_press, x, y) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_gesture_click_connect_stopped(
  instance : GestureClick,
  function : FuncRef[(GestureClick, (GestureClick) -> Unit) -> Unit],
  closure : (GestureClick) -> Unit,
) -> UInt64 = "moonbit_gtk_gesture_click_connect_stopped"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.GestureClick.stopped.html).
pub fn GestureClick::connect_stopped(
  self : GestureClick,
  f : (GestureClick) -> Unit,
) -> UInt64 {
  gtk_gesture_click_connect_stopped(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_gesture_click_connect_unpaired_release(
  instance : GestureClick,
  function : FuncRef[
    (
      GestureClick,
      Double,
      Double,
      UInt,
      @gdk.EventSequence?,
      (GestureClick, Double, Double, UInt, @gdk.EventSequence?) -> Unit,
    ) -> Unit,
  ],
  closure : (GestureClick, Double, Double, UInt, @gdk.EventSequence?) -> Unit,
) -> UInt64 = "moonbit_gtk_gesture_click_connect_unpaired_release"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.GestureClick.unpaired-release.html).
pub fn GestureClick::connect_unpaired_release(
  self : GestureClick,
  f : (GestureClick, Double, Double, UInt, @gdk.EventSequence?) -> Unit,
) -> UInt64 {
  gtk_gesture_click_connect_unpaired_release(
    self,
    fn(instance_, x, y, button, sequence, f) {
      f(instance_, x, y, button, sequence)
    },
    f,
  )
}

///|
impl IGestureClick with fn connect_pressed(self, f) -> UInt64 {
  self.as_gesture_click().connect_pressed(f)
}

///|
impl IGestureClick with fn connect_released(self, f) -> UInt64 {
  self.as_gesture_click().connect_released(f)
}

///|
impl IGestureClick with fn connect_stopped(self, f) -> UInt64 {
  self.as_gesture_click().connect_stopped(f)
}

///|
impl IGestureClick with fn connect_unpaired_release(self, f) -> UInt64 {
  self.as_gesture_click().connect_unpaired_release(f)
}

///|
pub fn GestureClick::as_gesture_single(self : GestureClick) -> GestureSingle = "%identity"

///|
pub impl IGestureSingle for GestureClick with fn as_gesture_single(self) {
  self.as_gesture_single()
}

///|
pub fn GestureClick::as_gesture(self : GestureClick) -> Gesture = "%identity"

///|
pub impl IGesture for GestureClick with fn as_gesture(self) {
  self.as_gesture()
}

///|
pub fn GestureClick::as_event_controller(
  self : GestureClick,
) -> EventController = "%identity"

///|
pub impl IEventController for GestureClick with fn as_event_controller(self) {
  self.as_event_controller()
}

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

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