Skip to content

Commit 516e397

Browse files
committed
more flexible GridAlignMode
1 parent 0f56d0d commit 516e397

File tree

2 files changed

+61
-12
lines changed

2 files changed

+61
-12
lines changed

crates/notation_bevy/src/settings/layout_settings.rs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,25 +27,39 @@ impl Default for LayoutMode {
2727
}
2828
}
2929

30+
#[derive(Copy, Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
31+
#[cfg_attr(feature = "inspector", derive(Inspectable))]
32+
pub enum GridAlignMode {
33+
Center,
34+
ForceCenter,
35+
Top,
36+
ForceTop,
37+
}
38+
impl Default for GridAlignMode {
39+
fn default() -> Self {
40+
Self::Center
41+
}
42+
}
43+
3044
#[derive(Clone, Serialize, Deserialize, Debug)]
3145
#[cfg_attr(feature = "inspector", derive(Inspectable))]
3246
pub struct LayoutSettings {
3347
pub mode: LayoutMode,
48+
pub grid_align_mode: GridAlignMode,
3449
pub focus_bar_ease_ms: u64,
3550
pub focusing_bar_ordinal: usize,
3651
pub video_recording_mode: bool,
37-
pub grid_force_centered: bool,
3852
pub override_focus_offset_y: Option<f32>,
3953
}
4054

4155
impl Default for LayoutSettings {
4256
fn default() -> Self {
4357
Self {
4458
mode: LayoutMode::default(),
59+
grid_align_mode: GridAlignMode::default(),
4560
focus_bar_ease_ms: 250,
4661
focusing_bar_ordinal: usize::MAX,
4762
video_recording_mode: false,
48-
grid_force_centered: false,
4963
override_focus_offset_y: None,
5064
}
5165
}
@@ -154,7 +168,7 @@ impl LayoutSettings {
154168
let mut y = pos_data.bar_layout.offset.y;
155169
let grid_size = layout.size;
156170
let content_size = grid_data.content_size;
157-
if self.video_recording_mode {
171+
if self.video_recording_mode || self.grid_align_mode == GridAlignMode::ForceTop {
158172
y += self.override_focus_offset_y.unwrap_or(0.0);
159173
} else {
160174
if grid_size.height > content_size.height {
@@ -166,9 +180,12 @@ impl LayoutSettings {
166180
y = grid_data.calc_cell_offset(row - 1, col).y;
167181
}
168182
*/
169-
y += (grid_size.height - grid_data.margin.height * 2.0 - pos_data.bar_layout.size.height) / 2.0 + self.override_focus_offset_y.unwrap_or(0.0);
170-
171-
if !self.grid_force_centered {
183+
if self.grid_align_mode == GridAlignMode::Center
184+
|| self.grid_align_mode == GridAlignMode::ForceCenter {
185+
y += (grid_size.height - grid_data.margin.height * 2.0 - pos_data.bar_layout.size.height) / 2.0 + self.override_focus_offset_y.unwrap_or(0.0);
186+
}
187+
if self.grid_align_mode != GridAlignMode::ForceCenter
188+
&& self.grid_align_mode != GridAlignMode::ForceTop {
172189
let min_y = grid_size.height - content_size.height - theme.sizes.layout.page_margin * 2.0;
173190
if y < min_y {
174191
y = min_y;

crates/notation_bevy/src/viewer/control_view.rs

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use float_eq::float_ne;
1111
use notation_midi::prelude::{MidiState, PlayControlEvent, MidiSettings, JumpToBarEvent};
1212
use notation_model::prelude::{Tab, Octave};
1313

14-
use crate::settings::layout_settings::LayoutMode;
14+
use crate::settings::layout_settings::{LayoutMode, GridAlignMode};
1515
use crate::ui::layout::NotationLayout;
1616
use crate::viewer::control::Control;
1717

@@ -384,11 +384,43 @@ impl ControlView {
384384
Control::toggle_layout_mode(state, settings, theme);
385385
}
386386
if !settings.layout.video_recording_mode && settings.layout.mode == LayoutMode::Grid {
387-
let last_force_centered = settings.layout.grid_force_centered;
388-
ui.checkbox(&mut settings.layout.grid_force_centered, "Force Centered");
389-
if settings.layout.grid_force_centered != last_force_centered {
390-
Control::reload_tab(state, theme);
391-
}
387+
ui.label("Switch Align Mode");
388+
ui.horizontal(|ui| {
389+
if settings.layout.grid_align_mode != GridAlignMode::Top {
390+
if ui.button("Top").clicked() {
391+
settings.layout.grid_align_mode = GridAlignMode::Top;
392+
Control::reload_tab(state, theme);
393+
}
394+
} else {
395+
ui.label("Top");
396+
}
397+
if settings.layout.grid_align_mode != GridAlignMode::ForceTop {
398+
if ui.button("Force Top").clicked() {
399+
settings.layout.grid_align_mode = GridAlignMode::ForceTop;
400+
Control::reload_tab(state, theme);
401+
}
402+
} else {
403+
ui.label("Force Top");
404+
}
405+
});
406+
ui.horizontal(|ui| {
407+
if settings.layout.grid_align_mode != GridAlignMode::Center {
408+
if ui.button("Center").clicked() {
409+
settings.layout.grid_align_mode = GridAlignMode::Center;
410+
Control::reload_tab(state, theme);
411+
}
412+
} else {
413+
ui.label("Center");
414+
}
415+
if settings.layout.grid_align_mode != GridAlignMode::ForceCenter {
416+
if ui.button("Force Center").clicked() {
417+
settings.layout.grid_align_mode = GridAlignMode::ForceCenter;
418+
Control::reload_tab(state, theme);
419+
}
420+
} else {
421+
ui.label("Force Center");
422+
}
423+
});
392424
}
393425
});
394426
}

0 commit comments

Comments
 (0)