From 9e6a70f76e4ad4b9d9813b8ed0dfcad5ca1fd501 Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:08:21 +0100 Subject: [PATCH] lettering: add option to chose between trim command styles (#2110) --- lib/extensions/lettering.py | 11 +++++++++-- lib/lettering/font.py | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index c997e2016..a396765b9 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -76,6 +76,10 @@ class LetteringFrame(wx.Frame): name=_("Add trim command")) self.trim_option_choice.Bind(wx.EVT_CHOICE, lambda event: self.on_trim_option_change(event)) + self.use_trim_symbols = wx.CheckBox(self, label=_("Use command symbols")) + self.use_trim_symbols.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("use_trim_symbols", event)) + self.use_trim_symbols.SetToolTip(_('Uses command symbols if enabled. When disabled inserts trim commands as params.')) + # text editor self.text_input_box = wx.StaticBox(self, wx.ID_ANY, label=_("Text")) @@ -108,7 +112,8 @@ class LetteringFrame(wx.Frame): "back_and_forth": False, "font": None, "scale": 100, - "trim_option": 0 + "trim_option": 0, + "use_trim_symbols": False }) if INKSTITCH_LETTERING in self.group.attrib: @@ -127,6 +132,7 @@ class LetteringFrame(wx.Frame): """Make the settings in self.settings visible in the UI.""" self.back_and_forth_checkbox.SetValue(bool(self.settings.back_and_forth)) self.trim_option_choice.SetSelection(self.settings.trim_option) + self.use_trim_symbols.SetValue(bool(self.settings.use_trim_symbols)) self.set_initial_font(self.settings.font) self.text_editor.SetValue(self.settings.text) self.scale_spinner.SetValue(self.settings.scale) @@ -315,7 +321,7 @@ class LetteringFrame(wx.Frame): font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) try: font.render_text(self.settings.text, destination_group, back_and_forth=self.settings.back_and_forth, - trim_option=self.settings.trim_option) + trim_option=self.settings.trim_option, use_trim_symbols=self.settings.use_trim_symbols) except FontError as e: if raise_error: @@ -408,6 +414,7 @@ class LetteringFrame(wx.Frame): trim_option_sizer = wx.BoxSizer(wx.HORIZONTAL) trim_option_sizer.Add(wx.StaticText(self, wx.ID_ANY, "Add trims"), 0, wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, 5) trim_option_sizer.Add(self.trim_option_choice, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT | wx.BOTTOM, 5) + trim_option_sizer.Add(self.use_trim_symbols, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT | wx.BOTTOM, 5) left_option_sizer.Add(trim_option_sizer, 0, wx.ALIGN_LEFT, 5) font_scale_sizer = wx.BoxSizer(wx.HORIZONTAL) diff --git a/lib/lettering/font.py b/lib/lettering/font.py index 03df4dc57..56d881ae7 100644 --- a/lib/lettering/font.py +++ b/lib/lettering/font.py @@ -19,7 +19,7 @@ from ..marker import MARKER, ensure_marker, has_marker from ..stitches.auto_satin import auto_satin from ..svg.tags import (CONNECTION_END, CONNECTION_START, EMBROIDERABLE_TAGS, INKSCAPE_LABEL, SVG_GROUP_TAG, SVG_PATH_TAG, - SVG_USE_TAG, XLINK_HREF) + SVG_USE_TAG, XLINK_HREF, INKSTITCH_ATTRIBS) from ..utils import Point from .font_variant import FontVariant @@ -184,7 +184,7 @@ class Font(object): def is_custom_font(self): return get_custom_font_dir() in self.path - def render_text(self, text, destination_group, variant=None, back_and_forth=True, trim_option=0): + def render_text(self, text, destination_group, variant=None, back_and_forth=True, trim_option=0, use_trim_symbols=False): """Render text into an SVG group element.""" self._load_variants() @@ -226,7 +226,7 @@ class Font(object): element.set('style', '%s' % style.to_str()) # add trims - self._add_trims(destination_group, text, trim_option, back_and_forth) + self._add_trims(destination_group, text, trim_option, use_trim_symbols, back_and_forth) # make sure necessary marker and command symbols are in the defs section self._ensure_command_symbols(destination_group) self._ensure_marker_symbols(destination_group) @@ -340,7 +340,7 @@ class Font(object): c.set(CONNECTION_END, "#%s" % new_element_id) c.set(CONNECTION_START, "#%s" % new_symbol_id) - def _add_trims(self, destination_group, text, trim_option, back_and_forth): + def _add_trims(self, destination_group, text, trim_option, use_trim_symbols, back_and_forth): """ trim_option == 0 --> no trims trim_option == 1 --> trim at the end of each line @@ -369,15 +369,15 @@ class Font(object): # letter if trim_option == 3: - self._process_trim(group) + self._process_trim(group, use_trim_symbols) # word elif trim_option == 2 and i+1 in space_indices + line_break_indices: - self._process_trim(group) + self._process_trim(group, use_trim_symbols) # line elif trim_option == 1 and i+1 in line_break_indices: - self._process_trim(group) + self._process_trim(group, use_trim_symbols) - def _process_trim(self, group): + def _process_trim(self, group, use_trim_symbols): # find the last path that does not carry a marker and add a trim there for path_child in group.iterdescendants(EMBROIDERABLE_TAGS): if not has_marker(path_child): @@ -390,7 +390,10 @@ class Font(object): if element.shape: element_id = "%s_%s" % (element.node.get('id'), randint(0, 9999)) element.node.set("id", element_id) - add_commands(element, ['trim']) + if use_trim_symbols is False: + element.node.set(INKSTITCH_ATTRIBS['trim_after'], 'true') + else: + add_commands(element, ['trim']) def _ensure_command_symbols(self, group): # collect commands