From bf8883934d8659f413ecd91995cc83252955b307 Mon Sep 17 00:00:00 2001 From: GarandPLG Date: Wed, 1 Apr 2026 19:57:44 +0200 Subject: [PATCH] Add zoom level helper and use it for cell sizing Introduce a new `zoom_level` module containing the `CellSizes` enum and `cell_size_helper` function to map `ZoomLevel` values to width and height dimensions. Export the helper from `mod.rs` and refactor `BoardWidget` to import and use `cell_size_helper`, eliminating duplicated match statements. --- src/app/helpers/mod.rs | 2 ++ src/app/helpers/zoom_level.rs | 17 +++++++++++++++++ src/app/widgets/board.rs | 16 ++++------------ 3 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 src/app/helpers/zoom_level.rs diff --git a/src/app/helpers/mod.rs b/src/app/helpers/mod.rs index 5ccb37f..a71b4fc 100644 --- a/src/app/helpers/mod.rs +++ b/src/app/helpers/mod.rs @@ -1,3 +1,5 @@ pub mod block_title; +pub mod zoom_level; pub use block_title::{block_single_title_helper, block_title_helper}; +pub use zoom_level::{CellSizes, cell_size_helper}; diff --git a/src/app/helpers/zoom_level.rs b/src/app/helpers/zoom_level.rs new file mode 100644 index 0000000..b848cf7 --- /dev/null +++ b/src/app/helpers/zoom_level.rs @@ -0,0 +1,17 @@ +use crate::app::states::ZoomLevel; + +pub enum CellSizes { + Width, + Height, +} + +pub fn cell_size_helper(cell_size: CellSizes, zoom_level: ZoomLevel) -> u16 { + match (cell_size, zoom_level) { + (CellSizes::Width, ZoomLevel::ZoomedIn) => 13, + (CellSizes::Width, ZoomLevel::Default) => 9, + (CellSizes::Width, ZoomLevel::ZoomedOut) => 5, + (CellSizes::Height, ZoomLevel::ZoomedIn) => 7, + (CellSizes::Height, ZoomLevel::Default) => 5, + (CellSizes::Height, ZoomLevel::ZoomedOut) => 3, + } +} diff --git a/src/app/widgets/board.rs b/src/app/widgets/board.rs index 7376c57..ebfa5c9 100644 --- a/src/app/widgets/board.rs +++ b/src/app/widgets/board.rs @@ -1,6 +1,7 @@ use crate::app::{ App, - states::{FocusedCell, ZoomLevel}, + helpers::{CellSizes, cell_size_helper}, + states::FocusedCell, widgets::CellWidget, }; use ratatui::{ @@ -32,17 +33,8 @@ impl<'a> BoardWidget<'a> { } pub fn new(app: &'a mut App, area_width: u16, area_height: u16) -> Self { - let cell_height: u16 = match app.states.skirmish.zoom_level { - ZoomLevel::ZoomedIn => 7, - ZoomLevel::Default => 5, - ZoomLevel::ZoomedOut => 3, - }; - - let cell_width: u16 = match app.states.skirmish.zoom_level { - ZoomLevel::ZoomedIn => 13, - ZoomLevel::Default => 9, - ZoomLevel::ZoomedOut => 5, - }; + let cell_height: u16 = cell_size_helper(CellSizes::Height, app.states.skirmish.zoom_level); + let cell_width: u16 = cell_size_helper(CellSizes::Width, app.states.skirmish.zoom_level); let rows: u16 = area_height / cell_height; let cols: u16 = area_width / cell_width;