You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Offer mouse drawing when the mouse reaches for the toolbar (#82)
1.2.0 left Mouse drawing discoverable only in Preferences, which is the
one place someone who does not know the feature exists will not look.
The signal that they might want it is already in the application:
**picking a tool from the toolbar with the mouse.** A pen user reaches
for the palette with the pen, so a mouse arriving there is someone whose
next stroke is going to disappoint them.
## The dialog
`MouseModeOfferWindow` — "Draw with a mouse?", an unchecked **Don't show
me this again**, and **Enable mouse mode** / **Cancel**.
The offer is a question, not a confirmation, and the two answers are not
interchangeable: one changes what the left button means. So:
- **Neither button is `IsDefault` or `IsCancel`, and Enter is
swallowed.** A focused non-default `Button` responding to Enter is
version- and style-dependent, so rather than rely on it not firing,
`Window_PreviewKeyDown` marks *every* Enter handled — it tunnels from
the Window before any button's `KeyDown` — and invokes a button only
when `Keyboard.FocusedElement` is one of ours. Enter with nothing
focused, or with the checkbox focused, does nothing and leaves the
dialog open.
- **Escape closes**, because dismissing is always safe.
- **Nothing is focused on open.** `Keyboard.Focus(this)` in `Loaded`, so
the first Tab reaches the checkbox rather than a primed button —
otherwise the checkbox takes focus and a stray Space answers the wrong
question.
## Three judgment calls
- **Once a session.** Prompting on every toolbar click would be
intolerable; prompting once ever would lose someone not ready to decide.
A Cancel answers this session, the checkbox answers every one after it.
- **The offer is queued at background priority, not shown from the click
handler**, so the click first does what it came to do. The tool is
selected, and the dialog then explains why it may not behave as
expected.
- **A `SuggestMouseMode` setting** (settings version 13 → 14) with a
Preferences entry under Input, because "don't show again" is otherwise a
one-way door. `WarnWhenNoDigitizer` sets the precedent.
**Enable mouse mode** sets `MouseMode.On` rather than `WhenNoDigitizer`,
because the offer can only have appeared where the automatic default
already decided not to.
Decision 24 records all of it. Version is 1.2.1.
## Verification
Build clean, Core smoke tests pass including the settings round-trip and
the 13 → 14 upgrade. Those tests are UI-free, so the dialog's behaviour
is not covered by them; the README gains a second validation list under
Mouse drawing validation, and every item on it is about a key doing
nothing — the part a later change is most likely to undo.
A slow-shutdown regression was investigated against this branch and did
not reproduce on the maintainer's machine. A clean launch-and-close
measures 85–358 ms. No change was made for it.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@ How the project is developed and shipped is documented separately:
11
11
12
12
- Low-latency, pressure-aware WPF wet ink, including rear-eraser detection on any pen that reports it
13
13
- A normal cursor for physical mouse input, and a pen-hover indicator that shows what a tap would do: the laser with its halo and speed trail, a dashed square around what the eraser would clear, and a high-contrast dot for everything else. All of them disappear on contact
14
-
- Optional mouse drawing (default when Windows reports neither a pen tablet nor a touchscreen): the left button uses the current tool, Ctrl and the left button move and resize a container, and Eraser and Pan appear on the toolbar. A mouse reports no pressure, so ink is drawn at an even width and Calligraphy is the one tool that still varies, because its width comes from speed. Nothing about the pen changes when it is on
14
+
- Optional mouse drawing (default when Windows reports neither a pen tablet nor a touchscreen): the left button uses the current tool, Ctrl and the left button move and resize a container, and Eraser and Pan appear on the toolbar. A mouse reports no pressure, so ink is drawn at an even width and Calligraphy is the one tool that still varies, because its width comes from speed. Nothing about the pen changes when it is on. With it off, picking a tool from the toolbar with the mouse offers to turn it on, once a session
15
15
- Touch panning and two-finger pinch zoom
16
16
- Optional finger drawing (default when no pen is detected): one finger uses the current tool, two fingers still pan and pinch-zoom, and Eraser and Pan appear on the toolbar
17
17
- A notice at startup when Windows reports neither a pen tablet nor a touchscreen, saying which pointing device the session is drawing with and what a pen would add. Dismissable from the notice itself or from Preferences, since the tablet list Windows reports can miss a pen that has never been in range
@@ -296,3 +296,19 @@ touching any mouse handler:
296
296
8. Select the Eraser, pan with the right button, and confirm the Eraser is still selected.
297
297
9. On a pen machine with Mouse drawing **On**, draw with the pen and confirm nothing about
298
298
it changed. This is the regression that matters.
299
+
300
+
With Mouse drawing **Off**, the offer has its own list. Every one of these is about a key
301
+
doing nothing, which is the part a later change is most likely to undo:
302
+
303
+
1. Pick a tool from the toolbar with the mouse. The tool is selected, and the offer appears
304
+
after it rather than instead of it.
305
+
2. Pick another tool. The offer does not appear again this session.
306
+
3. Press Enter with nothing focused. Nothing happens and the dialog stays open.
307
+
4. Tab to the checkbox and press Enter. Still nothing.
308
+
5. Tab to a button and press Enter. That button, and only that button, acts.
309
+
6. Press Escape. The dialog closes and Mouse drawing stays off.
310
+
7. Choose **Enable mouse mode**. The left button draws immediately, and Eraser and Pan
311
+
appear on the toolbar.
312
+
8. Tick **Don't show me this again**, choose **Cancel**, restart, and confirm the offer is
313
+
gone and **Help → Preferences → Input** can bring it back.
314
+
9. Reach for the toolbar with the pen on a pen machine, and confirm no offer appears.
Copy file name to clipboardExpand all lines: site/guide.html
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -686,7 +686,7 @@ <h3>Navigation</h3>
686
686
<p>The window can sit in a narrow strip beside another app. <kbd>F11</kbd> fills the monitor and hides the title and tabs. <kbd>Ctrl</kbd><spanclass="plus">+</span><kbd>F11</kbd> hides the same chrome and keeps the window where it is. <kbd>Escape</kbd> leaves either unless a text container is being edited.</p>
687
687
688
688
<h3>Drawing with a mouse</h3>
689
-
<p><spanclass="ui">Preferences → Mouse drawing</span> turns the left button into the selected tool, and defaults to on where Windows reports neither a pen tablet nor a touchscreen. The tool then stays selected instead of being handed back, and <kbd>Ctrl</kbd> with the left button is how you move and resize a container. A mouse reports no pressure, so ink is drawn at an even width; Calligraphy still varies, because its width comes from speed. Nothing about the pen changes, so this can be left on beside one.</p>
689
+
<p><spanclass="ui">Preferences → Mouse drawing</span> turns the left button into the selected tool, and defaults to on where Windows reports neither a pen tablet nor a touchscreen. The tool then stays selected instead of being handed back, and <kbd>Ctrl</kbd> with the left button is how you move and resize a container. A mouse reports no pressure, so ink is drawn at an even width; Calligraphy still varies, because its width comes from speed. Nothing about the pen changes, so this can be left on beside one. With it off, picking a tool from the toolbar with the mouse offers to turn it on, once a session.</p>
690
690
691
691
<h3>Containers</h3>
692
692
<p>Images, LiveViews, and text blocks are containers. With a mouse, click to move, drag the circular handle to resize while keeping aspect ratio — hold <kbd>Ctrl</kbd> too with <spanclass="ui">Mouse drawing</span> on. Releasing the mouse returns to the drawing tool you had. Imported images accept PNG, JPEG, BMP, GIF, and SVG, including clipboard paste and Explorer drag-and-drop. An SVG is kept as its markup and redrawn at every size, so enlarging one costs it nothing.</p>
Text="SQLBI Whiteboard is designed for a pen and a touchscreen. If you would rather use a mouse, Mouse drawing can be turned on in Preferences." />
28
+
<TextBlockMargin="0,10,0,0"
29
+
FontFamily="Segoe UI"
30
+
FontSize="13"
31
+
Foreground="#FF374151"
32
+
TextWrapping="Wrap"
33
+
Text="The left button then uses the selected tool, and Ctrl with the left button moves and resizes a container. A mouse reports no pressure, so ink is drawn at an even width. Nothing about the pen changes." />
34
+
<CheckBoxx:Name="DoNotShowAgainBox"
35
+
Margin="0,20,0,0"
36
+
FontFamily="Segoe UI"
37
+
FontSize="13"
38
+
Foreground="#FF374151"
39
+
Content="Don't show me this again" />
40
+
<!-- Neither button is IsDefault or IsCancel. This is a question the
41
+
person is meant to answer, so Enter must not answer it for them by
42
+
landing on whichever button a dialog would normally favour. -->
0 commit comments