Skip to content

Commit 933bed0

Browse files
committed
Fix visual bug on profile switch
Resolves #69, nice.
1 parent d033ccc commit 933bed0

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

mousetracks2/gui/main_window.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def __init__(self, component: GUI) -> None:
195195

196196
self.pause_redraw = 0
197197
self.pause_colour_change = False
198-
self.redraw_queue: list[Pixel] = []
198+
self._pixel_redraw_queue: list[tuple[tuple[int, int] | None, tuple[int, int] | None, tuple[int, int] | None]] = []
199199
self._last_save_time = self._last_thumbnail_time = self._last_app_reload_time = int(time.time() * 10)
200200
self._delete_mouse_pressed = False
201201
self._delete_keyboard_pressed = False
@@ -2290,6 +2290,10 @@ def draw_pixmap_line(self, old_position: tuple[int, int] | None, new_position: t
22902290
if not self.isVisible() or not self.is_live or self._is_closing or self.ui.thumbnail.pixmap().isNull():
22912291
return
22922292

2293+
# If in the middle of switching profiles, queue the coordinates to redraw after
2294+
if self.pause_redraw:
2295+
self._pixel_redraw_queue.append((old_position, new_position, force_monitor))
2296+
22932297
# Convert pixels from logical coordinates to physical
22942298
if force_monitor is None:
22952299
if old_position is not None:
@@ -2322,19 +2326,12 @@ def draw_pixmap_line(self, old_position: tuple[int, int] | None, new_position: t
23222326
unique_pixels.add((x, y))
23232327

23242328
# Send unique pixels to be drawn
2325-
self.update_pixmap_pixels(*(Pixel(QtCore.QPoint(x, y), self.pixel_colour) for x, y in unique_pixels))
2329+
self.ui.thumbnail.update_pixels(*(Pixel(QtCore.QPoint(x, y), self.pixel_colour) for x, y in unique_pixels))
23262330

2327-
def update_pixmap_pixels(self, *pixels: Pixel) -> None:
2328-
"""Update a specific pixel in the QImage and refresh the display."""
2329-
self.ui.thumbnail.update_pixels(*pixels)
2330-
2331-
# Queue commands if redrawing is paused
2332-
# This allows them to be resubmitted after an update
2333-
if self.pause_redraw:
2334-
self.redraw_queue.extend(pixels)
2335-
elif self.redraw_queue:
2336-
redraw_queue, self.redraw_queue = self.redraw_queue, []
2337-
self.ui.thumbnail.update_pixels(*redraw_queue)
2331+
# Redraw any queued coordinates after profile switch
2332+
while not self.pause_redraw and self._pixel_redraw_queue:
2333+
_old_position, _new_position, _force_monitor = self._pixel_redraw_queue.pop()
2334+
self.draw_pixmap_line(_old_position, _new_position, _force_monitor)
23382335

23392336
def update_thumbnail_size(self) -> None:
23402337
"""Set a new thumbnail size after the window has finished resizing."""

0 commit comments

Comments
 (0)