// GENERATED — DO NOT EDIT

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

///|
pub(open) trait IEventControllerScroll {
  fn as_event_controller_scroll(Self) -> EventControllerScroll
  fn get_flags(Self) -> EventControllerScrollFlags = _
  fn get_unit(Self) -> @gdk.ScrollUnit = _
  fn set_flags(Self, EventControllerScrollFlags) -> Unit = _
  fn connect_decelerate(Self, (EventControllerScroll, Double, Double) -> Unit) -> UInt64 = _
  fn connect_scroll(Self, (EventControllerScroll, Double, Double) -> Bool) -> UInt64 = _
  fn connect_scroll_begin(Self, (EventControllerScroll) -> Unit) -> UInt64 = _
  fn connect_scroll_end(Self, (EventControllerScroll) -> Unit) -> UInt64 = _
}

///|
pub impl IEventControllerScroll for EventControllerScroll with fn as_event_controller_scroll(
  self,
) {
  self
}

///|
extern "c" fn moonbit_gtk_event_controller_scroll_new(
  flags : Int,
) -> EventControllerScroll = "moonbit_gtk_event_controller_scroll_new"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.EventControllerScroll.new.html).
pub fn EventControllerScroll::new(
  flags : EventControllerScrollFlags,
) -> EventControllerScroll {
  moonbit_gtk_event_controller_scroll_new(flags.to_int())
}

///|
#borrow(self_)
extern "c" fn moonbit_gtk_event_controller_scroll_get_flags(
  self_ : EventControllerScroll,
) -> Int = "moonbit_gtk_event_controller_scroll_get_flags"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EventControllerScroll.get_flags.html).
pub fn EventControllerScroll::get_flags(
  self : EventControllerScroll,
) -> EventControllerScrollFlags {
  EventControllerScrollFlags::from_int(
    moonbit_gtk_event_controller_scroll_get_flags(self),
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EventControllerScroll.get_unit.html).
#borrow(self)
pub extern "c" fn EventControllerScroll::get_unit(
  self : EventControllerScroll,
) -> @gdk.ScrollUnit = "moonbit_gtk_event_controller_scroll_get_unit"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_event_controller_scroll_set_flags(
  self_ : EventControllerScroll,
  flags : Int,
) = "moonbit_gtk_event_controller_scroll_set_flags"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.EventControllerScroll.set_flags.html).
pub fn EventControllerScroll::set_flags(
  self : EventControllerScroll,
  flags : EventControllerScrollFlags,
) -> Unit {
  moonbit_gtk_event_controller_scroll_set_flags(self, flags.to_int())
}

///|
#borrow(instance)
extern "c" fn gtk_event_controller_scroll_connect_decelerate(
  instance : EventControllerScroll,
  function : FuncRef[
    (
      EventControllerScroll,
      Double,
      Double,
      (EventControllerScroll, Double, Double) -> Unit,
    ) -> Unit,
  ],
  closure : (EventControllerScroll, Double, Double) -> Unit,
) -> UInt64 = "moonbit_gtk_event_controller_scroll_connect_decelerate"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.EventControllerScroll.decelerate.html).
pub fn EventControllerScroll::connect_decelerate(
  self : EventControllerScroll,
  f : (EventControllerScroll, Double, Double) -> Unit,
) -> UInt64 {
  gtk_event_controller_scroll_connect_decelerate(
    self,
    fn(instance_, vel_x, vel_y, f) { f(instance_, vel_x, vel_y) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_event_controller_scroll_connect_scroll(
  instance : EventControllerScroll,
  function : FuncRef[
    (
      EventControllerScroll,
      Double,
      Double,
      (EventControllerScroll, Double, Double) -> Bool,
    ) -> Bool,
  ],
  closure : (EventControllerScroll, Double, Double) -> Bool,
) -> UInt64 = "moonbit_gtk_event_controller_scroll_connect_scroll"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.EventControllerScroll.scroll.html).
pub fn EventControllerScroll::connect_scroll(
  self : EventControllerScroll,
  f : (EventControllerScroll, Double, Double) -> Bool,
) -> UInt64 {
  gtk_event_controller_scroll_connect_scroll(
    self,
    fn(instance_, dx, dy, f) { f(instance_, dx, dy) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_event_controller_scroll_connect_scroll_begin(
  instance : EventControllerScroll,
  function : FuncRef[
    (EventControllerScroll, (EventControllerScroll) -> Unit) -> Unit,
  ],
  closure : (EventControllerScroll) -> Unit,
) -> UInt64 = "moonbit_gtk_event_controller_scroll_connect_scroll_begin"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.EventControllerScroll.scroll-begin.html).
pub fn EventControllerScroll::connect_scroll_begin(
  self : EventControllerScroll,
  f : (EventControllerScroll) -> Unit,
) -> UInt64 {
  gtk_event_controller_scroll_connect_scroll_begin(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_event_controller_scroll_connect_scroll_end(
  instance : EventControllerScroll,
  function : FuncRef[
    (EventControllerScroll, (EventControllerScroll) -> Unit) -> Unit,
  ],
  closure : (EventControllerScroll) -> Unit,
) -> UInt64 = "moonbit_gtk_event_controller_scroll_connect_scroll_end"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.EventControllerScroll.scroll-end.html).
pub fn EventControllerScroll::connect_scroll_end(
  self : EventControllerScroll,
  f : (EventControllerScroll) -> Unit,
) -> UInt64 {
  gtk_event_controller_scroll_connect_scroll_end(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
impl IEventControllerScroll with fn get_flags(self) -> EventControllerScrollFlags {
  self.as_event_controller_scroll().get_flags()
}

///|
impl IEventControllerScroll with fn get_unit(self) -> @gdk.ScrollUnit {
  self.as_event_controller_scroll().get_unit()
}

///|
impl IEventControllerScroll with fn set_flags(self, flags) -> Unit {
  self.as_event_controller_scroll().set_flags(flags)
}

///|
impl IEventControllerScroll with fn connect_decelerate(self, f) -> UInt64 {
  self.as_event_controller_scroll().connect_decelerate(f)
}

///|
impl IEventControllerScroll with fn connect_scroll(self, f) -> UInt64 {
  self.as_event_controller_scroll().connect_scroll(f)
}

///|
impl IEventControllerScroll with fn connect_scroll_begin(self, f) -> UInt64 {
  self.as_event_controller_scroll().connect_scroll_begin(f)
}

///|
impl IEventControllerScroll with fn connect_scroll_end(self, f) -> UInt64 {
  self.as_event_controller_scroll().connect_scroll_end(f)
}

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

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

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

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