use gtk::gdk::Display; use gtk::{ gio, glib, style_context_add_provider_for_display, Application, ApplicationWindow, CssProvider, GestureDrag, }; use gtk::{prelude::*, DrawingArea}; // use plotters::prelude::DrawingArea; // mod backend; mod data; mod painter; mod render; mod tree; mod window; use data::{CoordType, Npz, Radar2d}; use painter::wgs84::{LatLonCoord, Mercator, Range}; use painter::Painter; const APP_ID: &str = "org.gtk_rs.HelloWorld2"; fn main() -> glib::ExitCode { // gio::resources_register_include!("window.gresource").expect("Failed to register resources"); // Create a new application let app = Application::builder().application_id(APP_ID).build(); app.connect_startup(|_| load_css()); // Connect to "activate" signal of `app` app.connect_activate(build_ui); // Run the application app.run() } fn build_ui(app: &Application) { // Create a window and set the title // let window = Window::new(app); let window = ApplicationWindow::builder() .application(app) .title("My GTK App") .build(); let drawing_area = DrawingArea::new(); let path = "/Users/ruomu/test2.npz"; let data = Radar2d::::load(path, Npz).unwrap(); let gesture = GestureDrag::new(); // gesture.connect_drag_end(|s, x, y| { // (&drawing_area).queue_draw(); // }); // drawing_area.add_controller(gesture); drawing_area.set_draw_func(move |a, b, c, d| { let projection = Mercator::new(); let aa = Range::from((*data.0.dim1.first().unwrap(), *data.0.dim1.last().unwrap())); let ab = Range::from((*data.0.dim2.first().unwrap(), *data.0.dim2.last().unwrap())); let coord = LatLonCoord::new(Some(aa), Some(ab), ((0, c), (0, d)), projection); let painter: Painter<'_, f64, LatLonCoord> = Painter::new(b, coord, c as u32, c as u32); painter.draw_radar_2d(&data.0); }); window.set_child(Some(&drawing_area)); window.set_default_width(1000); window.set_default_height(800); window.present(); } fn load_css() { // Load the CSS file and add it to the provider let provider = CssProvider::new(); provider.load_from_data(include_str!("css/style.css")); // Add the provider to the default screen style_context_add_provider_for_display( &Display::default().expect("Could not connect to a display."), &provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION, ); }