use crate::render::{RenderContext, TextAlign, TextBaseline};
use crate::types::{Rect, WidgetState};
use super::settings::ClockSettings;
use super::types::ClockRenderKind;
pub struct ClockView<'a> {
pub time_text: &'a str,
pub hovered: bool,
}
pub fn draw_clock(
ctx: &mut dyn RenderContext,
rect: Rect,
state: WidgetState,
view: &ClockView<'_>,
settings: &ClockSettings,
kind: &ClockRenderKind,
) {
match kind {
ClockRenderKind::Toolbar => {
draw_clock_toolbar(ctx, rect, view, settings);
}
ClockRenderKind::Custom(f) => {
f(ctx, rect, state, view, settings);
}
}
}
fn draw_clock_toolbar(
ctx: &mut dyn RenderContext,
rect: Rect,
view: &ClockView<'_>,
settings: &ClockSettings,
) {
let theme = settings.theme.as_ref();
let style = settings.style.as_ref();
if view.hovered {
let inset = style.hover_bg_vertical_inset();
ctx.set_fill_color(theme.clock_bg_hover());
ctx.fill_rounded_rect(
rect.x,
rect.y + inset,
rect.width,
rect.height - inset * 2.0,
style.hover_bg_radius(),
);
}
ctx.set_font(style.font());
ctx.set_fill_color(theme.clock_text());
ctx.set_text_align(TextAlign::Right);
ctx.set_text_baseline(TextBaseline::Middle);
ctx.fill_text(
view.time_text,
rect.right() - style.text_padding_right(),
rect.center_y(),
);
}