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
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from
// from gir-files (https://github.com/gtk-rs/gir-files.git)
// DO NOT EDIT
use crate::ffi;
use glib::{
prelude::*,
signal::{connect_raw, SignalHandlerId},
translate::*,
};
use std::boxed::Box as Box_;
glib::wrapper! {
/// A paintable showing a loading spinner.
///
/// <picture>
/// <source srcset="spinner-dark.png" media="(prefers-color-scheme: dark)">
/// <img src="spinner.png" alt="spinner">
/// </picture>
///
/// [`SpinnerPaintable`][crate::SpinnerPaintable] size varies depending on the available space, but is
/// capped at 64×64 pixels.
///
/// To be able to animate, [`SpinnerPaintable`][crate::SpinnerPaintable] needs a widget. It will be
/// animated according to that widget's frame clock, and only if that widget is
/// mapped. Ideally it should be the same widget the paintable is displayed in,
/// but that's not a requirement.
///
/// Most applications should be using [`Spinner`][crate::Spinner] instead.
/// [`SpinnerPaintable`][crate::SpinnerPaintable] is provided for the cases where using a widget is
/// impractical or impossible, such as [`paintable`][struct@crate::StatusPage#paintable]:
///
/// ```xml
/// <object class="AdwStatusPage" id="status_page">
/// <property name="paintable">
/// <object class="AdwSpinnerPaintable">
/// <property name="widget">status_page</property>
/// </object>
/// </property>
/// <!-- ... -->
/// </object>
/// ```
///
/// ## Properties
///
///
/// #### `widget`
/// The widget the spinner uses for frame clock.
///
/// Readable | Writeable
///
/// # Implements
///
/// [`trait@glib::ObjectExt`], [`trait@gdk::prelude::PaintableExt`]
#[doc(alias = "AdwSpinnerPaintable")]
pub struct SpinnerPaintable(Object<ffi::AdwSpinnerPaintable, ffi::AdwSpinnerPaintableClass>) @implements gdk::Paintable;
match fn {
type_ => || ffi::adw_spinner_paintable_get_type(),
}
}
impl SpinnerPaintable {
/// Creates a new [`SpinnerPaintable`][crate::SpinnerPaintable] for @widget.
/// ## `widget`
/// the widget used for frame clock
///
/// # Returns
///
/// the newly created [`SpinnerPaintable`][crate::SpinnerPaintable]
#[doc(alias = "adw_spinner_paintable_new")]
pub fn new(widget: Option<&impl IsA<gtk::Widget>>) -> SpinnerPaintable {
assert_initialized_main_thread!();
unsafe {
from_glib_full(ffi::adw_spinner_paintable_new(
widget.map(|p| p.as_ref()).to_glib_none().0,
))
}
}
/// Gets the widget used for frame clock.
///
/// # Returns
///
/// the widget
#[doc(alias = "adw_spinner_paintable_get_widget")]
#[doc(alias = "get_widget")]
pub fn widget(&self) -> Option<gtk::Widget> {
unsafe { from_glib_none(ffi::adw_spinner_paintable_get_widget(self.to_glib_none().0)) }
}
/// Sets the widget used for frame clock.
/// ## `widget`
/// the widget to use for frame clock
#[doc(alias = "adw_spinner_paintable_set_widget")]
#[doc(alias = "widget")]
pub fn set_widget(&self, widget: Option<&impl IsA<gtk::Widget>>) {
unsafe {
ffi::adw_spinner_paintable_set_widget(
self.to_glib_none().0,
widget.map(|p| p.as_ref()).to_glib_none().0,
);
}
}
#[cfg(feature = "v1_6")]
#[cfg_attr(docsrs, doc(cfg(feature = "v1_6")))]
#[doc(alias = "widget")]
pub fn connect_widget_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn notify_widget_trampoline<F: Fn(&SpinnerPaintable) + 'static>(
this: *mut ffi::AdwSpinnerPaintable,
_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::widget\0".as_ptr() as *const _,
Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
notify_widget_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}