Files
atk
atk_sys
gdk
gdk_sys
gdk_x11_sys
gdkx11
gtk
auto
about_dialog.rsaccel_group.rsaccel_label.rsaction_bar.rsactionable.rsadjustment.rsapp_chooser_button.rsapp_chooser_dialog.rsapp_chooser_widget.rsapplication.rsapplication_window.rsaspect_frame.rsassistant.rsbin.rsbox_.rsbuildable.rsbuilder.rsbutton.rsbutton_box.rscalendar.rscell_area.rscell_area_box.rscell_area_context.rscell_editable.rscell_layout.rscell_renderer.rscell_renderer_accel.rscell_renderer_combo.rscell_renderer_pixbuf.rscell_renderer_progress.rscell_renderer_spin.rscell_renderer_spinner.rscell_renderer_text.rscell_renderer_toggle.rscell_view.rscheck_button.rscheck_menu_item.rsclipboard.rscolor_button.rscolor_chooser.rscolor_chooser_dialog.rscolor_chooser_widget.rscombo_box.rscombo_box_text.rsconstants.rscontainer.rscss_provider.rscss_section.rsdialog.rsdrawing_area.rseditable.rsentry.rsentry_completion.rsenums.rsevent_box.rsevent_controller.rsevent_controller_key.rsevent_controller_motion.rsevent_controller_scroll.rsexpander.rsfile_chooser.rsfile_chooser_button.rsfile_chooser_dialog.rsfile_chooser_native.rsfile_chooser_widget.rsfile_filter.rsfixed.rsflags.rsflow_box.rsflow_box_child.rsfont_button.rsfont_chooser.rsfont_chooser_dialog.rsfont_chooser_widget.rsframe.rsfunctions.rsgesture.rsgesture_drag.rsgesture_long_press.rsgesture_multi_press.rsgesture_pan.rsgesture_rotate.rsgesture_single.rsgesture_stylus.rsgesture_swipe.rsgesture_zoom.rsgl_area.rsgrid.rsheader_bar.rsicon_info.rsicon_theme.rsicon_view.rsim_context.rsim_context_simple.rsim_multicontext.rsimage.rsinfo_bar.rsinvisible.rslabel.rslayout.rslevel_bar.rslink_button.rslist_box.rslist_box_row.rslist_store.rslock_button.rsmenu.rsmenu_bar.rsmenu_button.rsmenu_item.rsmenu_shell.rsmenu_tool_button.rsmessage_dialog.rsmisc.rsmod.rsmodel_button.rsmount_operation.rsnative_dialog.rsnotebook.rsoffscreen_window.rsorientable.rsoverlay.rspad_controller.rspage_setup.rspaned.rspaper_size.rsplaces_sidebar.rsplug.rspopover.rspopover_menu.rsprint_context.rsprint_operation.rsprint_operation_preview.rsprint_settings.rsprogress_bar.rsradio_button.rsradio_menu_item.rsradio_tool_button.rsrange.rsrecent_chooser.rsrecent_chooser_dialog.rsrecent_chooser_menu.rsrecent_chooser_widget.rsrecent_filter.rsrecent_info.rsrecent_manager.rsrevealer.rsscale.rsscale_button.rsscrollable.rsscrollbar.rsscrolled_window.rssearch_bar.rssearch_entry.rsselection_data.rsseparator.rsseparator_menu_item.rsseparator_tool_item.rssettings.rsshortcut_label.rsshortcuts_group.rsshortcuts_section.rsshortcuts_shortcut.rsshortcuts_window.rssize_group.rssocket.rsspin_button.rsspinner.rsstack.rsstack_sidebar.rsstack_switcher.rsstatusbar.rsstyle_context.rsstyle_properties.rsstyle_provider.rsswitch.rstarget_list.rstext_attributes.rstext_buffer.rstext_child_anchor.rstext_iter.rstext_mark.rstext_tag.rstext_tag_table.rstext_view.rstoggle_button.rstoggle_tool_button.rstool_button.rstool_item.rstool_item_group.rstool_palette.rstool_shell.rstoolbar.rstooltip.rstree_drag_dest.rstree_drag_source.rstree_iter.rstree_model.rstree_model_filter.rstree_model_sort.rstree_path.rstree_row_reference.rstree_selection.rstree_sortable.rstree_store.rstree_view.rstree_view_column.rsviewport.rsvolume_button.rswidget.rswidget_path.rswindow.rswindow_group.rs
subclass
gtk3_macros
gtk_sys
 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
// Take a look at the license at the top of the repository in the LICENSE file.

use crate::AxisUse;
use crate::Device;
use crate::TimeCoord;
use crate::Window;
use glib::object::IsA;
use glib::translate::*;

use std::mem;
use std::ptr;

impl Device {
    #[doc(alias = "gdk_device_get_axis")]
    #[doc(alias = "get_axis")]
    pub fn is_axis(&self, axes: &mut [f64], use_: AxisUse, value: &mut f64) -> bool {
        unsafe {
            from_glib(ffi::gdk_device_get_axis(
                self.to_glib_none().0,
                axes.as_mut_ptr(),
                use_.into_glib(),
                value,
            ))
        }
    }

    /// Obtains the motion history for a pointer device; given a starting and
    /// ending timestamp, return all events in the motion history for
    /// the device in the given range of time. Some windowing systems
    /// do not support motion history, in which case, [`false`] will
    /// be returned. (This is not distinguishable from the case where
    /// motion history is supported and no events were found.)
    ///
    /// Note that there is also [`Window::set_event_compression()`][crate::Window::set_event_compression()] to get
    /// more motion events delivered directly, independent of the windowing
    /// system.
    /// ## `window`
    /// the window with respect to which which the event coordinates will be reported
    /// ## `start`
    /// starting timestamp for range of events to return
    /// ## `stop`
    /// ending timestamp for the range of events to return
    ///
    /// # Returns
    ///
    /// [`true`] if the windowing system supports motion history and
    ///  at least one event was found.
    ///
    /// ## `events`
    ///
    ///  location to store a newly-allocated array of [`TimeCoord`][crate::TimeCoord], or
    ///  [`None`]
    #[doc(alias = "gdk_device_get_history")]
    #[doc(alias = "get_history")]
    pub fn history<P: IsA<Window>>(&self, window: &P, start: u32, stop: u32) -> Vec<TimeCoord> {
        unsafe {
            let mut events = ptr::null_mut();
            let mut n_events = mem::MaybeUninit::uninit();
            let ret: bool = from_glib(ffi::gdk_device_get_history(
                self.to_glib_none().0,
                window.as_ref().to_glib_none().0,
                start,
                stop,
                &mut events,
                n_events.as_mut_ptr(),
            ));
            if !ret {
                return Vec::new();
            }
            let n_events = n_events.assume_init() as usize;
            let mut r_events = Vec::with_capacity(n_events);
            for i in 0..n_events {
                r_events.push((*(events.add(i) as *mut TimeCoord)).clone());
            }
            ffi::gdk_device_free_history(events, n_events as _);
            r_events
        }
    }
}