Skip to content

Commit 01055bc

Browse files
committed
(PR) fix. Stylus button press changes tool to Eraser but do not erase.
saber-notes#1428 Signed-off-by: AnErrupTion <anerruption@disroot.org>
1 parent 716d106 commit 01055bc

File tree

4 files changed

+54
-13
lines changed

4 files changed

+54
-13
lines changed

lib/data/prefs.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,11 @@ class Stows {
199199
false,
200200
volatile: !_isOnMainIsolate,
201201
);
202+
final eraserOnStylusButtonPressAndRelease = PlainStow(
203+
'eraserOnStylusButtonPressAndRelease',
204+
false,
205+
volatile: !_isOnMainIsolate,
206+
);
202207
final hideFingerDrawingToggle = PlainStow(
203208
'hideFingerDrawingToggle',
204209
false,

lib/i18n/strings_en.g.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,9 @@ class TranslationsSettingsPrefLabelsEn {
623623
/// en: 'Auto-disable the eraser'
624624
String get disableEraserAfterUse => 'Auto-disable the eraser';
625625

626+
/// en: 'Eraser on stylus button press and release'
627+
String get eraserOnStylusButtonPressAndRelease => 'Eraser on stylus button press and release';
628+
626629
/// en: 'Hide the finger drawing toggle'
627630
String get hideFingerDrawingToggle => 'Hide the finger drawing toggle';
628631

lib/pages/editor/editor.dart

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -744,19 +744,46 @@ class EditorState extends State<Editor> {
744744
// whether the stylus button is or was pressed
745745
stylusButtonPressed = stylusButtonPressed || buttonPressed;
746746

747-
if (isHovering) {
748-
if (buttonPressed) {
749-
if (currentTool is Eraser) return;
750-
tmpTool = currentTool;
751-
currentTool = Eraser();
752-
setState(() {});
753-
} else {
754-
if (tmpTool != null && currentTool is Eraser) {
755-
currentTool = tmpTool!;
756-
tmpTool = null;
757-
setState(() {});
758-
}
759-
}
747+
if (!Prefs.eraserOnStylusButtonPressAndRelease.value) {
748+
// standard behavior of stylus button, while holding is erasing
749+
if (isHovering) {
750+
if (buttonPressed) {
751+
if (currentTool is Eraser) return;
752+
tmpTool = currentTool;
753+
currentTool = Eraser();
754+
setState(() {});
755+
} else {
756+
if (tmpTool != null && currentTool is Eraser) {
757+
currentTool = tmpTool!;
758+
tmpTool = null;
759+
setState(() {});
760+
}
761+
}
762+
}
763+
} else {
764+
// some pens do not send moving events when stylus button is pressed
765+
// so switch to eraser when button is pressed and back on next press
766+
if (isHovering) {
767+
if (buttonPressed) {
768+
// switch to Eraser
769+
if (currentTool is Eraser) {
770+
if (tmpTool != null) {
771+
// change back original tool
772+
currentTool = tmpTool!;
773+
tmpTool = null;
774+
setState(() {});
775+
}
776+
else {
777+
return; // when I am on eraser and previous tool is not set, it means that Eraser is main tool
778+
}
779+
}
780+
else {
781+
tmpTool = currentTool;
782+
currentTool = Eraser();
783+
setState(() {});
784+
}
785+
}
786+
}
760787
}
761788
}
762789

lib/pages/home/settings.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,12 @@ class _SettingsPageState extends State<SettingsPage> {
368368
icon: FontAwesomeIcons.eraser,
369369
pref: stows.disableEraserAfterUse,
370370
),
371+
SettingsSwitch(
372+
title: t.settings.prefLabels.eraserOnStylusButtonPressAndRelease,
373+
subtitle: t.settings.prefDescriptions.eraserOnStylusButtonPressAndRelease,
374+
icon: FontAwesomeIcons.eraser,
375+
pref: stows.eraserOnStylusButtonPressAndRelease,
376+
),
371377
ValueListenableBuilder(
372378
valueListenable: stows.hideFingerDrawingToggle,
373379
builder: (context, _, _) {

0 commit comments

Comments
 (0)