summaryrefslogtreecommitdiff
path: root/lib/gui/simulator/drawing_panel.py
diff options
context:
space:
mode:
authorLex Neva <lexelby@users.noreply.github.com>2024-08-08 09:43:36 -0400
committerGitHub <noreply@github.com>2024-08-08 09:43:36 -0400
commit47ad76f513846a8501f84c057b28a146031859b6 (patch)
tree0d29cb0f87473f925c07f9b58949357ae1cf141d /lib/gui/simulator/drawing_panel.py
parent17b88ce2c14a0802e18e90d8dd142224013dfb15 (diff)
Show page in simulator (#3120)
* add exception logging helpers * wip * show page and drop shadow from SVG * allow toggling page * add page icon * add dark mode icon * showpageshadow * refresh after background change (fix for macOS) * fix params sim background * try a native GraphicsBrush for windows * show page button in standalone simulator only and adapt shadow color * remove doubled line --------- Co-authored-by: Kaalleen <reni@allenka.de>
Diffstat (limited to 'lib/gui/simulator/drawing_panel.py')
-rw-r--r--lib/gui/simulator/drawing_panel.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/gui/simulator/drawing_panel.py b/lib/gui/simulator/drawing_panel.py
index 9b705716..0d1b0afe 100644
--- a/lib/gui/simulator/drawing_panel.py
+++ b/lib/gui/simulator/drawing_panel.py
@@ -7,6 +7,7 @@ import time
import wx
from numpy import split
+from ...debug.debug import debug
from ...i18n import _
from ...svg import PIXELS_PER_MM
from ...utils.settings import global_settings
@@ -59,6 +60,9 @@ class DrawingPanel(wx.Panel):
self.width = 0
self.height = 0
self.loaded = False
+ self.page_specs = {}
+ self.show_page = True
+ self.background_color = None
# desired simulation speed in stitches per second
self.speed = 16
@@ -122,6 +126,34 @@ class DrawingPanel(wx.Panel):
self.draw_stitches(canvas)
self.draw_scale(canvas)
+ def draw_page(self, canvas):
+ self._update_background_color()
+
+ if not self.page_specs or not self.show_page:
+ return
+
+ with debug.log_exceptions():
+ border_color = wx.Colour(self.page_specs['border_color'])
+ if self.page_specs['show_page_shadow']:
+ canvas.SetPen(wx.TRANSPARENT_PEN)
+ canvas.SetBrush(canvas.CreateBrush(wx.Brush(wx.Colour(border_color.Red(), border_color.Green(), border_color.Blue(), alpha=65))))
+ canvas.DrawRoundedRectangle(
+ (-self.page_specs['x'] + 4) * self.PIXEL_DENSITY, (-self.page_specs['y'] + 4) * self.PIXEL_DENSITY,
+ self.page_specs['width'] * self.PIXEL_DENSITY, self.page_specs['height'] * self.PIXEL_DENSITY,
+ 1 * self.PIXEL_DENSITY
+ )
+
+ pen = canvas.CreatePen(
+ wx.GraphicsPenInfo(wx.Colour(border_color)).Width(1 * self.PIXEL_DENSITY).Join(wx.JOIN_MITER)
+ )
+ canvas.SetPen(pen)
+ canvas.SetBrush(wx.Brush(wx.Colour(self.background_color or self.page_specs['page_color'])))
+
+ canvas.DrawRectangle(
+ -self.page_specs['x'] * self.PIXEL_DENSITY, -self.page_specs['y'] * self.PIXEL_DENSITY,
+ self.page_specs['width'] * self.PIXEL_DENSITY, self.page_specs['height'] * self.PIXEL_DENSITY
+ )
+
def draw_stitches(self, canvas):
canvas.BeginLayer(1)
@@ -130,6 +162,8 @@ class DrawingPanel(wx.Panel):
transform.Scale(self.zoom / self.PIXEL_DENSITY, self.zoom / self.PIXEL_DENSITY)
canvas.SetTransform(transform)
+ self.draw_page(canvas)
+
stitch = 0
last_stitch = None
@@ -252,6 +286,28 @@ class DrawingPanel(wx.Panel):
if hasattr(self.view_panel, 'info_panel'):
self.view_panel.info_panel.update()
+ def set_page_specs(self, page_specs):
+ self.SetBackgroundColour(page_specs['desk_color'])
+ self.page_specs = page_specs
+
+ def set_background_color(self, color):
+ self.background_color = color
+ # this refresh is necessary for macOS
+ self.Refresh()
+
+ def _update_background_color(self):
+ if not self.page_specs:
+ self.SetBackgroundColour(self.background_color or "#FFFFFF")
+ else:
+ if self.show_page:
+ self.SetBackgroundColour(self.page_specs['desk_color'])
+ else:
+ self.SetBackgroundColour(self.background_color or self.page_specs['page_color'])
+
+ def set_show_page(self, show_page):
+ self.show_page = show_page
+ self._update_background_color()
+
def choose_zoom_and_pan(self, event=None):
# ignore if EVT_SIZE fired before we load the stitch plan
if not self.width and not self.height and event is not None: