Bold buttons

This commit is contained in:
Ian Douglas Scott 2021-09-03 10:57:34 -07:00
parent d1493a5a1f
commit 3f9fd84737
2 changed files with 32 additions and 10 deletions

View file

@ -1,6 +1,7 @@
use cascade::cascade; use cascade::cascade;
use gtk4::{ use gtk4::{
glib::{self, clone}, glib::{self, clone},
pango,
prelude::*, prelude::*,
subclass::prelude::*, subclass::prelude::*,
}; };
@ -13,6 +14,7 @@ use crate::popover_container::PopoverContainer;
pub struct TimeButtonInner { pub struct TimeButtonInner {
calendar: DerefCell<gtk4::Calendar>, calendar: DerefCell<gtk4::Calendar>,
button: DerefCell<gtk4::ToggleButton>, button: DerefCell<gtk4::ToggleButton>,
label: DerefCell<gtk4::Label>,
} }
#[glib::object_subclass] #[glib::object_subclass]
@ -32,9 +34,18 @@ impl ObjectImpl for TimeButtonInner {
gtk4::Calendar::new(); gtk4::Calendar::new();
}; };
let label = cascade! {
gtk4::Label::new(None);
..set_attributes(Some(&cascade! {
pango::AttrList::new();
..insert(pango::Attribute::new_weight(pango::Weight::Bold));
}));
};
let button = cascade! { let button = cascade! {
gtk4::ToggleButton::new(); gtk4::ToggleButton::new();
..set_has_frame(false); ..set_has_frame(false);
..set_child(Some(&label));
}; };
cascade! { cascade! {
@ -51,6 +62,7 @@ impl ObjectImpl for TimeButtonInner {
self.calendar.set(calendar); self.calendar.set(calendar);
self.button.set(button); self.button.set(button);
self.label.set(label);
// TODO: better way to do this? // TODO: better way to do this?
glib::timeout_add_seconds_local( glib::timeout_add_seconds_local(
@ -94,7 +106,7 @@ impl TimeButton {
// TODO: Locale-based formatting? // TODO: Locale-based formatting?
let time = chrono::Local::now(); let time = chrono::Local::now();
self.inner() self.inner()
.button .label
.set_label(&time.format("%b %-d %-I:%M %p").to_string()); .set_label(&time.format("%b %-d %-I:%M %p").to_string());
// time.format("%B %-d %Y") // time.format("%B %-d %Y")
} }

View file

@ -1,6 +1,6 @@
use cascade::cascade; use cascade::cascade;
use glib::clone; use glib::clone;
use gtk4::{gdk, glib, prelude::*, subclass::prelude::*}; use gtk4::{gdk, glib, pango, prelude::*, subclass::prelude::*};
use std::cell::Cell; use std::cell::Cell;
use crate::deref_cell::DerefCell; use crate::deref_cell::DerefCell;
@ -10,6 +10,22 @@ use crate::x;
const BOTTOM: bool = false; const BOTTOM: bool = false;
fn button(text: &str) -> gtk4::Button {
let label = cascade! {
gtk4::Label::new(Some(text));
..set_attributes(Some(&cascade! {
pango::AttrList::new();
..insert(pango::Attribute::new_weight(pango::Weight::Bold));
}));
};
cascade! {
gtk4::Button::new();
..set_has_frame(false);
..set_child(Some(&label));
}
}
#[derive(Default)] #[derive(Default)]
pub struct PanelWindowInner { pub struct PanelWindowInner {
size: Cell<Option<(i32, i32)>>, size: Cell<Option<(i32, i32)>>,
@ -29,14 +45,8 @@ impl ObjectImpl for PanelWindowInner {
gtk4::CenterBox::new(); gtk4::CenterBox::new();
..set_start_widget(Some(&cascade! { ..set_start_widget(Some(&cascade! {
gtk4::Box::new(gtk4::Orientation::Horizontal, 0); gtk4::Box::new(gtk4::Orientation::Horizontal, 0);
..append(&cascade! { ..append(&button("Workspaces"));
gtk4::Button::with_label("Workspaces"); ..append(&button("Applications"));
..set_has_frame(false);
});
..append(&cascade! {
gtk4::Button::with_label("Applications");
..set_has_frame(false);
});
})); }));
..set_center_widget(Some(&TimeButton::new())); ..set_center_widget(Some(&TimeButton::new()));
..set_end_widget(Some(&StatusArea::new())); ..set_end_widget(Some(&StatusArea::new()));