add support for scaling text

pull/399/head
Lex Neva 2019-04-10 20:23:11 -04:00
rodzic 6c5e57d39c
commit 98e59f2550
3 zmienionych plików z 31 dodań i 7 usunięć

Wyświetl plik

@ -1,11 +1,13 @@
{
"name": "Ink/Stitch Small Font",
"description": "A font suited for small characters. The capital em is 0.2 inches wide.",
"description": "A font suited for small characters. The capital em is 0.2 inches wide at 100% scale. Can be scaled up to 300%.",
"leading": 8,
"letter_spacing": 1.5,
"word_spacing": 4.5,
"auto_satin": true,
"default_glyph": "<22>",
"min_scale": 1.0,
"max_scale": 3.0,
"kerning_pairs": {
"wo": -0.3
}

Wyświetl plik

@ -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)

Wyświetl plik

@ -107,6 +107,8 @@ class Font(object):
word_spacing = font_metadata('word_spacing', 3, multiplier=PIXELS_PER_MM)
kerning_pairs = font_metadata('kerning_pairs', {})
auto_satin = font_metadata('auto_satin', True)
min_scale = font_metadata('min_scale', 1.0)
max_scale = font_metadata('max_scale', 1.0)
@property
def id(self):