// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IGestureSingle {
  fn as_gesture_single(Self) -> GestureSingle
  fn get_button(Self) -> UInt = _
  fn get_current_button(Self) -> UInt = _
  fn get_current_sequence(Self) -> @gdk.EventSequence? = _
  fn get_exclusive(Self) -> Bool = _
  fn get_touch_only(Self) -> Bool = _
  fn set_button(Self, UInt) -> Unit = _
  fn set_exclusive(Self, Bool) -> Unit = _
  fn set_touch_only(Self, Bool) -> Unit = _
}

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

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.get_button.html).
#borrow(self)
pub extern "c" fn GestureSingle::get_button(self : GestureSingle) -> UInt = "moonbit_gtk_gesture_single_get_button"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.get_current_button.html).
#borrow(self)
pub extern "c" fn GestureSingle::get_current_button(
  self : GestureSingle,
) -> UInt = "moonbit_gtk_gesture_single_get_current_button"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_gesture_single_get_current_sequence(
  self_ : GestureSingle,
) -> @glib.Nullable[@gdk.EventSequence] = "moonbit_gtk_gesture_single_get_current_sequence"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.get_current_sequence.html).
pub fn GestureSingle::get_current_sequence(
  self : GestureSingle,
) -> @gdk.EventSequence? {
  let raw_result = moonbit_gtk_gesture_single_get_current_sequence(self)
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.get_exclusive.html).
#borrow(self)
pub extern "c" fn GestureSingle::get_exclusive(self : GestureSingle) -> Bool = "moonbit_gtk_gesture_single_get_exclusive"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.get_touch_only.html).
#borrow(self)
pub extern "c" fn GestureSingle::get_touch_only(self : GestureSingle) -> Bool = "moonbit_gtk_gesture_single_get_touch_only"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.set_button.html).
#borrow(self)
pub extern "c" fn GestureSingle::set_button(
  self : GestureSingle,
  button : UInt,
) = "moonbit_gtk_gesture_single_set_button"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.set_exclusive.html).
#borrow(self)
pub extern "c" fn GestureSingle::set_exclusive(
  self : GestureSingle,
  exclusive : Bool,
) = "moonbit_gtk_gesture_single_set_exclusive"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.GestureSingle.set_touch_only.html).
#borrow(self)
pub extern "c" fn GestureSingle::set_touch_only(
  self : GestureSingle,
  touch_only : Bool,
) = "moonbit_gtk_gesture_single_set_touch_only"

///|
impl IGestureSingle with fn get_button(self) -> UInt {
  self.as_gesture_single().get_button()
}

///|
impl IGestureSingle with fn get_current_button(self) -> UInt {
  self.as_gesture_single().get_current_button()
}

///|
impl IGestureSingle with fn get_current_sequence(self) -> @gdk.EventSequence? {
  self.as_gesture_single().get_current_sequence()
}

///|
impl IGestureSingle with fn get_exclusive(self) -> Bool {
  self.as_gesture_single().get_exclusive()
}

///|
impl IGestureSingle with fn get_touch_only(self) -> Bool {
  self.as_gesture_single().get_touch_only()
}

///|
impl IGestureSingle with fn set_button(self, button) -> Unit {
  self.as_gesture_single().set_button(button)
}

///|
impl IGestureSingle with fn set_exclusive(self, exclusive) -> Unit {
  self.as_gesture_single().set_exclusive(exclusive)
}

///|
impl IGestureSingle with fn set_touch_only(self, touch_only) -> Unit {
  self.as_gesture_single().set_touch_only(touch_only)
}

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

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

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

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

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

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