From 003ee406a5bc5d31f5f62183fc5d67b4140a39f9 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Tue, 18 Dec 2018 20:16:54 -0500 Subject: add trim checkbox --- lib/extensions/lettering.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index b6d67c0b..fd9c7628 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -38,6 +38,10 @@ class LetteringFrame(wx.Frame): self.back_and_forth_checkbox.SetValue(self.settings.back_and_forth) self.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("back_and_forth", event)) + self.trim_checkbox = wx.CheckBox(self, label=_("Add trims")) + self.trim_checkbox.SetValue(bool(self.settings.trim)) + self.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("trim", event)) + # text editor self.text_editor_box = wx.StaticBox(self, wx.ID_ANY, label=_("Text")) @@ -86,15 +90,16 @@ class LetteringFrame(wx.Frame): self.settings[attribute] = event.GetEventObject().GetValue() self.preview.update() - def generate_patches(self, abort_early=None): - patches = [] - + def update_lettering(self): font_path = os.path.join(get_bundled_dir("fonts"), self.settings.font) font = Font(font_path) + self.group[:] = font.render_text(self.settings.text, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) + + def generate_patches(self, abort_early=None): + patches = [] try: - lines = font.render_text(self.settings.text, back_and_forth=self.settings.back_and_forth) - self.group[:] = lines + self.update_lettering() elements = nodes_to_elements(self.group.iterdescendants(SVG_PATH_TAG)) for element in elements: @@ -131,7 +136,7 @@ class LetteringFrame(wx.Frame): def apply(self, event): self.preview.disable() - self.generate_patches() + self.update_lettering() self.save_settings() self.close() -- cgit v1.2.3 From aea7b846a2841b587cffe4a31622a79584868caa Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Mon, 7 Jan 2019 19:55:05 -0500 Subject: correct for viewbox --- lib/extensions/lettering.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index fd9c7628..60b4e1f3 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -12,6 +12,7 @@ from ..elements import nodes_to_elements from ..gui import PresetsPanel, SimulatorPreview from ..i18n import _ from ..lettering import Font +from ..svg import get_correction_transform from ..svg.tags import SVG_PATH_TAG, SVG_GROUP_TAG, INKSCAPE_LABEL, INKSTITCH_LETTERING from ..utils import get_bundled_dir, DotDict from .commands import CommandsExtension @@ -215,7 +216,8 @@ class Lettering(CommandsExtension): else: self.ensure_current_layer() return inkex.etree.SubElement(self.current_layer, SVG_GROUP_TAG, { - INKSCAPE_LABEL: _("Ink/Stitch Lettering") + INKSCAPE_LABEL: _("Ink/Stitch Lettering"), + "transform": get_correction_transform(self.current_layer, child=True) }) def effect(self): -- cgit v1.2.3 From 602f201cb6236a7cb4a041b84e761aaedc358ab0 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Wed, 6 Mar 2019 20:32:51 -0500 Subject: implement trim option for lettering --- lib/extensions/lettering.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index 60b4e1f3..3718b5ab 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -37,11 +37,11 @@ class LetteringFrame(wx.Frame): self.back_and_forth_checkbox = wx.CheckBox(self, label=_("Stitch lines of text back and forth")) self.back_and_forth_checkbox.SetValue(self.settings.back_and_forth) - self.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("back_and_forth", event)) + self.back_and_forth_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("back_and_forth", event)) self.trim_checkbox = wx.CheckBox(self, label=_("Add trims")) self.trim_checkbox.SetValue(bool(self.settings.trim)) - self.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("trim", event)) + self.trim_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("trim", event)) # text editor self.text_editor_box = wx.StaticBox(self, wx.ID_ANY, label=_("Text")) @@ -94,7 +94,8 @@ class LetteringFrame(wx.Frame): def update_lettering(self): font_path = os.path.join(get_bundled_dir("fonts"), self.settings.font) font = Font(font_path) - self.group[:] = font.render_text(self.settings.text, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) + del self.group[:] + font.render_text(self.settings.text, self.group, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) def generate_patches(self, abort_early=None): patches = [] @@ -155,7 +156,8 @@ class LetteringFrame(wx.Frame): outer_sizer = wx.BoxSizer(wx.VERTICAL) options_sizer = wx.StaticBoxSizer(self.options_box, wx.VERTICAL) - options_sizer.Add(self.back_and_forth_checkbox, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT | wx.BOTTOM, 10) + options_sizer.Add(self.back_and_forth_checkbox, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 5) + options_sizer.Add(self.trim_checkbox, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT | wx.BOTTOM, 5) outer_sizer.Add(options_sizer, 0, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) text_editor_sizer = wx.StaticBoxSizer(self.text_editor_box, wx.VERTICAL) -- cgit v1.2.3 From 55505369496c0986e54fe5722e7e8ddce0a9294e Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Mon, 25 Mar 2019 19:40:37 -0400 Subject: implement font chooser --- lib/extensions/lettering.py | 69 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 10 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index 3718b5ab..a33277df 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -5,20 +5,23 @@ import json import os import sys +import appdirs import inkex import wx from ..elements import nodes_to_elements -from ..gui import PresetsPanel, SimulatorPreview +from ..gui import PresetsPanel, SimulatorPreview, info_dialog from ..i18n import _ -from ..lettering import Font +from ..lettering import Font, FontError from ..svg import get_correction_transform from ..svg.tags import SVG_PATH_TAG, SVG_GROUP_TAG, INKSCAPE_LABEL, INKSTITCH_LETTERING -from ..utils import get_bundled_dir, DotDict +from ..utils import get_bundled_dir, DotDict, cache from .commands import CommandsExtension class LetteringFrame(wx.Frame): + DEFAULT_FONT = "small_font" + def __init__(self, *args, **kwargs): # begin wxGlade: MyFrame.__init__ self.group = kwargs.pop('group') @@ -46,8 +49,9 @@ class LetteringFrame(wx.Frame): # text editor self.text_editor_box = wx.StaticBox(self, wx.ID_ANY, label=_("Text")) - self.font_chooser = wx.ComboBox(self, wx.ID_ANY) + self.font_chooser = wx.ComboBox(self, wx.ID_ANY, style=wx.CB_READONLY) self.update_font_list() + self.set_initial_font(self.settings.font) self.text_editor = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_DONTWRAP, value=self.settings.text) self.Bind(wx.EVT_TEXT, lambda event: self.on_change("text", event)) @@ -73,7 +77,7 @@ class LetteringFrame(wx.Frame): self.settings = DotDict({ "text": u"", "back_and_forth": True, - "font": "small_font" + "font": None }) def save_settings(self): @@ -87,13 +91,61 @@ class LetteringFrame(wx.Frame): # https://bugs.launchpad.net/inkscape/+bug/1804346 self.group.set(INKSTITCH_LETTERING, b64encode(json.dumps(self.settings))) + def update_font_list(self): + font_paths = { + get_bundled_dir("fonts"), + os.path.expanduser("~/.inkstitch/fonts"), + os.path.join(appdirs.user_config_dir('inkstitch'), 'fonts'), + } + + self.fonts = {} + self.fonts_by_id = {} + + for font_path in font_paths: + try: + font_dirs = os.listdir(font_path) + except OSError: + continue + + try: + for font_dir in font_dirs: + font = Font(os.path.join(font_path, font_dir)) + self.fonts[font.name] = font + self.fonts_by_id[font.id] = font + except FontError: + pass + + self.font_chooser.SetItems(sorted(self.fonts)) + + if len(self.fonts) == 0: + info_dialog(self, _("Unable to find any fonts! Please try reinstalling Ink/Stitch.")) + self.cancel() + + def set_initial_font(self, font_id): + if font_id is not None: + if font_id not in self.fonts_by_id: + info_dialog(self, _( + '''This text was created using the font "%s", but Ink/Stitch can't find that font. A default font will be substituted.''') % font_id) + + try: + self.font_chooser.SetValue(self.fonts_by_id[font_id].name) + except KeyError: + self.font_chooser.SetValue(self.default_font.name) + + @property + @cache + def default_font(self): + try: + return self.fonts[self.DEFAULT_FONT] + except KeyError: + return self.fonts.values()[0] + def on_change(self, attribute, event): self.settings[attribute] = event.GetEventObject().GetValue() self.preview.update() def update_lettering(self): - font_path = os.path.join(get_bundled_dir("fonts"), self.settings.font) - font = Font(font_path) + font = self.fonts_by_id.get(self.settings.font, self.default_font) del self.group[:] font.render_text(self.settings.text, self.group, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) @@ -120,9 +172,6 @@ class LetteringFrame(wx.Frame): return patches - def update_font_list(self): - pass - def get_preset_data(self): # called by self.presets_panel preset = {} -- cgit v1.2.3 From a9cf553066c3fd5b907593751bb00f77f32ce86a Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Tue, 2 Apr 2019 22:36:54 -0400 Subject: add font description to font selector dropdown --- lib/extensions/lettering.py | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index a33277df..74d036cf 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -10,7 +10,7 @@ import inkex import wx from ..elements import nodes_to_elements -from ..gui import PresetsPanel, SimulatorPreview, info_dialog +from ..gui import PresetsPanel, SimulatorPreview, info_dialog, SubtitleComboBox from ..i18n import _ from ..lettering import Font, FontError from ..svg import get_correction_transform @@ -49,8 +49,10 @@ class LetteringFrame(wx.Frame): # text editor self.text_editor_box = wx.StaticBox(self, wx.ID_ANY, label=_("Text")) - self.font_chooser = wx.ComboBox(self, wx.ID_ANY, style=wx.CB_READONLY) self.update_font_list() + self.font_chooser = SubtitleComboBox(self, wx.ID_ANY, choices=self.get_font_names(), + subtitles=self.get_font_descriptions(), style=wx.CB_READONLY) + self.font_chooser.Bind(wx.EVT_COMBOBOX, self.update_preview) self.set_initial_font(self.settings.font) self.text_editor = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_DONTWRAP, value=self.settings.text) @@ -115,12 +117,19 @@ class LetteringFrame(wx.Frame): except FontError: pass - self.font_chooser.SetItems(sorted(self.fonts)) - if len(self.fonts) == 0: info_dialog(self, _("Unable to find any fonts! Please try reinstalling Ink/Stitch.")) self.cancel() + def get_font_names(self): + font_names = [font.name for font in self.fonts.itervalues()] + font_names.sort() + + return font_names + + def get_font_descriptions(self): + return {font.name: font.description for font in self.fonts.itervalues()} + def set_initial_font(self, font_id): if font_id is not None: if font_id not in self.fonts_by_id: @@ -128,9 +137,9 @@ class LetteringFrame(wx.Frame): '''This text was created using the font "%s", but Ink/Stitch can't find that font. A default font will be substituted.''') % font_id) try: - self.font_chooser.SetValue(self.fonts_by_id[font_id].name) + self.font_chooser.SetValueByUser(self.fonts_by_id[font_id].name) except KeyError: - self.font_chooser.SetValue(self.default_font.name) + self.font_chooser.SetValueByUser(self.default_font.name) @property @cache @@ -144,8 +153,11 @@ class LetteringFrame(wx.Frame): self.settings[attribute] = event.GetEventObject().GetValue() self.preview.update() + def update_preview(self, event=None): + self.preview.update() + def update_lettering(self): - font = self.fonts_by_id.get(self.settings.font, self.default_font) + font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) del self.group[:] font.render_text(self.settings.text, self.group, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) @@ -209,8 +221,11 @@ class LetteringFrame(wx.Frame): options_sizer.Add(self.trim_checkbox, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT | wx.BOTTOM, 5) outer_sizer.Add(options_sizer, 0, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) + font_chooser_sizer = wx.BoxSizer(wx.VERTICAL) + font_chooser_sizer.Add(self.font_chooser, 0, wx.ALL | wx.EXPAND, 10) + text_editor_sizer = wx.StaticBoxSizer(self.text_editor_box, wx.VERTICAL) - text_editor_sizer.Add(self.font_chooser, 0, wx.ALL, 10) + text_editor_sizer.Add(font_chooser_sizer, 0, wx.RIGHT | wx.EXPAND, 100) text_editor_sizer.Add(self.text_editor, 1, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10) outer_sizer.Add(text_editor_sizer, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) -- cgit v1.2.3 From 6c5e57d39c9a72a9a56acc3b7ffe93e67f38ecb1 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Tue, 2 Apr 2019 23:39:54 -0400 Subject: implement lettering presets --- lib/extensions/lettering.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index 74d036cf..9193a723 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -33,17 +33,13 @@ class LetteringFrame(wx.Frame): self.preview = SimulatorPreview(self, target_duration=1) self.presets_panel = PresetsPanel(self) - self.load_settings() - # options self.options_box = wx.StaticBox(self, wx.ID_ANY, label=_("Options")) self.back_and_forth_checkbox = wx.CheckBox(self, label=_("Stitch lines of text back and forth")) - self.back_and_forth_checkbox.SetValue(self.settings.back_and_forth) self.back_and_forth_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("back_and_forth", event)) self.trim_checkbox = wx.CheckBox(self, label=_("Add trims")) - self.trim_checkbox.SetValue(bool(self.settings.trim)) self.trim_checkbox.Bind(wx.EVT_CHECKBOX, lambda event: self.on_change("trim", event)) # text editor @@ -53,10 +49,9 @@ class LetteringFrame(wx.Frame): self.font_chooser = SubtitleComboBox(self, wx.ID_ANY, choices=self.get_font_names(), subtitles=self.get_font_descriptions(), style=wx.CB_READONLY) self.font_chooser.Bind(wx.EVT_COMBOBOX, self.update_preview) - self.set_initial_font(self.settings.font) - self.text_editor = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_DONTWRAP, value=self.settings.text) - self.Bind(wx.EVT_TEXT, lambda event: self.on_change("text", event)) + self.text_editor = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_DONTWRAP) + self.text_editor.Bind(wx.EVT_TEXT, lambda event: self.on_change("text", event)) self.cancel_button = wx.Button(self, wx.ID_ANY, _("Cancel")) self.cancel_button.Bind(wx.EVT_BUTTON, self.cancel) @@ -66,9 +61,12 @@ class LetteringFrame(wx.Frame): self.apply_button.Bind(wx.EVT_BUTTON, self.apply) self.__do_layout() - # end wxGlade + + self.load_settings() + self.apply_settings() def load_settings(self): + """Load the settings saved into the SVG group element""" try: if INKSTITCH_LETTERING in self.group.attrib: self.settings = DotDict(json.loads(b64decode(self.group.get(INKSTITCH_LETTERING)))) @@ -82,7 +80,16 @@ class LetteringFrame(wx.Frame): "font": None }) + def apply_settings(self): + """Make the settings in self.settings visible in the UI.""" + self.back_and_forth_checkbox.SetValue(self.settings.back_and_forth) + self.trim_checkbox.SetValue(bool(self.settings.trim)) + self.set_initial_font(self.settings.font) + self.text_editor.SetValue(self.settings.text) + def save_settings(self): + """Save the settings into the SVG group element.""" + # We base64 encode the string before storing it in an XML attribute. # In theory, lxml should properly html-encode the string, using HTML # entities like as necessary. However, we've found that Inkscape @@ -186,12 +193,15 @@ class LetteringFrame(wx.Frame): def get_preset_data(self): # called by self.presets_panel - preset = {} - return preset - - def apply_preset_data(self): - # called by self.presets_panel - return + settings = dict(self.settings) + del settings["text"] + return settings + + def apply_preset_data(self, preset_data): + settings = DotDict(preset_data) + settings["text"] = self.settings.text + self.settings = settings + self.apply_settings() def get_preset_suite_name(self): # called by self.presets_panel -- cgit v1.2.3 From 98e59f255039911a4c1cc009325f7b30839cafdd Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Wed, 10 Apr 2019 20:23:11 -0400 Subject: add support for scaling text --- lib/extensions/lettering.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index 9193a723..428bb0ca 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -48,7 +48,10 @@ class LetteringFrame(wx.Frame): self.update_font_list() self.font_chooser = SubtitleComboBox(self, wx.ID_ANY, choices=self.get_font_names(), subtitles=self.get_font_descriptions(), style=wx.CB_READONLY) - self.font_chooser.Bind(wx.EVT_COMBOBOX, self.update_preview) + self.font_chooser.Bind(wx.EVT_COMBOBOX, self.on_font_changed) + + self.scale_spinner = wx.SpinCtrl(self, wx.ID_ANY, min=100, max=100, initial=100) + self.scale_spinner.Bind(wx.EVT_SPINCTRL, lambda event: self.on_change("scale", event)) self.text_editor = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_DONTWRAP) self.text_editor.Bind(wx.EVT_TEXT, lambda event: self.on_change("text", event)) @@ -77,7 +80,8 @@ class LetteringFrame(wx.Frame): self.settings = DotDict({ "text": u"", "back_and_forth": True, - "font": None + "font": None, + "scale": 100 }) def apply_settings(self): @@ -86,6 +90,7 @@ class LetteringFrame(wx.Frame): self.trim_checkbox.SetValue(bool(self.settings.trim)) self.set_initial_font(self.settings.font) self.text_editor.SetValue(self.settings.text) + self.scale_spinner.SetValue(self.settings.scale) def save_settings(self): """Save the settings into the SVG group element.""" @@ -148,6 +153,8 @@ class LetteringFrame(wx.Frame): except KeyError: self.font_chooser.SetValueByUser(self.default_font.name) + self.on_font_changed() + @property @cache def default_font(self): @@ -160,14 +167,24 @@ class LetteringFrame(wx.Frame): self.settings[attribute] = event.GetEventObject().GetValue() self.preview.update() + def on_font_changed(self, event=None): + font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) + self.scale_spinner.SetRange(int(font.min_scale * 100), int(font.max_scale * 100)) + self.update_preview() + def update_preview(self, event=None): self.preview.update() def update_lettering(self): - font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) del self.group[:] + self.group.attrib.pop('transform', None) + + font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) font.render_text(self.settings.text, self.group, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) + if self.settings.scale != 100: + self.group.attrib['transform'] = 'scale(%s)' % (self.settings.scale / 100.0) + def generate_patches(self, abort_early=None): patches = [] @@ -231,11 +248,14 @@ class LetteringFrame(wx.Frame): options_sizer.Add(self.trim_checkbox, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT | wx.BOTTOM, 5) outer_sizer.Add(options_sizer, 0, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) - font_chooser_sizer = wx.BoxSizer(wx.VERTICAL) - font_chooser_sizer.Add(self.font_chooser, 0, wx.ALL | wx.EXPAND, 10) + font_sizer = wx.BoxSizer(wx.HORIZONTAL) + font_sizer.Add(self.font_chooser, 1, wx.EXPAND, 0) + font_sizer.Add(wx.StaticText(self, wx.ID_ANY, "Scale"), 0, wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, 20) + font_sizer.Add(self.scale_spinner, 0, wx.LEFT, 10) + font_sizer.Add(wx.StaticText(self, wx.ID_ANY, "%"), 0, wx.LEFT | wx.ALIGN_CENTRE_VERTICAL, 3) text_editor_sizer = wx.StaticBoxSizer(self.text_editor_box, wx.VERTICAL) - text_editor_sizer.Add(font_chooser_sizer, 0, wx.RIGHT | wx.EXPAND, 100) + text_editor_sizer.Add(font_sizer, 0, wx.ALL | wx.EXPAND, 10) text_editor_sizer.Add(self.text_editor, 1, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 10) outer_sizer.Add(text_editor_sizer, 1, wx.EXPAND | wx.LEFT | wx.TOP | wx.RIGHT, 10) -- cgit v1.2.3 From 313cd44483bf216c123e19dfb3dd294eb57a9c3d Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Mon, 15 Apr 2019 20:26:30 -0400 Subject: don't overwrite user's positioning of text when re-editing --- lib/extensions/lettering.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index 428bb0ca..e6b828a8 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -177,13 +177,22 @@ class LetteringFrame(wx.Frame): def update_lettering(self): del self.group[:] - self.group.attrib.pop('transform', None) + + if self.settings.scale == 100: + destination_group = self.group + else: + destination_group = inkex.etree.SubElement(self.group, SVG_GROUP_TAG, { + # L10N The user has chosen to scale the text by some percentage + # (50%, 200%, etc). If you need to use the percentage symbol, + # make sure to double it (%%). + INKSCAPE_LABEL: _("Text scale %s%%") % self.settings.scale + }) font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) - font.render_text(self.settings.text, self.group, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) + font.render_text(self.settings.text, destination_group, back_and_forth=self.settings.back_and_forth, trim=self.settings.trim) if self.settings.scale != 100: - self.group.attrib['transform'] = 'scale(%s)' % (self.settings.scale / 100.0) + destination_group.attrib['transform'] = 'scale(%s)' % (self.settings.scale / 100.0) def generate_patches(self, abort_early=None): patches = [] -- cgit v1.2.3 From fee43e0941b11c709d7ae23fcd4bee4cd89d2a55 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Thu, 18 Apr 2019 11:35:29 -0400 Subject: fix parameter management --- lib/extensions/lettering.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index e6b828a8..17435492 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -70,12 +70,6 @@ class LetteringFrame(wx.Frame): def load_settings(self): """Load the settings saved into the SVG group element""" - try: - if INKSTITCH_LETTERING in self.group.attrib: - self.settings = DotDict(json.loads(b64decode(self.group.get(INKSTITCH_LETTERING)))) - return - except (TypeError, ValueError): - pass self.settings = DotDict({ "text": u"", @@ -84,9 +78,16 @@ class LetteringFrame(wx.Frame): "scale": 100 }) + try: + if INKSTITCH_LETTERING in self.group.attrib: + self.settings.update(json.loads(b64decode(self.group.get(INKSTITCH_LETTERING)))) + return + except (TypeError, ValueError): + pass + def apply_settings(self): """Make the settings in self.settings visible in the UI.""" - self.back_and_forth_checkbox.SetValue(self.settings.back_and_forth) + self.back_and_forth_checkbox.SetValue(bool(self.settings.back_and_forth)) self.trim_checkbox.SetValue(bool(self.settings.trim)) self.set_initial_font(self.settings.font) self.text_editor.SetValue(self.settings.text) @@ -143,7 +144,7 @@ class LetteringFrame(wx.Frame): return {font.name: font.description for font in self.fonts.itervalues()} def set_initial_font(self, font_id): - if font_id is not None: + if font_id: if font_id not in self.fonts_by_id: info_dialog(self, _( '''This text was created using the font "%s", but Ink/Stitch can't find that font. A default font will be substituted.''') % font_id) @@ -169,6 +170,7 @@ class LetteringFrame(wx.Frame): def on_font_changed(self, event=None): font = self.fonts.get(self.font_chooser.GetValue(), self.default_font) + self.settings.font = font.id self.scale_spinner.SetRange(int(font.min_scale * 100), int(font.max_scale * 100)) self.update_preview() -- cgit v1.2.3 From b307b8e8247678a4bf128ded80a9bfd7b9b54c81 Mon Sep 17 00:00:00 2001 From: Lex Neva Date: Sat, 20 Apr 2019 22:01:58 -0400 Subject: fix style --- lib/extensions/lettering.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/extensions/lettering.py') diff --git a/lib/extensions/lettering.py b/lib/extensions/lettering.py index 17435492..a2a729b5 100644 --- a/lib/extensions/lettering.py +++ b/lib/extensions/lettering.py @@ -146,8 +146,9 @@ class LetteringFrame(wx.Frame): def set_initial_font(self, font_id): if font_id: if font_id not in self.fonts_by_id: - info_dialog(self, _( - '''This text was created using the font "%s", but Ink/Stitch can't find that font. A default font will be substituted.''') % font_id) + message = '''This text was created using the font "%s", but Ink/Stitch can't find that font. ''' \ + '''A default font will be substituted.''' + info_dialog(self, _(message) % font_id) try: self.font_chooser.SetValueByUser(self.fonts_by_id[font_id].name) -- cgit v1.2.3