From 3afa9969f13cc9677307ba676b187c3d6c76f827 Mon Sep 17 00:00:00 2001 From: Karlis Upitis Date: Wed, 14 Oct 2026 19:35:29 +0300 Subject: [PATCH 1/3] Update: Redesign hold mouse status figure and add mouse options Draw the default mouse as a single rounded body with a scroll wheel. The pressed button fill wraps around the wheel so the wheel stays visible without a background. New options (shown under Color when the hold mouse status is drawn): * Mouse Style: Original / Updated (default: Updated) * Active Color: fill color of a pressed mouse button * Mouse Background: fill the mouse body with its own RGBA color Also ignore __pycache__ directories. --- .gitignore | 1 + CHANGELOG.md | 9 + .../tutorial/option_mouse_active_color.png | Bin 0 -> 13358 bytes .../tutorial/option_mouse_background.png | Bin 0 -> 18739 bytes docs/images/tutorial/option_mouse_style.png | Bin 0 -> 20886 bytes docs/tutorial.md | 31 ++++ src/screencast_keys/ops.py | 158 +++++++++++++++++- src/screencast_keys/preferences.py | 42 +++++ src/screencast_keys/ui.py | 7 + 9 files changed, 240 insertions(+), 8 deletions(-) create mode 100644 docs/images/tutorial/option_mouse_active_color.png create mode 100644 docs/images/tutorial/option_mouse_background.png create mode 100644 docs/images/tutorial/option_mouse_style.png diff --git a/.gitignore b/.gitignore index f32e31a..3e39268 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/ .DS_Store +__pycache__/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 90c7eba..4ce4b40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ ## [Unreleased](https://github.com/nutti/Screencast-Keys/compare/v4.2.0...master) +### Updated Features + +* Updated the figure of the hold mouse status (rounded body with a scroll + wheel) +* Added options + * Mouse Style (Original / Updated) + * Active Color + * Mouse Background + ## [Version 4.2.2](https://github.com/nutti/Screencast-Keys/compare/v4.2.1...v4.2.2) - 2026.3.22 diff --git a/docs/images/tutorial/option_mouse_active_color.png b/docs/images/tutorial/option_mouse_active_color.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4d3b5553fefceaaf2292bcc3b80c00c61cb419 GIT binary patch literal 13358 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 literal 0 HcmV?d00001 diff --git a/docs/images/tutorial/option_mouse_background.png b/docs/images/tutorial/option_mouse_background.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4873e2084177efcd76cde6195a6db9edb9b6b7 GIT binary patch literal 18739 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 literal 0 HcmV?d00001 diff --git a/docs/images/tutorial/option_mouse_style.png b/docs/images/tutorial/option_mouse_style.png new file mode 100644 index 0000000000000000000000000000000000000000..6586d0e8085d1f7abc7240e9c6eab11c962ddfa2 GIT binary patch literal 20886 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 0 else 0.0 + p0, p1 = points[seg], points[seg + 1] + result.append((p0[0] + (p1[0] - p0[0]) * t, + p0[1] + (p1[1] - p0[1]) * t)) + return result + + +def draw_filled_band(outer, inner, color): + """Fill the area between two polylines with the same point count.""" + original_state = gpu.state.blend_get() + gpu.state.blend_set('ALPHA') + imm.immColor4f(*color) + imm.immBegin(imm.GL_QUADS) + for o0, o1, i0, i1 in zip(outer[:-1], outer[1:], inner[:-1], inner[1:]): + imm.immVertex2f(*o0) + imm.immVertex2f(*o1) + imm.immVertex2f(*i1) + imm.immVertex2f(*i0) + imm.immEnd() + imm.immColor4f(1.0, 1.0, 1.0, 1.0) + gpu.state.blend_set(original_state) + + +def draw_updated_mouse(x, y, w, h, left_button_status, right_button_status, middle_button_status, color, round_radius, fill=False, fill_color=None, - line_thickness=1): + line_thickness=1, pressed_color=None): + # Mouse is drawn as a single rounded body. The upper half holds the + # left/right buttons separated by a vertical line, with the wheel + # (middle button) in the center overlapping the horizontal divider. + body_radius = min(round_radius, w / 2, h / 4) + button_h = h / 2 + button_y = y + h - button_h + top_y = y + h + wheel_w = w * 0.2 + wheel_h = button_h * 0.74 + wheel_x = x + (w - wheel_w) / 2 + wheel_y = top_y - button_h * 0.39 - wheel_h + wheel_radius = wheel_w / 2 + center_x = x + w / 2 + if pressed_color is None: + pressed_color = color + + def button_contours(side): + """Outer and inner contours of a button, from top to bottom. + + The inner contour follows the center line and wraps around the + wheel so the wheel is cut out from the filled button. + """ + r = body_radius + wr = wheel_radius + if side == 'LEFT': + edge_x = x + end_x = center_x - wr + corner = _arc_points(x + r, top_y - r, r, + math.pi * 0.5, math.pi, 8) + cap = _arc_points(center_x, wheel_y + wheel_h - wr, wr, + math.pi * 0.5, math.pi, 8) + else: + edge_x = x + w + end_x = center_x + wr + corner = _arc_points(x + w - r, top_y - r, r, + math.pi * 0.5, 0.0, 8) + cap = _arc_points(center_x, wheel_y + wheel_h - wr, wr, + math.pi * 0.5, 0.0, 8) + outer = [(center_x, top_y)] + corner + \ + [(edge_x, button_y), (end_x, button_y)] + inner = [(center_x, top_y)] + cap + [(end_x, button_y)] + num = 48 + return _resample_polyline(outer, num), \ + _resample_polyline(inner, num) + + # Mouse body. + if fill: + draw_rounded_box(x, y, w, h, body_radius, + fill=True, color=fill_color, + line_thickness=line_thickness) + + # Pressed buttons. + for status, side in ((left_button_status, 'LEFT'), + (right_button_status, 'RIGHT')): + if status in ('PRESS', 'CLICK_DRAG'): + draw_filled_band(*button_contours(side), pressed_color) + if middle_button_status in ('PRESS', 'CLICK_DRAG'): + draw_rounded_box(wheel_x, wheel_y, wheel_w, wheel_h, wheel_radius, + fill=True, color=pressed_color, + line_thickness=line_thickness) + + # Outlines. Dividers are split so they don't cross the wheel. + draw_rounded_box(x, y, w, h, body_radius, + fill=False, color=color, + line_thickness=line_thickness) + draw_rounded_box(wheel_x, wheel_y, wheel_w, wheel_h, wheel_radius, + fill=False, color=color, + line_thickness=line_thickness) + draw_line([x, button_y], [wheel_x, button_y], color, + line_thickness=line_thickness) + draw_line([wheel_x + wheel_w, button_y], [x + w, button_y], color, + line_thickness=line_thickness) + draw_line([center_x, wheel_y + wheel_h], [center_x, top_y], color, + line_thickness=line_thickness) + + +def draw_original_mouse(x, y, w, h, left_button_status, + right_button_status, middle_button_status, + color, round_radius, fill=False, fill_color=None, + line_thickness=1, pressed_color=None): + if pressed_color is None: + pressed_color = color mouse_body = [x, y, w, h / 2] left_mouse_button = [x, y + h / 2, w / 3, h / 2] middle_mouse_button = [x + w / 3, y + h / 2, w / 3, h / 2] @@ -103,7 +229,7 @@ def draw_default_mouse(x, y, w, h, left_button_status, left_mouse_button[0], left_mouse_button[1], left_mouse_button[2], left_mouse_button[3], round_radius / 2, - fill=True, color=color, + fill=True, color=pressed_color, round_corner=[False, False, False, True], line_thickness=line_thickness) @@ -128,7 +254,7 @@ def draw_default_mouse(x, y, w, h, left_button_status, middle_mouse_button[0], middle_mouse_button[1], middle_mouse_button[2], middle_mouse_button[3], round_radius / 2, - fill=True, color=color, + fill=True, color=pressed_color, round_corner=[False, False, False, False], line_thickness=line_thickness) @@ -153,11 +279,24 @@ def draw_default_mouse(x, y, w, h, left_button_status, right_mouse_button[0], right_mouse_button[1], right_mouse_button[2], right_mouse_button[3], round_radius / 2, - fill=True, color=color, + fill=True, color=pressed_color, round_corner=[False, False, True, False], line_thickness=line_thickness) +def draw_default_mouse(x, y, w, h, left_button_status, + right_button_status, middle_button_status, + color, round_radius, fill=False, fill_color=None, + line_thickness=1, pressed_color=None, + style='UPDATED'): + draw_func = draw_original_mouse if style == 'ORIGINAL' \ + else draw_updated_mouse + draw_func(x, y, w, h, left_button_status, + right_button_status, middle_button_status, + color, round_radius, fill=fill, fill_color=fill_color, + line_thickness=line_thickness, pressed_color=pressed_color) + + def draw_custom_mouse(x, y, w, h, left_button_status, right_button_status, middle_button_status, display_mode, @@ -1377,9 +1516,12 @@ def _draw_mouse_and_modifier_keys_layer(cls, context, font_id, x, y): cls.mouse_buttons_status['MIDDLEMOUSE'], prefs.color, prefs.mouse_size * 0.5 * ui_scale, - fill=prefs.background, - fill_color=prefs.background_color, - line_thickness=prefs.line_thickness * ui_line_width) + fill=prefs.background or prefs.mouse_background, + fill_color=prefs.mouse_background_color + if prefs.mouse_background else prefs.background_color, + line_thickness=prefs.line_thickness * ui_line_width, + pressed_color=prefs.mouse_active_color, + style=prefs.mouse_style) # Draw hold modifier keys. if cls.hold_modifier_keys or drawing: diff --git a/src/screencast_keys/preferences.py b/src/screencast_keys/preferences.py index df316f4..a70ab30 100644 --- a/src/screencast_keys/preferences.py +++ b/src/screencast_keys/preferences.py @@ -196,6 +196,41 @@ class SK_Preferences(bpy.types.AddonPreferences): size=4, ) + mouse_style: bpy.props.EnumProperty( + name="Mouse Style", + description="Figure style of the hold mouse status", + items=[ + ('ORIGINAL', "Original", "Three separate buttons on a body"), + ('UPDATED', "Updated", "Rounded body with a scroll wheel"), + ], + default='UPDATED', + ) + + mouse_active_color: bpy.props.FloatVectorProperty( + name="Active Color", + description="Fill color of a pressed mouse button", + default=(1.0, 1.0, 1.0, 1.0), + min=0.0, + max=1.0, + subtype='COLOR_GAMMA', + size=4, + ) + + mouse_background: bpy.props.BoolProperty( + name="Mouse Background", + description="Fill the mouse body with its own background color", + default=False + ) + + mouse_background_color: bpy.props.FloatVectorProperty( + name="Mouse Background Color", + default=(0.0, 0.0, 0.0, 0.5), + min=0.0, + max=1.0, + subtype='COLOR', + size=4, + ) + shadow: bpy.props.BoolProperty( name="Shadow", default=False @@ -552,6 +587,13 @@ def draw(self, _): split = column.split() col = split.column() col.prop(self, "color") + if show_mouse_hold_status(self) and \ + not self.use_custom_mouse_image: + col.prop(self, "mouse_style") + col.prop(self, "mouse_active_color") + col.prop(self, "mouse_background") + if self.mouse_background: + col.prop(self, "mouse_background_color", text="") col.separator() col.prop(self, "shadow") if self.shadow: diff --git a/src/screencast_keys/ui.py b/src/screencast_keys/ui.py index b9369c4..57cfe6c 100644 --- a/src/screencast_keys/ui.py +++ b/src/screencast_keys/ui.py @@ -43,6 +43,13 @@ def draw(self, _): column = layout.column() column.prop(prefs, "color") + if show_mouse_hold_status(prefs) and \ + not prefs.use_custom_mouse_image: + column.prop(prefs, "mouse_style", text="Style") + column.prop(prefs, "mouse_active_color") + column.prop(prefs, "mouse_background") + if prefs.mouse_background: + column.prop(prefs, "mouse_background_color", text="") column.separator() From d8ce5c3bb80e1cf8475a40dade30f1df0bba025f Mon Sep 17 00:00:00 2001 From: Karlis Upitis Date: Thu, 15 Oct 2026 23:31:09 +0300 Subject: [PATCH 2/3] Update docs/tutorial.md Update version naming convention. Co-authored-by: nutti --- docs/tutorial.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorial.md b/docs/tutorial.md index 4d9643d..c065560 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -43,8 +43,8 @@ This option is only available when **Show Mouse Events** option's mode is ||| |---|---| -|**Original**|Three separate buttons on a body.| -|**Updated**|Rounded body with a scroll wheel (default).| +|**v1**|Three separate buttons on a body.| +|**v2**|Rounded body with a scroll wheel (default).| ![Option (Mouse Style)](images/tutorial/option_mouse_style.png) From 44e5e4d6d87b42ca654c0d8d3a4e73c54a4ae62f Mon Sep 17 00:00:00 2001 From: Karlis Upitis Date: Thu, 15 Oct 2026 23:34:12 +0300 Subject: [PATCH 3/3] Fix: Address review comments * Do not modify CHANGELOG.md * Rename mouse styles to v1 / v2 * Use if-elif-else for the style dispatch and raise on unknown style --- CHANGELOG.md | 9 ------- docs/images/tutorial/option_mouse_style.png | Bin 20886 -> 18425 bytes src/screencast_keys/ops.py | 26 +++++++++++--------- src/screencast_keys/preferences.py | 6 ++--- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ce4b40..90c7eba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,15 +4,6 @@ ## [Unreleased](https://github.com/nutti/Screencast-Keys/compare/v4.2.0...master) -### Updated Features - -* Updated the figure of the hold mouse status (rounded body with a scroll - wheel) -* Added options - * Mouse Style (Original / Updated) - * Active Color - * Mouse Background - ## [Version 4.2.2](https://github.com/nutti/Screencast-Keys/compare/v4.2.1...v4.2.2) - 2026.3.22 diff --git a/docs/images/tutorial/option_mouse_style.png b/docs/images/tutorial/option_mouse_style.png index 6586d0e8085d1f7abc7240e9c6eab11c962ddfa2..cca8b1357202abd83a16da7f219ca2dbcaa6a7c9 100644 GIT binary patch literal 18425 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 O&S=$$8{s`_2;Xt(G7JLNu0;o!y;-JY++ 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 WO{8&AgfCkmK*=lL%$0rY_kRH%W9_E^ literal 20886 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