From c702ffcfab3074afd734bdafd3ad4fcaa23bfced Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Tue, 9 Apr 2024 17:46:06 -0400 Subject: [PATCH] Make the review tree scrollable --- otg/core/src/view_models/game_review.rs | 4 ++++ otg/gtk/src/components/review_tree.rs | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/otg/core/src/view_models/game_review.rs b/otg/core/src/view_models/game_review.rs index 2b164b6..1b9c22b 100644 --- a/otg/core/src/view_models/game_review.rs +++ b/otg/core/src/view_models/game_review.rs @@ -77,6 +77,10 @@ impl GameReviewViewModel { } } + pub fn tree_max_depth(&self) -> usize { + self.imp.read().unwrap().review_tree.max_depth() + } + pub fn move_forward(&self) { unimplemented!() } diff --git a/otg/gtk/src/components/review_tree.rs b/otg/gtk/src/components/review_tree.rs index 9f3b13e..c541e0b 100644 --- a/otg/gtk/src/components/review_tree.rs +++ b/otg/gtk/src/components/review_tree.rs @@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License along with On */ use cairo::Context; -use glib::Object; -use gtk::{prelude::*, subclass::prelude::*}; +use gtk::prelude::*; use otg_core::GameReviewViewModel; const WIDTH: i32 = 200; @@ -24,21 +23,27 @@ const HEIGHT: i32 = 800; #[derive(Clone)] pub struct ReviewTree { - widget: gtk::DrawingArea, + widget: gtk::ScrolledWindow, + drawing_area: gtk::DrawingArea, view: GameReviewViewModel, } impl ReviewTree { pub fn new(view: GameReviewViewModel) -> ReviewTree { - let widget = gtk::DrawingArea::new(); + let drawing_area = gtk::DrawingArea::new(); + let widget = gtk::ScrolledWindow::builder() + .child(&drawing_area) + .build(); widget.set_width_request(WIDTH); widget.set_height_request(HEIGHT); - let s = Self { widget, view }; + drawing_area.set_height_request(view.tree_max_depth() as i32 * 20 + 40); - s.widget.set_draw_func({ + let s = Self { widget, drawing_area, view }; + + s.drawing_area.set_draw_func({ let s = s.clone(); move |_, ctx, width, height| { s.redraw(ctx, width, height); @@ -49,6 +54,7 @@ impl ReviewTree { } fn redraw(&self, ctx: &Context, _width: i32, _height: i32) { + println!("redraw: {} {}", _width, _height); self.view.map_tree(move |tree, node, current| { ctx.set_source_rgb(0.7, 0.7, 0.7); let (row, column) = tree.position(node.id);