glib_macros

Derive Macro Downgrade

Source
#[derive(Downgrade)]
Expand description

Macro for deriving implementations of glib::clone::Downgrade and glib::clone::Upgrade traits and a weak type.

§Examples

§New Type Idiom

#[derive(glib::Downgrade)]
pub struct FancyLabel(gtk::Label);

impl FancyLabel {
    pub fn new(label: &str) -> Self {
        Self(gtk::LabelBuilder::new().label(label).build())
    }

    pub fn flip(&self) {
        self.0.set_angle(180.0 - self.0.angle());
    }
}

let fancy_label = FancyLabel::new("Look at me!");
let button = gtk::ButtonBuilder::new().label("Click me!").build();
button.connect_clicked(
    clone!(
        #[weak]
        fancy_label,
        move || fancy_label.flip(),
    ),
);

§Generic New Type

#[derive(glib::Downgrade)]
pub struct TypedEntry<T>(gtk::Entry, std::marker::PhantomData<T>);

impl<T: ToString + FromStr> for TypedEntry<T> {
    // ...
}

§Structures and Enums

#[derive(Clone, glib::Downgrade)]
pub struct ControlButtons {
    pub up: gtk::Button,
    pub down: gtk::Button,
    pub left: gtk::Button,
    pub right: gtk::Button,
}

#[derive(Clone, glib::Downgrade)]
pub enum DirectionButton {
    Left(gtk::Button),
    Right(gtk::Button),
    Up(gtk::Button),
    Down(gtk::Button),
}