File tree Expand file tree Collapse file tree 4 files changed +54
-13
lines changed
Expand file tree Collapse file tree 4 files changed +54
-13
lines changed Original file line number Diff line number Diff 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 ,
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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, _, _) {
You can’t perform that action at this time.
0 commit comments