Skip to content

Commit 19a6f16

Browse files
committed
more links
partial implementation of links between the pen choice and the settings button (only in that direction, the reverse still segfaults)
1 parent 51a51ba commit 19a6f16

File tree

3 files changed

+63
-15
lines changed

3 files changed

+63
-15
lines changed

crates/rnote-engine/src/pens/penmode.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::CloneConfig;
2+
use std::cell::RefCell;
23

34
// Imports
45
use super::PenStyle;
@@ -62,8 +63,8 @@ impl CloneConfig for PenModeState {
6263
pen_mode: self.pen_mode,
6364
penmode_pen_style: self.penmode_pen_style,
6465
penmode_eraser_style: self.penmode_eraser_style,
65-
penmode_pen_lock: self.penmode_pen_lock,
66-
penmode_eraser_lock: self.penmode_eraser_lock,
66+
penmode_pen_lock: self.penmode_pen_lock.clone(),
67+
penmode_eraser_lock: self.penmode_eraser_lock.clone(),
6768
..Default::default()
6869
}
6970
}
@@ -114,6 +115,20 @@ impl PenModeState {
114115
}
115116
}
116117

118+
pub fn get_style(&self, penmode: PenMode) -> PenStyle {
119+
match penmode {
120+
PenMode::Pen => self.penmode_pen_style,
121+
PenMode::Eraser => self.penmode_eraser_style,
122+
}
123+
}
124+
125+
pub fn set_style_single_mode(&mut self, mode: PenMode, style: PenStyle) {
126+
match mode {
127+
PenMode::Pen => self.penmode_pen_style = style,
128+
PenMode::Eraser => self.penmode_eraser_style = style,
129+
}
130+
}
131+
117132
pub fn set_style(&mut self, style: PenStyle) {
118133
match self.pen_mode {
119134
PenMode::Pen => self.penmode_pen_style = style,

crates/rnote-ui/src/settingspanel/mod.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ impl RnSettingsPanel {
374374
self.refresh_format_ui(active_tab);
375375
self.refresh_doc_ui(active_tab);
376376
self.refresh_shortcuts_ui(active_tab);
377+
self.refresh_locks_ui(active_tab);
377378
}
378379

379380
fn refresh_general_ui(&self, active_tab: &RnCanvasWrapper) {
@@ -468,6 +469,27 @@ impl RnSettingsPanel {
468469
});
469470
}
470471

472+
fn refresh_locks_ui(&self, active_tab: &RnCanvasWrapper) {
473+
let imp = self.imp();
474+
let canvas = active_tab.canvas();
475+
476+
imp.lock_pen_mode.set_action(
477+
canvas
478+
.engine_ref()
479+
.penholder
480+
.pen_mode_state()
481+
.get_style(PenMode::Pen),
482+
);
483+
484+
imp.lock_eraser_mode.set_action(
485+
canvas
486+
.engine_ref()
487+
.penholder
488+
.pen_mode_state()
489+
.get_style(PenMode::Eraser),
490+
);
491+
}
492+
471493
pub(crate) fn init(&self, appwindow: &RnAppWindow) {
472494
self.setup_general(appwindow);
473495
self.setup_format(appwindow);
@@ -883,6 +905,22 @@ impl RnSettingsPanel {
883905
appwindow.active_tab_wrapper().canvas().engine_mut().penholder.register_shortcut(ShortcutKey::DrawingPadButton3, action);
884906
None
885907
}));
908+
909+
let lock_pen = imp.lock_pen_mode.get();
910+
let lock_eraser = imp.lock_eraser_mode.get();
911+
912+
imp.lock_pen_mode.connect_local("action-changed",false, clone!(@weak lock_pen, @weak appwindow => @default-return None, move |_values| {
913+
let action = lock_pen.action();
914+
// BorrowMut with this ...
915+
appwindow.active_tab_wrapper().canvas().engine_mut().penholder.pen_mode_state_mut().set_style_single_mode(PenMode::Pen, action);
916+
None
917+
}));
918+
919+
imp.lock_eraser_mode.connect_local("action-changed",false, clone!(@weak lock_pen, @weak appwindow => @default-return None, move |_values| {
920+
let action = lock_eraser.action();
921+
appwindow.active_tab_wrapper().canvas().engine_mut().penholder.pen_mode_state_mut().set_style_single_mode(PenMode::Eraser, action);
922+
None
923+
}));
886924
}
887925

888926
fn revert_format(&self, appwindow: &RnAppWindow) {

crates/rnote-ui/src/settingspanel/penmoderow.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ use adw::{prelude::*, subclass::prelude::*};
66
use gtk4::{glib, glib::clone, glib::subclass::*, CompositeTemplate};
77
use num_traits::ToPrimitive;
88
use once_cell::sync::Lazy;
9-
use rnote_engine::pens::shortcuts::ShortcutAction;
10-
use rnote_engine::pens::shortcuts::ShortcutMode;
119
use rnote_engine::pens::PenStyle;
1210
use std::cell::RefCell;
1311

@@ -17,7 +15,7 @@ mod imp {
1715
#[derive(Debug, CompositeTemplate)]
1816
#[template(resource = "/com/github/flxzt/rnote/ui/penmoderow.ui")]
1917
pub(crate) struct RnPenModeRow {
20-
pub(crate) action: RefCell<ShortcutAction>,
18+
pub(crate) action: RefCell<PenStyle>,
2119
pub(crate) changepenstyle_model: ChangePenStyleListModel,
2220

2321
#[template_child]
@@ -27,10 +25,7 @@ mod imp {
2725
impl Default for RnPenModeRow {
2826
fn default() -> Self {
2927
Self {
30-
action: RefCell::new(ShortcutAction::ChangePenStyle {
31-
style: PenStyle::Eraser,
32-
mode: ShortcutMode::Temporary,
33-
}),
28+
action: RefCell::new(PenStyle::Eraser),
3429
changepenstyle_model: ChangePenStyleListModel::default(),
3530

3631
mode: TemplateChild::default(),
@@ -70,10 +65,11 @@ mod imp {
7065
let new_pen_style = row.pen_style();
7166

7267
match &mut *row.imp().action.borrow_mut() {
73-
ShortcutAction::ChangePenStyle { style, .. } => {
74-
*style = new_pen_style;
68+
current_style => {
69+
*current_style = new_pen_style;
7570
}
7671
}
72+
7773
row.emit_by_name::<()>("action-changed", &[]);
7874
});
7975

@@ -121,12 +117,12 @@ impl RnPenModeRow {
121117
}
122118

123119
#[allow(unused)]
124-
pub(crate) fn action(&self) -> ShortcutAction {
120+
pub(crate) fn action(&self) -> PenStyle {
125121
*self.imp().action.borrow()
126122
}
127123

128124
#[allow(unused)]
129-
pub(crate) fn set_action(&self, action: ShortcutAction) {
125+
pub(crate) fn set_action(&self, action: PenStyle) {
130126
*self.imp().action.borrow_mut() = action;
131127
self.emit_by_name::<()>("action-changed", &[]);
132128
}
@@ -146,8 +142,7 @@ impl RnPenModeRow {
146142

147143
fn update_ui(&self) {
148144
match self.action() {
149-
// either need a new action or something else
150-
ShortcutAction::ChangePenStyle { style, mode: _mode } => {
145+
style => {
151146
self.set_pen_style(style);
152147
}
153148
}

0 commit comments

Comments
 (0)