1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
// 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::Accessible;
use crate::Buildable;
use crate::ConstraintTarget;
use crate::Native;
use crate::Root;
use crate::Widget;
use glib::object::IsA;
use glib::object::ObjectType as ObjectType_;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*;
use std::boxed::Box as Box_;
use std::fmt;
use std::mem::transmute;
glib::wrapper! {
/// [`DragIcon`][crate::DragIcon] is a [`Root`][crate::Root] implementation for drag icons.
///
/// A drag icon moves with the pointer during a Drag-and-Drop operation
/// and is destroyed when the drag ends.
///
/// To set up a drag icon and associate it with an ongoing drag operation,
/// use [`for_drag()`][Self::for_drag()] to get the icon for a drag. You can
/// then use it like any other widget and use [`set_child()`][Self::set_child()]
/// to set whatever widget should be used for the drag icon.
///
/// Keep in mind that drag icons do not allow user input.
///
/// # Implements
///
/// [`WidgetExt`][trait@crate::prelude::WidgetExt], [`trait@glib::ObjectExt`], [`AccessibleExt`][trait@crate::prelude::AccessibleExt], [`BuildableExt`][trait@crate::prelude::BuildableExt], [`ConstraintTargetExt`][trait@crate::prelude::ConstraintTargetExt], [`NativeExt`][trait@crate::prelude::NativeExt], [`RootExt`][trait@crate::prelude::RootExt], [`WidgetExtManual`][trait@crate::prelude::WidgetExtManual], [`AccessibleExtManual`][trait@crate::prelude::AccessibleExtManual]
#[doc(alias = "GtkDragIcon")]
pub struct DragIcon(Object<ffi::GtkDragIcon, ffi::GtkDragIconClass>) @extends Widget, @implements Accessible, Buildable, ConstraintTarget, Native, Root;
match fn {
type_ => || ffi::gtk_drag_icon_get_type(),
}
}
impl DragIcon {
/// Gets the widget currently used as drag icon.
///
/// # Returns
///
/// The drag icon
#[doc(alias = "gtk_drag_icon_get_child")]
#[doc(alias = "get_child")]
pub fn child(&self) -> Option<Widget> {
unsafe { from_glib_none(ffi::gtk_drag_icon_get_child(self.to_glib_none().0)) }
}
/// Sets the widget to display as the drag icon.
/// ## `child`
/// a [`Widget`][crate::Widget]
#[doc(alias = "gtk_drag_icon_set_child")]
pub fn set_child(&self, child: Option<&impl IsA<Widget>>) {
unsafe {
ffi::gtk_drag_icon_set_child(
self.to_glib_none().0,
child.map(|p| p.as_ref()).to_glib_none().0,
);
}
}
/// Creates a widget that can be used as a drag icon for the given
/// @value.
///
/// Supported types include strings, [`gdk::RGBA`][crate::gdk::RGBA] and [`TextBuffer`][crate::TextBuffer].
/// If GTK does not know how to create a widget for a given value,
/// it will return [`None`].
///
/// This method is used to set the default drag icon on drag-and-drop
/// operations started by [`DragSource`][crate::DragSource], so you don't need to set
/// a drag icon using this function there.
/// ## `value`
/// a `GValue`
///
/// # Returns
///
/// A new [`Widget`][crate::Widget]
/// for displaying @value as a drag icon.
#[doc(alias = "gtk_drag_icon_create_widget_for_value")]
pub fn create_widget_for_value(value: &glib::Value) -> Option<Widget> {
assert_initialized_main_thread!();
unsafe {
from_glib_full(ffi::gtk_drag_icon_create_widget_for_value(
value.to_glib_none().0,
))
}
}
/// Gets the [`DragIcon`][crate::DragIcon] in use with @drag.
///
/// If no drag icon exists yet, a new one will be created
/// and shown.
/// ## `drag`
/// a [`gdk::Drag`][crate::gdk::Drag]
///
/// # Returns
///
/// the [`DragIcon`][crate::DragIcon]
#[doc(alias = "gtk_drag_icon_get_for_drag")]
#[doc(alias = "get_for_drag")]
pub fn for_drag(drag: &gdk::Drag) -> Widget {
assert_initialized_main_thread!();
unsafe { from_glib_none(ffi::gtk_drag_icon_get_for_drag(drag.to_glib_none().0)) }
}
/// Creates a [`DragIcon`][crate::DragIcon] that shows @paintable, and associates
/// it with the drag operation.
///
/// The hotspot position on the paintable is aligned with the
/// hotspot of the cursor.
/// ## `drag`
/// a [`gdk::Drag`][crate::gdk::Drag]
/// ## `paintable`
/// a [`gdk::Paintable`][crate::gdk::Paintable] to display
/// ## `hot_x`
/// X coordinate of the hotspot
/// ## `hot_y`
/// Y coordinate of the hotspot
#[doc(alias = "gtk_drag_icon_set_from_paintable")]
pub fn set_from_paintable(
drag: &gdk::Drag,
paintable: &impl IsA<gdk::Paintable>,
hot_x: i32,
hot_y: i32,
) {
assert_initialized_main_thread!();
unsafe {
ffi::gtk_drag_icon_set_from_paintable(
drag.to_glib_none().0,
paintable.as_ref().to_glib_none().0,
hot_x,
hot_y,
);
}
}
#[doc(alias = "child")]
pub fn connect_child_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn notify_child_trampoline<F: Fn(&DragIcon) + 'static>(
this: *mut ffi::GtkDragIcon,
_param_spec: glib::ffi::gpointer,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(&from_glib_borrow(this))
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::child\0".as_ptr() as *const _,
Some(transmute::<_, unsafe extern "C" fn()>(
notify_child_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl fmt::Display for DragIcon {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("DragIcon")
}
}