// This file was generated by gir (https://github.com/gtk-rs/gir) // from gir-files (https://github.com/gtk-rs/gir-files) // DO NOT EDIT use crate::EventController; use crate::Gesture; use crate::GestureSingle; use crate::PropagationPhase; use crate::Widget; use glib::object::Cast; use glib::object::IsA; use glib::signal::connect_raw; use glib::signal::SignalHandlerId; use glib::translate::*; use glib::StaticType; use glib::ToValue; use std::boxed::Box as Box_; use std::fmt; use std::mem; use std::mem::transmute; glib::wrapper! { #[doc(alias = "GtkGestureDrag")] pub struct GestureDrag(Object) @extends GestureSingle, Gesture, EventController; match fn { type_ => || ffi::gtk_gesture_drag_get_type(), } } impl GestureDrag { #[doc(alias = "gtk_gesture_drag_new")] pub fn new>(widget: &P) -> GestureDrag { skip_assert_initialized!(); unsafe { Gesture::from_glib_full(ffi::gtk_gesture_drag_new(widget.as_ref().to_glib_none().0)) .unsafe_cast() } } // rustdoc-stripper-ignore-next /// Creates a new builder-pattern struct instance to construct [`GestureDrag`] objects. /// /// This method returns an instance of [`GestureDragBuilder`] which can be used to create [`GestureDrag`] objects. pub fn builder() -> GestureDragBuilder { GestureDragBuilder::default() } } #[derive(Clone, Default)] // rustdoc-stripper-ignore-next /// A [builder-pattern] type to construct [`GestureDrag`] objects. /// /// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html pub struct GestureDragBuilder { button: Option, exclusive: Option, touch_only: Option, n_points: Option, window: Option, propagation_phase: Option, widget: Option, } impl GestureDragBuilder { // rustdoc-stripper-ignore-next /// Create a new [`GestureDragBuilder`]. pub fn new() -> Self { Self::default() } // rustdoc-stripper-ignore-next /// Build the [`GestureDrag`]. pub fn build(self) -> GestureDrag { let mut properties: Vec<(&str, &dyn ToValue)> = vec![]; if let Some(ref button) = self.button { properties.push(("button", button)); } if let Some(ref exclusive) = self.exclusive { properties.push(("exclusive", exclusive)); } if let Some(ref touch_only) = self.touch_only { properties.push(("touch-only", touch_only)); } if let Some(ref n_points) = self.n_points { properties.push(("n-points", n_points)); } if let Some(ref window) = self.window { properties.push(("window", window)); } if let Some(ref propagation_phase) = self.propagation_phase { properties.push(("propagation-phase", propagation_phase)); } if let Some(ref widget) = self.widget { properties.push(("widget", widget)); } glib::Object::new::(&properties) .expect("Failed to create an instance of GestureDrag") } pub fn button(mut self, button: u32) -> Self { self.button = Some(button); self } pub fn exclusive(mut self, exclusive: bool) -> Self { self.exclusive = Some(exclusive); self } pub fn touch_only(mut self, touch_only: bool) -> Self { self.touch_only = Some(touch_only); self } pub fn n_points(mut self, n_points: u32) -> Self { self.n_points = Some(n_points); self } pub fn window(mut self, window: &gdk::Window) -> Self { self.window = Some(window.clone()); self } pub fn propagation_phase(mut self, propagation_phase: PropagationPhase) -> Self { self.propagation_phase = Some(propagation_phase); self } pub fn widget>(mut self, widget: &P) -> Self { self.widget = Some(widget.clone().upcast()); self } } pub const NONE_GESTURE_DRAG: Option<&GestureDrag> = None; pub trait GestureDragExt: 'static { #[doc(alias = "gtk_gesture_drag_get_offset")] #[doc(alias = "get_offset")] fn offset(&self) -> Option<(f64, f64)>; #[doc(alias = "gtk_gesture_drag_get_start_point")] #[doc(alias = "get_start_point")] fn start_point(&self) -> Option<(f64, f64)>; #[doc(alias = "drag-begin")] fn connect_drag_begin(&self, f: F) -> SignalHandlerId; #[doc(alias = "drag-end")] fn connect_drag_end(&self, f: F) -> SignalHandlerId; #[doc(alias = "drag-update")] fn connect_drag_update(&self, f: F) -> SignalHandlerId; } impl> GestureDragExt for O { fn offset(&self) -> Option<(f64, f64)> { unsafe { let mut x = mem::MaybeUninit::uninit(); let mut y = mem::MaybeUninit::uninit(); let ret = from_glib(ffi::gtk_gesture_drag_get_offset( self.as_ref().to_glib_none().0, x.as_mut_ptr(), y.as_mut_ptr(), )); let x = x.assume_init(); let y = y.assume_init(); if ret { Some((x, y)) } else { None } } } fn start_point(&self) -> Option<(f64, f64)> { unsafe { let mut x = mem::MaybeUninit::uninit(); let mut y = mem::MaybeUninit::uninit(); let ret = from_glib(ffi::gtk_gesture_drag_get_start_point( self.as_ref().to_glib_none().0, x.as_mut_ptr(), y.as_mut_ptr(), )); let x = x.assume_init(); let y = y.assume_init(); if ret { Some((x, y)) } else { None } } } fn connect_drag_begin(&self, f: F) -> SignalHandlerId { unsafe extern "C" fn drag_begin_trampoline< P: IsA, F: Fn(&P, f64, f64) + 'static, >( this: *mut ffi::GtkGestureDrag, start_x: libc::c_double, start_y: libc::c_double, f: glib::ffi::gpointer, ) { let f: &F = &*(f as *const F); f( GestureDrag::from_glib_borrow(this).unsafe_cast_ref(), start_x, start_y, ) } unsafe { let f: Box_ = Box_::new(f); connect_raw( self.as_ptr() as *mut _, b"drag-begin\0".as_ptr() as *const _, Some(transmute::<_, unsafe extern "C" fn()>( drag_begin_trampoline:: as *const (), )), Box_::into_raw(f), ) } } fn connect_drag_end(&self, f: F) -> SignalHandlerId { unsafe extern "C" fn drag_end_trampoline< P: IsA, F: Fn(&P, f64, f64) + 'static, >( this: *mut ffi::GtkGestureDrag, offset_x: libc::c_double, offset_y: libc::c_double, f: glib::ffi::gpointer, ) { let f: &F = &*(f as *const F); f( GestureDrag::from_glib_borrow(this).unsafe_cast_ref(), offset_x, offset_y, ) } unsafe { let f: Box_ = Box_::new(f); connect_raw( self.as_ptr() as *mut _, b"drag-end\0".as_ptr() as *const _, Some(transmute::<_, unsafe extern "C" fn()>( drag_end_trampoline:: as *const (), )), Box_::into_raw(f), ) } } fn connect_drag_update(&self, f: F) -> SignalHandlerId { unsafe extern "C" fn drag_update_trampoline< P: IsA, F: Fn(&P, f64, f64) + 'static, >( this: *mut ffi::GtkGestureDrag, offset_x: libc::c_double, offset_y: libc::c_double, f: glib::ffi::gpointer, ) { let f: &F = &*(f as *const F); f( GestureDrag::from_glib_borrow(this).unsafe_cast_ref(), offset_x, offset_y, ) } unsafe { let f: Box_ = Box_::new(f); connect_raw( self.as_ptr() as *mut _, b"drag-update\0".as_ptr() as *const _, Some(transmute::<_, unsafe extern "C" fn()>( drag_update_trampoline:: as *const (), )), Box_::into_raw(f), ) } } } impl fmt::Display for GestureDrag { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str("GestureDrag") } }