From ef0d2583386d8f8c8194548d96df03f6f8444d30 Mon Sep 17 00:00:00 2001 From: madonuko Date: Mon, 17 Feb 2025 10:43:00 +0800 Subject: [PATCH 01/15] feat: shortcuts for color setters Add 1, 2, ..., 9 as the shortcuts for the color pickers (at the top of the window). --- crates/rnote-ui/src/appwindow/actions.rs | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 709947fbe0..a7e4d7e889 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -164,6 +164,28 @@ impl RnAppWindow { let action_active_tab_close = gio::SimpleAction::new("active-tab-close", None); self.add_action(&action_active_tab_close); + let color_setters = { + let p = self.overlays().colorpicker(); + [ + p.setter_1(), + p.setter_2(), + p.setter_3(), + p.setter_4(), + p.setter_5(), + p.setter_6(), + p.setter_7(), + p.setter_8(), + p.setter_9(), + ] + }; + for (i, setter) in color_setters.into_iter().enumerate() { + let action = gio::SimpleAction::new(&format!("set-color-{}", i + 1), None); + self.add_action(&action); + action.connect_activate(clone!(move |_, _| { + setter.set_active(true); + })); + } + let action_drawing_pad_pressed_button_0 = gio::SimpleAction::new("drawing-pad-pressed-button-0", None); self.add_action(&action_drawing_pad_pressed_button_0); @@ -1171,6 +1193,15 @@ impl RnAppWindow { app.set_accels_for_action("win.pen-style::eraser", &["4", "KP_4"]); app.set_accels_for_action("win.pen-style::selector", &["5", "KP_5"]); app.set_accels_for_action("win.pen-style::tools", &["6", "KP_6"]); + app.set_accels_for_action("win.set-color-1", &["1", "KP_1"]); + app.set_accels_for_action("win.set-color-2", &["2", "KP_2"]); + app.set_accels_for_action("win.set-color-3", &["3", "KP_3"]); + app.set_accels_for_action("win.set-color-4", &["4", "KP_4"]); + app.set_accels_for_action("win.set-color-5", &["5", "KP_5"]); + app.set_accels_for_action("win.set-color-6", &["6", "KP_6"]); + app.set_accels_for_action("win.set-color-7", &["7", "KP_7"]); + app.set_accels_for_action("win.set-color-8", &["8", "KP_8"]); + app.set_accels_for_action("win.set-color-9", &["9", "KP_9"]); // shortcuts for devel build if config::PROFILE.to_lowercase().as_str() == "devel" { From 7b060af1e659976b1db5fb57b90671d5756a89ad Mon Sep 17 00:00:00 2001 From: madonuko Date: Mon, 17 Feb 2025 10:46:11 +0800 Subject: [PATCH 02/15] fix: change set-color-* shortcuts to 1, 2, ... instead Turns out that was a really bad idea and you wouldn't be able to type numbers in textboxes. --- crates/rnote-ui/src/appwindow/actions.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index a7e4d7e889..3b02304f44 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -1193,15 +1193,15 @@ impl RnAppWindow { app.set_accels_for_action("win.pen-style::eraser", &["4", "KP_4"]); app.set_accels_for_action("win.pen-style::selector", &["5", "KP_5"]); app.set_accels_for_action("win.pen-style::tools", &["6", "KP_6"]); - app.set_accels_for_action("win.set-color-1", &["1", "KP_1"]); - app.set_accels_for_action("win.set-color-2", &["2", "KP_2"]); - app.set_accels_for_action("win.set-color-3", &["3", "KP_3"]); - app.set_accels_for_action("win.set-color-4", &["4", "KP_4"]); - app.set_accels_for_action("win.set-color-5", &["5", "KP_5"]); - app.set_accels_for_action("win.set-color-6", &["6", "KP_6"]); - app.set_accels_for_action("win.set-color-7", &["7", "KP_7"]); - app.set_accels_for_action("win.set-color-8", &["8", "KP_8"]); - app.set_accels_for_action("win.set-color-9", &["9", "KP_9"]); + app.set_accels_for_action("win.set-color-1", &["1", "KP_1"]); + app.set_accels_for_action("win.set-color-2", &["2", "KP_2"]); + app.set_accels_for_action("win.set-color-3", &["3", "KP_3"]); + app.set_accels_for_action("win.set-color-4", &["4", "KP_4"]); + app.set_accels_for_action("win.set-color-5", &["5", "KP_5"]); + app.set_accels_for_action("win.set-color-6", &["6", "KP_6"]); + app.set_accels_for_action("win.set-color-7", &["7", "KP_7"]); + app.set_accels_for_action("win.set-color-8", &["8", "KP_8"]); + app.set_accels_for_action("win.set-color-9", &["9", "KP_9"]); // shortcuts for devel build if config::PROFILE.to_lowercase().as_str() == "devel" { From 715383ca92b683299634b62e46f7050309587d0e Mon Sep 17 00:00:00 2001 From: madonuko Date: Mon, 17 Feb 2025 13:26:07 +0800 Subject: [PATCH 03/15] refactor --- crates/rnote-ui/src/appwindow/actions.rs | 32 ++++++++---------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 3b02304f44..fdd487d9ed 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -167,23 +167,16 @@ impl RnAppWindow { let color_setters = { let p = self.overlays().colorpicker(); [ - p.setter_1(), - p.setter_2(), - p.setter_3(), - p.setter_4(), - p.setter_5(), - p.setter_6(), - p.setter_7(), - p.setter_8(), - p.setter_9(), + [p.setter_1(), p.setter_2(), p.setter_3()], + [p.setter_4(), p.setter_5(), p.setter_6()], + [p.setter_7(), p.setter_8(), p.setter_9()], ] + .concat() }; for (i, setter) in color_setters.into_iter().enumerate() { let action = gio::SimpleAction::new(&format!("set-color-{}", i + 1), None); self.add_action(&action); - action.connect_activate(clone!(move |_, _| { - setter.set_active(true); - })); + action.connect_activate(move |_, _| setter.set_active(true)); } let action_drawing_pad_pressed_button_0 = @@ -1193,15 +1186,12 @@ impl RnAppWindow { app.set_accels_for_action("win.pen-style::eraser", &["4", "KP_4"]); app.set_accels_for_action("win.pen-style::selector", &["5", "KP_5"]); app.set_accels_for_action("win.pen-style::tools", &["6", "KP_6"]); - app.set_accels_for_action("win.set-color-1", &["1", "KP_1"]); - app.set_accels_for_action("win.set-color-2", &["2", "KP_2"]); - app.set_accels_for_action("win.set-color-3", &["3", "KP_3"]); - app.set_accels_for_action("win.set-color-4", &["4", "KP_4"]); - app.set_accels_for_action("win.set-color-5", &["5", "KP_5"]); - app.set_accels_for_action("win.set-color-6", &["6", "KP_6"]); - app.set_accels_for_action("win.set-color-7", &["7", "KP_7"]); - app.set_accels_for_action("win.set-color-8", &["8", "KP_8"]); - app.set_accels_for_action("win.set-color-9", &["9", "KP_9"]); + (1..=9).for_each(|i| { + app.set_accels_for_action( + &format!("win.set-color-{i}"), + &[&format!("{i}"), &format!("KP_{i}")], + ) + }); // shortcuts for devel build if config::PROFILE.to_lowercase().as_str() == "devel" { From 1929b3dd2b51c7dbcf4e0a7d6a63e124a33734d5 Mon Sep 17 00:00:00 2001 From: madonuko Date: Sun, 16 Mar 2025 17:23:50 +0800 Subject: [PATCH 04/15] fix: change set-color-* to 1, ... instead --- crates/rnote-ui/src/appwindow/actions.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index fdd487d9ed..a26d4e0a61 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -1189,7 +1189,7 @@ impl RnAppWindow { (1..=9).for_each(|i| { app.set_accels_for_action( &format!("win.set-color-{i}"), - &[&format!("{i}"), &format!("KP_{i}")], + &[&format!("{i}"), &format!("KP_{i}")], ) }); From 75bd67a36d19bac99cc0181aed01d83fc25650c1 Mon Sep 17 00:00:00 2001 From: madomado Date: Mon, 17 Mar 2025 09:42:28 +0800 Subject: [PATCH 05/15] fix: keypad shortcuts for color setters Co-authored-by: Moritz Mechelk --- crates/rnote-ui/src/appwindow/actions.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index a26d4e0a61..973c5b237a 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -1189,7 +1189,7 @@ impl RnAppWindow { (1..=9).for_each(|i| { app.set_accels_for_action( &format!("win.set-color-{i}"), - &[&format!("{i}"), &format!("KP_{i}")], + &[&format!("{i}"), &format!("KP_{i}")], ) }); From 0d132effd9ff2ab64b910697900522b5381a0246 Mon Sep 17 00:00:00 2001 From: madonuko Date: Tue, 18 Mar 2025 00:23:47 +0800 Subject: [PATCH 06/15] chore: cargo fmt --- crates/rnote-ui/src/appwindow/actions.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 973c5b237a..875dc2ae74 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -1189,7 +1189,10 @@ impl RnAppWindow { (1..=9).for_each(|i| { app.set_accels_for_action( &format!("win.set-color-{i}"), - &[&format!("{i}"), &format!("KP_{i}")], + &[ + &format!("{i}"), + &format!("KP_{i}"), + ], ) }); From e2929edcea4a6fdabbfedfab952c4d05b78b5303 Mon Sep 17 00:00:00 2001 From: madonuko Date: Mon, 7 Apr 2025 01:53:30 +0800 Subject: [PATCH 07/15] =?UTF-8?q?feat:=20use=201~9=20instead=20=E2=87=92?= =?UTF-8?q?=20handle=20Typewriter=20inputs=20correctly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/rnote-engine/src/engine/mod.rs | 8 +++++++ crates/rnote-ui/src/appwindow/actions.rs | 27 +++++++++++++++++++----- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/crates/rnote-engine/src/engine/mod.rs b/crates/rnote-engine/src/engine/mod.rs index 02a57bd831..32b396656b 100644 --- a/crates/rnote-engine/src/engine/mod.rs +++ b/crates/rnote-engine/src/engine/mod.rs @@ -946,4 +946,12 @@ impl Engine { self.penholder .handle_animation_frame(&mut engine_view_mut!(self), optimize_epd); } + + pub fn text_insert(&mut self, text: String, pos: Option>) -> WidgetFlags { + let mut widget_flags = WidgetFlags::default(); + if let Pen::Typewriter(typewriter) = self.penholder.current_pen_mut() { + widget_flags |= typewriter.insert_text(text, pos, &mut engine_view_mut!(self)); + } + widget_flags + } } diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 875dc2ae74..aae91203d6 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -176,7 +176,27 @@ impl RnAppWindow { for (i, setter) in color_setters.into_iter().enumerate() { let action = gio::SimpleAction::new(&format!("set-color-{}", i + 1), None); self.add_action(&action); - action.connect_activate(move |_, _| setter.set_active(true)); + action.connect_activate(clone!( + #[weak(rename_to=appwindow)] + self, + move |_, _| { + let Some(canvas) = appwindow.active_tab_canvas() else { + return; + }; + let en = canvas.engine_ref(); + let condition = en.penholder.current_pen_style() != PenStyle::Typewriter + || en.penholder.current_pen_progress() + != rnote_compose::penevent::PenProgress::InProgress; + drop(en); + if condition { + setter.set_active(true); + } else { + let widget_flags = + canvas.engine_mut().text_insert(format!("{}", i + 1), None); + appwindow.handle_widget_flags(widget_flags, &canvas); + } + } + )); } let action_drawing_pad_pressed_button_0 = @@ -1189,10 +1209,7 @@ impl RnAppWindow { (1..=9).for_each(|i| { app.set_accels_for_action( &format!("win.set-color-{i}"), - &[ - &format!("{i}"), - &format!("KP_{i}"), - ], + &[&format!("{i}"), &format!("KP_{i}")], ) }); From f4c802db5ca202cfcab9744bba28b73954d7a7f2 Mon Sep 17 00:00:00 2001 From: madonuko Date: Mon, 7 Apr 2025 16:33:56 +0800 Subject: [PATCH 08/15] fix: handle number inputs for `Editable`s --- crates/rnote-ui/src/appwindow/actions.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index aae91203d6..381e4c58f4 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -180,6 +180,14 @@ impl RnAppWindow { #[weak(rename_to=appwindow)] self, move |_, _| { + if let Some(widget) = GtkWindowExt::focus(&appwindow) + .and_then(|w| w.dynamic_cast::().ok()) + { + let mut p = widget.position(); + widget.insert_text(&format!("{}", i + 1), &mut p); + widget.set_position(p); + return; + } let Some(canvas) = appwindow.active_tab_canvas() else { return; }; From be0866589d251297d915adf5f7db3889f7ebadcd Mon Sep 17 00:00:00 2001 From: madonuko Date: Wed, 21 May 2025 19:45:28 +0800 Subject: [PATCH 09/15] fix: try to make things compile --- crates/rnote-ui/src/appwindow/actions.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index a4d1c32d49..f959982822 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -151,7 +151,8 @@ impl RnAppWindow { return; }; let en = canvas.engine_ref(); - let condition = en.penholder.current_pen_style() != PenStyle::Typewriter + let condition = en.penholder.current_pen_style(&engine_view!(en)) + != PenStyle::Typewriter || en.penholder.current_pen_progress() != rnote_compose::penevent::PenProgress::InProgress; drop(en); From ace3365fce44f16f55b03989f23a7829959f63e5 Mon Sep 17 00:00:00 2001 From: madonuko Date: Wed, 21 May 2025 23:20:30 +0800 Subject: [PATCH 10/15] fix: make things compile part 2 --- crates/rnote-ui/src/appwindow/actions.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index f959982822..3c8591bd2a 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -151,8 +151,8 @@ impl RnAppWindow { return; }; let en = canvas.engine_ref(); - let condition = en.penholder.current_pen_style(&engine_view!(en)) - != PenStyle::Typewriter + let condition = en.penholder.current_pen_style(&rnote_engine::engine_view!(en)) + != rnote_engine::pens::PenStyle::Typewriter || en.penholder.current_pen_progress() != rnote_compose::penevent::PenProgress::InProgress; drop(en); From 5119857acd0c72cd96e37d20ba74bea57dd5e7c4 Mon Sep 17 00:00:00 2001 From: madonuko Date: Wed, 21 May 2025 23:27:08 +0800 Subject: [PATCH 11/15] fix: cargo fmt --- crates/rnote-ui/src/appwindow/actions.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 3c8591bd2a..336a48e8ba 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -151,7 +151,9 @@ impl RnAppWindow { return; }; let en = canvas.engine_ref(); - let condition = en.penholder.current_pen_style(&rnote_engine::engine_view!(en)) + let condition = en + .penholder + .current_pen_style(&rnote_engine::engine_view!(en)) != rnote_engine::pens::PenStyle::Typewriter || en.penholder.current_pen_progress() != rnote_compose::penevent::PenProgress::InProgress; From 0ec415bdb8e4d4b986a6ea379193b4615129e4e7 Mon Sep 17 00:00:00 2001 From: madonuko Date: Wed, 21 May 2025 23:43:32 +0800 Subject: [PATCH 12/15] fix: move code requiring `engine_view!` into `rnote-engine` --- crates/rnote-engine/src/engine/mod.rs | 6 ++++++ crates/rnote-ui/src/appwindow/actions.rs | 14 +++----------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/crates/rnote-engine/src/engine/mod.rs b/crates/rnote-engine/src/engine/mod.rs index e5c0772d74..ed2ec4f4ea 100644 --- a/crates/rnote-engine/src/engine/mod.rs +++ b/crates/rnote-engine/src/engine/mod.rs @@ -909,6 +909,12 @@ impl Engine { widget_flags } + pub fn is_typewriter_in_progress(&self) -> bool { + self.penholder.current_pen_style(&engine_view!(self)) == pens::PenStyle::Typewriter + && self.penholder.current_pen_progress() + == rnote_compose::penevent::PenProgress::InProgress + } + pub fn current_pen_style_w_override(&self) -> PenStyle { self.penholder .current_pen_style_w_override(&engine_view!(self)) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 336a48e8ba..b0d879c867 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -150,20 +150,12 @@ impl RnAppWindow { let Some(canvas) = appwindow.active_tab_canvas() else { return; }; - let en = canvas.engine_ref(); - let condition = en - .penholder - .current_pen_style(&rnote_engine::engine_view!(en)) - != rnote_engine::pens::PenStyle::Typewriter - || en.penholder.current_pen_progress() - != rnote_compose::penevent::PenProgress::InProgress; - drop(en); - if condition { - setter.set_active(true); - } else { + if canvas.engine_ref().is_typewriter_in_progress() { let widget_flags = canvas.engine_mut().text_insert(format!("{}", i + 1), None); appwindow.handle_widget_flags(widget_flags, &canvas); + } else { + setter.set_active(true); } } )); From b8e0ef7c853b27e37086258a50888f1ebf276371 Mon Sep 17 00:00:00 2001 From: madonuko Date: Wed, 21 May 2025 23:48:46 +0800 Subject: [PATCH 13/15] fix: refer to `PenStyle` correctly --- crates/rnote-engine/src/engine/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rnote-engine/src/engine/mod.rs b/crates/rnote-engine/src/engine/mod.rs index ed2ec4f4ea..a37d771587 100644 --- a/crates/rnote-engine/src/engine/mod.rs +++ b/crates/rnote-engine/src/engine/mod.rs @@ -910,7 +910,7 @@ impl Engine { } pub fn is_typewriter_in_progress(&self) -> bool { - self.penholder.current_pen_style(&engine_view!(self)) == pens::PenStyle::Typewriter + self.penholder.current_pen_style(&engine_view!(self)) == crate::pens::PenStyle::Typewriter && self.penholder.current_pen_progress() == rnote_compose::penevent::PenProgress::InProgress } From 326bfd9f748c10b67cdf0303d75ffaadb01a7537 Mon Sep 17 00:00:00 2001 From: madomado Date: Thu, 22 May 2025 00:39:03 +0800 Subject: [PATCH 14/15] feat(shortcuts.ui): color selection entry --- crates/rnote-ui/data/ui/shortcuts.ui | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/rnote-ui/data/ui/shortcuts.ui b/crates/rnote-ui/data/ui/shortcuts.ui index 2b7e2ac840..6a882d5033 100644 --- a/crates/rnote-ui/data/ui/shortcuts.ui +++ b/crates/rnote-ui/data/ui/shortcuts.ui @@ -104,6 +104,12 @@ <ctrl>6 + + + Color Selection + 1 2 3 4 5 6 7 8 9 + + From 4b1cdad82dc5466dc8d6c2c2052d220875f62ac7 Mon Sep 17 00:00:00 2001 From: madonuko Date: Sun, 14 Sep 2025 15:32:05 +0800 Subject: [PATCH 15/15] fix: delete selection in editable when input numbers --- crates/rnote-ui/src/appwindow/actions.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/rnote-ui/src/appwindow/actions.rs b/crates/rnote-ui/src/appwindow/actions.rs index 315dbee10b..c3dad4177a 100644 --- a/crates/rnote-ui/src/appwindow/actions.rs +++ b/crates/rnote-ui/src/appwindow/actions.rs @@ -144,6 +144,7 @@ impl RnAppWindow { if let Some(widget) = GtkWindowExt::focus(&appwindow) .and_then(|w| w.dynamic_cast::().ok()) { + widget.delete_selection(); let mut p = widget.position(); widget.insert_text(&format!("{}", i + 1), &mut p); widget.set_position(p);