1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-08-17 06:41:03 +02:00

feat: justify property for clock and custom label

This commit is contained in:
BowDown097 2025-01-01 12:07:42 -08:00
parent 5136637752
commit 708118d266
6 changed files with 52 additions and 9 deletions

View file

@ -3,7 +3,7 @@ use crate::script::{Script, ScriptInput};
use glib::Propagation;
use gtk::gdk::ScrollDirection;
use gtk::prelude::*;
use gtk::{EventBox, Orientation, Revealer, RevealerTransitionType};
use gtk::{EventBox, Justification, Orientation, Revealer, RevealerTransitionType};
use serde::Deserialize;
use tracing::trace;
@ -198,6 +198,28 @@ impl From<ModuleOrientation> for Orientation {
}
}
#[derive(Debug, Default, Deserialize, Clone, Copy)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub enum ModuleJustification {
#[default]
Left,
Right,
Center,
Fill
}
impl From<ModuleJustification> for Justification {
fn from(o: ModuleJustification) -> Self {
match o {
ModuleJustification::Left => Self::Left,
ModuleJustification::Right => Self::Right,
ModuleJustification::Center => Self::Center,
ModuleJustification::Fill => Self::Fill
}
}
}
impl TransitionType {
pub const fn to_revealer_transition_type(
&self,

View file

@ -45,7 +45,7 @@ use std::collections::HashMap;
#[cfg(feature = "schema")]
use schemars::JsonSchema;
pub use self::common::{CommonConfig, ModuleOrientation, TransitionType};
pub use self::common::{CommonConfig, ModuleJustification, ModuleOrientation, TransitionType};
pub use self::truncate::{EllipsizeMode, TruncateMode};
#[derive(Debug, Deserialize, Clone)]

View file

@ -8,7 +8,7 @@ use serde::Deserialize;
use tokio::sync::{broadcast, mpsc};
use tokio::time::sleep;
use crate::config::{CommonConfig, ModuleOrientation};
use crate::config::{CommonConfig, ModuleJustification, ModuleOrientation};
use crate::gtk_helpers::IronbarGtkExt;
use crate::modules::{
Module, ModuleInfo, ModuleParts, ModulePopup, ModuleUpdateEvent, PopupButton, WidgetContext,
@ -61,6 +61,14 @@ pub struct ClockModule {
/// See [common options](module-level-options#common-options).
#[serde(flatten)]
pub common: Option<CommonConfig>,
/// The justification (alignment) of the date/time shown on the bar.
///
/// **Valid options**: `left`, `right`, `center`, `fill`
/// <br>
/// **Default**: `left`
#[serde(default)]
justify: ModuleJustification
}
impl Default for ClockModule {
@ -71,6 +79,7 @@ impl Default for ClockModule {
locale: default_locale(),
orientation: ModuleOrientation::Horizontal,
common: Some(CommonConfig::default()),
justify: ModuleJustification::Left
}
}
}
@ -129,6 +138,7 @@ impl Module<Button> for ClockModule {
let label = Label::builder()
.angle(self.orientation.to_angle())
.use_markup(true)
.justify(self.justify.into())
.build();
button.add(&label);

View file

@ -4,7 +4,7 @@ use serde::Deserialize;
use super::{CustomWidget, CustomWidgetContext};
use crate::build;
use crate::config::ModuleOrientation;
use crate::config::{ModuleJustification, ModuleOrientation};
use crate::dynamic_value::dynamic_string;
use crate::gtk_helpers::IronbarLabelExt;
@ -36,6 +36,14 @@ pub struct LabelWidget {
/// **Default**: `horizontal`
#[serde(default)]
orientation: ModuleOrientation,
/// The justification (alignment) of the label text.
///
/// **Valid options**: `left`, `right`, `center`, `fill`
/// <br>
/// **Default**: `left`
#[serde(default)]
justify: ModuleJustification
}
impl CustomWidget for LabelWidget {
@ -45,6 +53,7 @@ impl CustomWidget for LabelWidget {
let label = build!(self, Self::Widget);
label.set_angle(self.orientation.to_angle());
label.set_justify(self.justify.into());
label.set_use_markup(true);
{