74 lines
2.4 KiB
Rust
74 lines
2.4 KiB
Rust
use crate::components::monitor::Widget;
|
|
|
|
pub use super::*;
|
|
mod imp;
|
|
use chrono::{prelude::*, DateTime, Duration, Utc};
|
|
use gtk::glib::{self, clone};
|
|
use gtk::prelude::*;
|
|
use gtk::subclass::prelude::ObjectSubclassIsExt;
|
|
|
|
glib::wrapper! {
|
|
pub struct WidgetFrame(ObjectSubclass<imp::WidgetFrame>)
|
|
@extends gtk::Widget;
|
|
}
|
|
|
|
impl Default for WidgetFrame {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|
|
|
|
impl WidgetFrame {
|
|
pub fn new() -> Self {
|
|
let this: Self = glib::Object::new();
|
|
let frame = gtk::Frame::new(None);
|
|
frame.set_hexpand(true);
|
|
frame.set_vexpand(true);
|
|
let drawing_area = gtk::DrawingArea::new();
|
|
let settings = gtk::Settings::default().unwrap();
|
|
let prefers_dark_theme = settings.is_gtk_application_prefer_dark_theme();
|
|
|
|
frame.set_child(Some(&drawing_area));
|
|
frame.set_parent(&this);
|
|
this.imp().drawing_area.replace(Some(drawing_area));
|
|
|
|
this
|
|
}
|
|
|
|
pub fn set_widget(&self, widget: Box<dyn Widget>) {
|
|
self.imp().widget.replace(Some(widget));
|
|
let drawing_area = self.imp().drawing_area.borrow();
|
|
let drawing_area = drawing_area.as_ref().unwrap();
|
|
let widget = self.imp().widget.clone();
|
|
let widget_ref = widget.borrow();
|
|
let widget_ref = widget_ref.as_ref().unwrap();
|
|
let (w, h) = widget_ref.size();
|
|
let margin = widget_ref.margin();
|
|
let location = widget_ref.location();
|
|
|
|
self.set_halign(location.0);
|
|
self.set_valign(location.1);
|
|
self.set_margin_top(margin[0]);
|
|
self.set_margin_bottom(margin[2]);
|
|
self.set_margin_start(margin[3]);
|
|
self.set_margin_end(margin[1]);
|
|
self.set_width_request(w as i32);
|
|
self.set_height_request(h as i32);
|
|
|
|
let padding = widget_ref.padding();
|
|
|
|
drawing_area.set_margin_top(padding[0]);
|
|
drawing_area.set_margin_bottom(padding[2]);
|
|
drawing_area.set_margin_start(padding[3]);
|
|
drawing_area.set_margin_end(padding[1]);
|
|
drawing_area.set_height_request(h as i32 - padding[0] - padding[2]);
|
|
drawing_area.set_width_request(w as i32 - padding[1] - padding[3]);
|
|
drawing_area.set_draw_func(clone!(@strong widget => move |_, canvas, x, y| {
|
|
let widget = widget.borrow();
|
|
let widget = widget.as_ref().unwrap();
|
|
// widget.cairo_render(canvas,x as f32,y as f32);
|
|
}));
|
|
drawing_area.queue_draw();
|
|
}
|
|
}
|