diff options
| author | Kaalleen <36401965+kaalleen@users.noreply.github.com> | 2025-10-27 18:09:21 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-27 18:09:21 +0100 |
| commit | 6f282829537b69b8628b901cc717f18222ff33a0 (patch) | |
| tree | d703e389a395f021836816ef1e0e5fe509474fc8 /lib/gui | |
| parent | e8859c4e14984bcdb3dd6d3c9bfed05cd233251c (diff) | |
Lettering: add spacing options (#4020)
Diffstat (limited to 'lib/gui')
| -rw-r--r-- | lib/gui/lettering/main_panel.py | 11 | ||||
| -rw-r--r-- | lib/gui/lettering/option_panel.py | 90 |
2 files changed, 74 insertions, 27 deletions
diff --git a/lib/gui/lettering/main_panel.py b/lib/gui/lettering/main_panel.py index 1766516e..af5af494 100644 --- a/lib/gui/lettering/main_panel.py +++ b/lib/gui/lettering/main_panel.py @@ -82,7 +82,10 @@ class LetteringPanel(wx.Panel): "scale": 100, "trim_option": global_settings['lettering_trim_option'], "use_trim_symbols": global_settings['lettering_use_command_symbols'], - "color_sort": 0 + "color_sort": 0, + "letter_spacing": 0, + "word_spacing": 0, + "line_height": 0 }) if INKSTITCH_LETTERING in self.group.attrib: @@ -106,6 +109,9 @@ class LetteringPanel(wx.Panel): self.options_panel.use_trim_symbols.SetValue(bool(self.settings.use_trim_symbols)) self.options_panel.text_editor.SetValue(self.settings.text) self.options_panel.scale_spinner.SetValue(self.settings.scale) + self.options_panel.letter_spacing.SetValue(self.settings.letter_spacing) + self.options_panel.word_spacing.SetValue(self.settings.word_spacing) + self.options_panel.line_height.SetValue(self.settings.line_height) self.set_initial_font(self.settings.font) def save_settings(self): @@ -313,7 +319,8 @@ class LetteringPanel(wx.Panel): font.render_text( self.settings.text, destination_group, back_and_forth=self.settings.back_and_forth, trim_option=self.settings.trim_option, use_trim_symbols=self.settings.use_trim_symbols, - color_sort=self.settings.color_sort, text_align=self.settings.text_align + color_sort=self.settings.color_sort, text_align=self.settings.text_align, + letter_spacing=self.settings.letter_spacing, word_spacing=self.settings.word_spacing, line_height=self.settings.line_height ) except FontError as e: if raise_error: diff --git a/lib/gui/lettering/option_panel.py b/lib/gui/lettering/option_panel.py index e768a29b..f0bd7846 100644 --- a/lib/gui/lettering/option_panel.py +++ b/lib/gui/lettering/option_panel.py @@ -34,11 +34,11 @@ class LetteringOptionsPanel(ScrolledPanel): self.filter_box = wx.StaticBox(self, wx.ID_ANY, label=_("Font Filter")) filter_sizer = wx.StaticBoxSizer(self.filter_box, wx.HORIZONTAL) filter_size_label = wx.StaticText(self, wx.ID_ANY, _("Size")) - filter_sizer.Add(filter_size_label, 0, wx.LEFT | wx.TOP | wx.BOTTOM, 10) + filter_sizer.Add(filter_size_label, 0, wx.LEFT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 10) filter_sizer.AddSpacer(5) filter_sizer.Add(self.font_size_filter, 1, wx.RIGHT | wx.TOP | wx.BOTTOM, 10) filter_sizer.AddSpacer(5) - filter_sizer.Add(self.font_glyph_filter, 1, wx.RIGHT | wx.TOP | wx.BOTTOM, 10) + filter_sizer.Add(self.font_glyph_filter, 1, wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, 10) filter_sizer.Add(self.font_category_filter, 1, wx.RIGHT | wx.TOP | wx.BOTTOM, 10) outer_sizer.Add(filter_sizer, 0, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) @@ -77,19 +77,71 @@ class LetteringOptionsPanel(ScrolledPanel): font_selector_sizer.Add(font_description_sizer, 0, wx.EXPAND | wx.ALL, 10) outer_sizer.Add(font_selector_sizer, 0, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) - # options + # sizing and alignment + scale_spinner_label = wx.StaticText(self, wx.ID_ANY, _("Scale (%)")) self.scale_spinner = wx.SpinCtrl(self, wx.ID_ANY, min=0, max=1000, initial=100) - self.scale_spinner.Bind(wx.EVT_SPINCTRL, lambda event: self.panel.on_change("scale", event)) - - self.back_and_forth_checkbox = wx.CheckBox(self, label=_("Stitch lines of text back and forth")) - self.back_and_forth_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self.panel.on_change("back_and_forth", event)) - align_text_label = wx.StaticText(self, wx.ID_ANY, _("Align Text")) self.align_text_choice = wx.Choice( self, choices=[_("Left"), _("Center"), _("Right"), _("Block (default)"), _("Block (letterspacing)")] ) + + self.spacing_box = wx.StaticBox(self, wx.ID_ANY, label=_("Sizing and alignment")) + letter_spacing_label = wx.StaticText(self, wx.ID_ANY, _("Letter spacing (mm)")) + letter_spacing_label.SetToolTip(_("Additional letter spacing in mm.")) + self.letter_spacing = wx.SpinCtrlDouble(self, min=-500, max=500, inc=0.01, initial=0, style=wx.SP_WRAP) + word_spacing_label = wx.StaticText(self, wx.ID_ANY, _("Word spacing (mm)")) + word_spacing_label.SetToolTip(_("Additional word spacing in mm.")) + self.word_spacing = wx.SpinCtrlDouble(self, min=-500, max=500, inc=0.01, initial=0, style=wx.SP_WRAP) + line_height_label = wx.StaticText(self, wx.ID_ANY, _("Line height (mm)")) + line_height_label.SetToolTip(_("Additional line height in mm.")) + self.line_height = wx.SpinCtrlDouble(self, min=-500, max=500, inc=0.01, initial=0, style=wx.SP_WRAP) + + # alignment events + self.scale_spinner.Bind(wx.EVT_SPINCTRL, lambda event: self.panel.on_change("scale", event)) self.align_text_choice.Bind(wx.EVT_CHOICE, lambda event: self.panel.on_choice_change("text_align", event)) + self.letter_spacing.Bind(wx.EVT_SPINCTRLDOUBLE, lambda event: self.panel.on_change("letter_spacing", event)) + self.word_spacing.Bind(wx.EVT_SPINCTRLDOUBLE, lambda event: self.panel.on_change("word_spacing", event)) + self.line_height.Bind(wx.EVT_SPINCTRLDOUBLE, lambda event: self.panel.on_change("line_height", event)) + + # alignment sizers + alignment_sizer = wx.StaticBoxSizer(self.spacing_box, wx.VERTICAL) + top_align_sizer = wx.BoxSizer(wx.HORIZONTAL) + alignment_sizer.Add(top_align_sizer, 0, wx.TOP | wx.LEFT | wx.RIGHT, 5) + spacing_sizer = wx.BoxSizer(wx.HORIZONTAL) + alignment_sizer.Add(spacing_sizer, 0, wx.ALL, 5) + outer_sizer.Add(alignment_sizer, 0, wx.ALL | wx.EXPAND, 10) + + font_scale_sizer = wx.BoxSizer(wx.VERTICAL) + font_scale_sizer.Add(scale_spinner_label, 0, wx.LEFT, 0) + font_scale_sizer.Add(self.scale_spinner, 0, wx.TOP, 6) + top_align_sizer.Add(font_scale_sizer, 1, wx.ALL, 5) + + text_align_sizer = wx.BoxSizer(wx.VERTICAL) + text_align_sizer.Add(align_text_label, 0, wx.ALL, 0) + text_align_spinner_sizer = wx.BoxSizer(wx.HORIZONTAL) + text_align_spinner_sizer.Add(self.align_text_choice, 0, wx.ALL, 0) + text_align_sizer.Add(text_align_spinner_sizer, 0, wx.TOP, 5) + top_align_sizer.Add(text_align_sizer, 0, wx.ALL, 5) + + letter_spacing_sizer = wx.BoxSizer(wx.VERTICAL) + letter_spacing_sizer.Add(letter_spacing_label, 0, wx.BOTTOM, 5) + letter_spacing_sizer.Add(self.letter_spacing, 0, wx.ALL, 0) + spacing_sizer.Add(letter_spacing_sizer, 0, wx.ALL, 5) + + word_spacing_sizer = wx.BoxSizer(wx.VERTICAL) + word_spacing_sizer.Add(word_spacing_label, 0, wx.BOTTOM, 5) + word_spacing_sizer.Add(self.word_spacing, 0, wx.ALL, 0) + spacing_sizer.Add(word_spacing_sizer, 0, wx.ALL, 5) + + line_height_sizer = wx.BoxSizer(wx.VERTICAL) + line_height_sizer.Add(line_height_label, 0, wx.BOTTOM, 5) + line_height_sizer.Add(self.line_height, 0, wx.ALL, 0) + spacing_sizer.Add(line_height_sizer, 0, wx.ALL, 5) + + # options + self.back_and_forth_checkbox = wx.CheckBox(self, label=_("Stitch lines of text back and forth")) + self.back_and_forth_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self.panel.on_change("back_and_forth", event)) color_sort_label = wx.StaticText(self, wx.ID_ANY, _("Color sort")) color_sort_label.SetToolTip(_("Sort multicolor fonts. Unifies tartan patterns.")) @@ -107,26 +159,14 @@ class LetteringOptionsPanel(ScrolledPanel): self.use_trim_symbols.SetToolTip(_('Uses command symbols if enabled. When disabled inserts trim commands as params.')) left_option_sizer = wx.BoxSizer(wx.VERTICAL) - - font_scale_sizer = wx.BoxSizer(wx.HORIZONTAL) - font_scale_sizer.Add(wx.StaticText(self, wx.ID_ANY, _("Scale")), 0, wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, 0) - font_scale_sizer.Add(self.scale_spinner, 0, wx.LEFT, 10) - font_scale_sizer.Add(wx.StaticText(self, wx.ID_ANY, "%"), 0, wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, 3) - left_option_sizer.Add(font_scale_sizer, 0, wx.ALL, 5) - - left_option_sizer.Add(self.back_and_forth_checkbox, 1, wx.LEFT | wx.TOP | wx.RIGHT, 5) - - align_sizer = wx.BoxSizer(wx.HORIZONTAL) - align_sizer.Add(align_text_label, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) - align_sizer.Add(self.align_text_choice, 0, wx.ALL, 5) - left_option_sizer.Add(align_sizer, 0, wx.ALL, 5) - - right_option_sizer = wx.BoxSizer(wx.VERTICAL) + left_option_sizer.Add(self.back_and_forth_checkbox, 1, wx.TOP | wx.RIGHT, 5) color_sort_sizer = wx.BoxSizer(wx.HORIZONTAL) color_sort_sizer.Add(color_sort_label, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) color_sort_sizer.Add(self.color_sort_choice, 1, wx.ALL, 5) - right_option_sizer.Add(color_sort_sizer, 0, wx.ALIGN_LEFT, 5) + left_option_sizer.Add(color_sort_sizer, 0, wx.ALIGN_LEFT, 0) + + right_option_sizer = wx.BoxSizer(wx.VERTICAL) trim_sizer = wx.BoxSizer(wx.HORIZONTAL) trim_sizer.Add(trim_label, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5) @@ -135,7 +175,7 @@ class LetteringOptionsPanel(ScrolledPanel): right_option_sizer.Add(self.use_trim_symbols, 0, wx.LEFT | wx.BOTTOM | wx.RIGHT, 5) - self.options_box = wx.StaticBox(self, wx.ID_ANY, label=_("Options")) + self.options_box = wx.StaticBox(self, wx.ID_ANY, label=_("Embroidery settings")) options_sizer = wx.StaticBoxSizer(self.options_box, wx.HORIZONTAL) options_sizer.Add(left_option_sizer, 1, wx.ALL, 10) options_sizer.Add(right_option_sizer, 0, wx.ALL, 10) |
