Skip to content

Commit

Permalink
more links
Browse files Browse the repository at this point in the history
partial implementation of links between the pen choice and the settings button (only in that direction, the reverse still segfaults)
  • Loading branch information
Doublonmousse committed Jun 19, 2024
1 parent 51a51ba commit 00a099f
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 25 deletions.
39 changes: 27 additions & 12 deletions crates/rnote-engine/src/pens/penmode.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::CloneConfig;
use std::cell::RefCell;

// Imports
use super::PenStyle;
Expand Down Expand Up @@ -30,9 +31,9 @@ pub struct PenModeState {

//lock styles
#[serde(rename = "lock_pen")]
penmode_pen_lock: bool,
penmode_pen_lock: RefCell<bool>,
#[serde(rename = "lock_eraser")]
penmode_eraser_lock: bool,
penmode_eraser_lock: RefCell<bool>,

#[serde(skip)]
penmode_pen_style_override: Option<PenStyle>,
Expand All @@ -47,8 +48,8 @@ impl Default for PenModeState {
penmode_pen_style: PenStyle::Brush,
penmode_eraser_style: PenStyle::Eraser,

penmode_pen_lock: false,
penmode_eraser_lock: true,
penmode_pen_lock: RefCell::new(false),
penmode_eraser_lock: RefCell::new(true),

penmode_pen_style_override: None,
penmode_eraser_style_override: None,
Expand All @@ -62,8 +63,8 @@ impl CloneConfig for PenModeState {
pen_mode: self.pen_mode,
penmode_pen_style: self.penmode_pen_style,
penmode_eraser_style: self.penmode_eraser_style,
penmode_pen_lock: self.penmode_pen_lock,
penmode_eraser_lock: self.penmode_eraser_lock,
penmode_pen_lock: self.penmode_pen_lock.clone(),
penmode_eraser_lock: self.penmode_eraser_lock.clone(),
..Default::default()
}
}
Expand All @@ -72,22 +73,22 @@ impl CloneConfig for PenModeState {
impl PenModeState {
pub fn get_lock(&self) -> bool {
match self.pen_mode {
PenMode::Pen => self.penmode_pen_lock,
PenMode::Eraser => self.penmode_eraser_lock,
PenMode::Pen => *self.penmode_pen_lock.borrow(),
PenMode::Eraser => *self.penmode_eraser_lock.borrow(),
}
}

pub fn unlock_pen(&mut self, pen_mode: PenMode) {
match pen_mode {
PenMode::Pen => self.penmode_pen_lock = false,
PenMode::Eraser => self.penmode_eraser_lock = false,
PenMode::Pen => *self.penmode_pen_lock.borrow_mut() = false,
PenMode::Eraser => *self.penmode_eraser_lock.borrow_mut() = false,
}
}

pub fn set_lock(&mut self, pen_mode: PenMode, state: bool) {
match pen_mode {
PenMode::Pen => self.penmode_pen_lock = state,
PenMode::Eraser => self.penmode_eraser_lock = state,
PenMode::Pen => *self.penmode_pen_lock.borrow_mut() = state,
PenMode::Eraser => *self.penmode_eraser_lock.borrow_mut() = state,
}
}

Expand All @@ -114,6 +115,20 @@ impl PenModeState {
}
}

pub fn get_style(&self, penmode: PenMode) -> PenStyle {
match penmode {
PenMode::Pen => self.penmode_pen_style,
PenMode::Eraser => self.penmode_eraser_style,
}
}

pub fn set_style_single_mode(&mut self, mode: PenMode, style: PenStyle) {
match mode {
PenMode::Pen => self.penmode_pen_style = style,
PenMode::Eraser => self.penmode_eraser_style = style,
}
}

pub fn set_style(&mut self, style: PenStyle) {
match self.pen_mode {
PenMode::Pen => self.penmode_pen_style = style,
Expand Down
38 changes: 38 additions & 0 deletions crates/rnote-ui/src/settingspanel/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ impl RnSettingsPanel {
self.refresh_format_ui(active_tab);
self.refresh_doc_ui(active_tab);
self.refresh_shortcuts_ui(active_tab);
self.refresh_locks_ui(active_tab);
}

fn refresh_general_ui(&self, active_tab: &RnCanvasWrapper) {
Expand Down Expand Up @@ -468,6 +469,27 @@ impl RnSettingsPanel {
});
}

fn refresh_locks_ui(&self, active_tab: &RnCanvasWrapper) {
let imp = self.imp();
let canvas = active_tab.canvas();

imp.lock_pen_mode.set_action(
canvas
.engine_ref()
.penholder
.pen_mode_state()
.get_style(PenMode::Pen),
);

imp.lock_eraser_mode.set_action(
canvas
.engine_ref()
.penholder
.pen_mode_state()
.get_style(PenMode::Eraser),
);
}

pub(crate) fn init(&self, appwindow: &RnAppWindow) {
self.setup_general(appwindow);
self.setup_format(appwindow);
Expand Down Expand Up @@ -883,6 +905,22 @@ impl RnSettingsPanel {
appwindow.active_tab_wrapper().canvas().engine_mut().penholder.register_shortcut(ShortcutKey::DrawingPadButton3, action);
None
}));

let lock_pen = imp.lock_pen_mode.get();
let lock_eraser = imp.lock_eraser_mode.get();

imp.lock_pen_mode.connect_local("action-changed",false, clone!(@weak lock_pen, @weak appwindow => @default-return None, move |_values| {
let action = lock_pen.action();
// BorrowMut with this ...
appwindow.active_tab_wrapper().canvas().engine_mut().penholder.pen_mode_state_mut().set_style_single_mode(PenMode::Pen, action);
None
}));

imp.lock_eraser_mode.connect_local("action-changed",false, clone!(@weak lock_pen, @weak appwindow => @default-return None, move |_values| {
let action = lock_eraser.action();
appwindow.active_tab_wrapper().canvas().engine_mut().penholder.pen_mode_state_mut().set_style_single_mode(PenMode::Eraser, action);
None
}));
}

fn revert_format(&self, appwindow: &RnAppWindow) {
Expand Down
21 changes: 8 additions & 13 deletions crates/rnote-ui/src/settingspanel/penmoderow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ use adw::{prelude::*, subclass::prelude::*};
use gtk4::{glib, glib::clone, glib::subclass::*, CompositeTemplate};
use num_traits::ToPrimitive;
use once_cell::sync::Lazy;
use rnote_engine::pens::shortcuts::ShortcutAction;
use rnote_engine::pens::shortcuts::ShortcutMode;
use rnote_engine::pens::PenStyle;
use std::cell::RefCell;

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

#[template_child]
Expand All @@ -27,10 +25,7 @@ mod imp {
impl Default for RnPenModeRow {
fn default() -> Self {
Self {
action: RefCell::new(ShortcutAction::ChangePenStyle {
style: PenStyle::Eraser,
mode: ShortcutMode::Temporary,
}),
action: RefCell::new(PenStyle::Eraser),
changepenstyle_model: ChangePenStyleListModel::default(),

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

match &mut *row.imp().action.borrow_mut() {
ShortcutAction::ChangePenStyle { style, .. } => {
*style = new_pen_style;
current_style => {
*current_style = new_pen_style;
}
}

row.emit_by_name::<()>("action-changed", &[]);
});

Expand Down Expand Up @@ -121,12 +117,12 @@ impl RnPenModeRow {
}

#[allow(unused)]
pub(crate) fn action(&self) -> ShortcutAction {
pub(crate) fn action(&self) -> PenStyle {
*self.imp().action.borrow()
}

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

fn update_ui(&self) {
match self.action() {
// either need a new action or something else
ShortcutAction::ChangePenStyle { style, mode: _mode } => {
style => {
self.set_pen_style(style);
}
}
Expand Down

0 comments on commit 00a099f

Please sign in to comment.