summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/gui/edit_json/editable_list.py7
-rw-r--r--lib/gui/edit_json/main_panel.py73
-rw-r--r--lib/gui/edit_json/settings_panel.py11
3 files changed, 60 insertions, 31 deletions
diff --git a/lib/gui/edit_json/editable_list.py b/lib/gui/edit_json/editable_list.py
index 51026a0c..fc033597 100644
--- a/lib/gui/edit_json/editable_list.py
+++ b/lib/gui/edit_json/editable_list.py
@@ -4,14 +4,17 @@ from wx.lib.mixins.listctrl import TextEditMixin
class EditableListCtrl(wx.ListCtrl, TextEditMixin):
- def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0):
+ def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, editable_column=2):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
TextEditMixin.__init__(self)
+ self.editable_column = editable_column
def OpenEditor(self, column, row):
self.original_data = self.GetItemText(row, column)
- if column == 2:
+ if column == self.editable_column:
TextEditMixin.OpenEditor(self, column, row)
+ if self.editable_column == 3 and column == 0:
+ self.CheckItem(row, not self.IsItemChecked(row))
self.editor.Bind(wx.EVT_KEY_DOWN, self.on_escape)
def on_escape(self, event=None):
diff --git a/lib/gui/edit_json/main_panel.py b/lib/gui/edit_json/main_panel.py
index 081300e9..473d8425 100644
--- a/lib/gui/edit_json/main_panel.py
+++ b/lib/gui/edit_json/main_panel.py
@@ -47,6 +47,8 @@ class LetteringEditJsonPanel(wx.Panel):
self.text_before = ''
self.text_after = ''
+ self.last_notebook_selection = 4
+
super().__init__(parent, wx.ID_ANY)
self.SetWindowStyle(wx.FRAME_FLOAT_ON_PARENT | wx.DEFAULT_FRAME_STYLE)
@@ -82,11 +84,22 @@ class LetteringEditJsonPanel(wx.Panel):
def on_kerning_update(self, event=None):
self.update_preview()
+ event.Skip()
def on_kerning_list_select(self, event=None):
self.update_preview()
event.Skip()
+ def on_horiz_adv_x_default_changed(self, event=None):
+ self.font_meta['horiz_adv_x_default'] = event.GetValue()
+ glyph_list = self.settings_panel.glyph_list
+ for i in range(glyph_list.ItemCount):
+ selected = glyph_list.IsItemChecked(i)
+ glyph = glyph_list.GetItem(i, 1).Text
+ if selected:
+ self.horiz_adv_x[glyph] = self.font_meta['horiz_adv_x_default']
+ self.update_preview()
+
def on_font_meta_value_changed(self, name, needs_update, event=None):
self.font_meta[name] = event.GetEventObject().GetValue()
if needs_update:
@@ -154,16 +167,26 @@ class LetteringEditJsonPanel(wx.Panel):
pass
return kerning_pair
- def get_active_glyph(self):
+ def on_glyph_item_checked(self, event=None):
+ self.get_active_glyph(event.Index)
+ self.update_preview()
+
+ def get_active_glyph(self, index=None):
glyph_list = self.settings_panel.glyph_list
- selection = glyph_list.GetFirstSelected()
+ if index is not None:
+ selection = index
+ else:
+ selection = glyph_list.GetFirstSelected()
if selection == -1:
return ''
- glyph = glyph_list.GetItem(selection, 0).Text
- horiz_adv_x = float(glyph_list.GetItem(selection, 1).Text)
- if glyph_list.GetItem(selection, 2).Text:
+ glyph = glyph_list.GetItem(selection, 1).Text
+ if glyph_list.IsItemChecked(selection):
+ self.horiz_adv_x[glyph] = self.font_meta['horiz_adv_x_default']
+ return glyph
+ horiz_adv_x = float(glyph_list.GetItem(selection, 2).Text)
+ if glyph_list.GetItem(selection, 3).Text:
try:
- horiz_adv_x = float(glyph_list.GetItem(selection, 2).Text)
+ horiz_adv_x = float(glyph_list.GetItem(selection, 3).Text)
self.horiz_adv_x[glyph] = float(horiz_adv_x)
except (ValueError, IndexError):
pass
@@ -175,6 +198,7 @@ class LetteringEditJsonPanel(wx.Panel):
self.font._load_variants()
self.default_variant = self.font.variants[self.font.default_variant]
self.glyphs = list(self.default_variant.glyphs.keys())
+ self.glyphs.sort()
self.horiz_adv_x = self.font.horiz_adv_x
kerning_combinations = combinations_with_replacement(self.glyphs, 2)
@@ -235,13 +259,9 @@ class LetteringEditJsonPanel(wx.Panel):
# Add the rows
kerning_list.ClearAll()
# Add some columns
- kerning_list.InsertColumn(0, "Kerning pair")
- kerning_list.InsertColumn(1, "Current kerning")
- kerning_list.InsertColumn(2, "New kerning")
- # Set the width of the columns
- kerning_list.SetColumnWidth(0, 120)
- kerning_list.SetColumnWidth(1, 120)
- kerning_list.SetColumnWidth(2, 120)
+ kerning_list.AppendColumn("Kerning pair", width=wx.LIST_AUTOSIZE_USEHEADER)
+ kerning_list.AppendColumn("Current kerning", width=wx.LIST_AUTOSIZE_USEHEADER)
+ kerning_list.AppendColumn("New kerning", width=wx.LIST_AUTOSIZE_USEHEADER)
for kerning_pair in self.kerning_combinations:
index = kerning_list.InsertItem(kerning_list.GetItemCount(), kerning_pair)
kerning_list.SetItem(index, 0, kerning_pair)
@@ -255,18 +275,18 @@ class LetteringEditJsonPanel(wx.Panel):
# Add the rows
glyph_list.ClearAll()
# Add some columns
- glyph_list.InsertColumn(0, "Glyph")
- glyph_list.InsertColumn(1, "Current horizontal advance")
- glyph_list.InsertColumn(2, "New horizontal advance")
- # Set the width of the columns
- glyph_list.SetColumnWidth(0, 120)
- glyph_list.SetColumnWidth(1, 120)
- glyph_list.SetColumnWidth(2, 120)
+ glyph_list.AppendColumn("Use default", width=wx.LIST_AUTOSIZE_USEHEADER)
+ glyph_list.AppendColumn("Glyph", width=wx.LIST_AUTOSIZE_USEHEADER)
+ glyph_list.AppendColumn("Current horizontal advance", width=wx.LIST_AUTOSIZE_USEHEADER)
+ glyph_list.AppendColumn("New horizontal advance", width=wx.LIST_AUTOSIZE_USEHEADER)
horiz_adv_x_default = self.font.horiz_adv_x_default
for glyph in self.glyphs:
- index = glyph_list.InsertItem(glyph_list.GetItemCount(), glyph)
- glyph_list.SetItem(index, 0, glyph)
- glyph_list.SetItem(index, 1, str(self.font.horiz_adv_x.get(glyph, horiz_adv_x_default)))
+ index = glyph_list.InsertItem(glyph_list.GetItemCount(), '')
+ horiz_adv = self.font.horiz_adv_x.get(glyph, horiz_adv_x_default)
+ if horiz_adv == horiz_adv_x_default:
+ glyph_list.CheckItem(index)
+ glyph_list.SetItem(index, 1, glyph)
+ glyph_list.SetItem(index, 2, str(horiz_adv))
if glyph_list.GetItemCount() != 0:
glyph_list.Select(0)
glyph_list.Focus(0)
@@ -283,7 +303,7 @@ class LetteringEditJsonPanel(wx.Panel):
for key, val in self.font_meta.items():
data[key] = val
- horiz_adv_x = {key: val for key, val in self.horiz_adv_x.items() if val != self.font.horiz_adv_x_default}
+ horiz_adv_x = {key: val for key, val in self.horiz_adv_x.items() if val != self.font_meta['horiz_adv_x_default']}
kerning_pairs = {key: val for key, val in self.kerning_pairs.items() if val != 0}
data['horiz_adv_x'] = horiz_adv_x
data['kerning_pairs'] = kerning_pairs
@@ -304,7 +324,10 @@ class LetteringEditJsonPanel(wx.Panel):
def update_lettering(self):
del self.layer[:]
- if self.settings_panel.notebook.GetSelection() == 3:
+ if self.settings_panel.notebook.GetSelection() in [3, 4]:
+ self.last_notebook_selection = self.settings_panel.notebook.GetSelection()
+
+ if self.last_notebook_selection == 3:
text = self.get_active_glyph()
else:
text = self.get_active_kerning_pair()
diff --git a/lib/gui/edit_json/settings_panel.py b/lib/gui/edit_json/settings_panel.py
index d600153b..3e9c8437 100644
--- a/lib/gui/edit_json/settings_panel.py
+++ b/lib/gui/edit_json/settings_panel.py
@@ -49,9 +49,9 @@ class SettingsPanel(wx.Panel):
self.font_kerning = GeneralKerning(self.notebook)
self.notebook.AddPage(self.font_kerning, _("General Kerning"))
- glyph_list = KerningPairs(self.notebook)
+ glyph_list = GlyphList(self.notebook)
self.notebook.AddPage(glyph_list, _("Horizontal advance"))
- self.glyph_list = glyph_list.kerning_list
+ self.glyph_list = glyph_list.glyph_list
kerning_pairs = KerningPairs(self.notebook)
self.notebook.AddPage(kerning_pairs, _("Kerning pairs"))
@@ -218,7 +218,7 @@ class GeneralKerning(wx.Panel):
self.horiz_adv_x_default = wx.SpinCtrlDouble(self, min=0, max=10000, inc=0.1, initial=50, style=wx.SP_WRAP)
self.horiz_adv_x_default.Bind(
wx.EVT_SPINCTRLDOUBLE,
- lambda event: self.parent.on_font_meta_value_changed("horiz_adv_x_default", True, event)
+ self.parent.on_horiz_adv_x_default_changed
)
horiz_adv_x_space_label = wx.StaticText(self, label=_("Horizontal advance x space"))
self.horiz_adv_x_space = wx.SpinCtrlDouble(self, min=0, max=10000, inc=0.1, initial=50, style=wx.SP_WRAP)
@@ -253,9 +253,12 @@ class GlyphList(wx.Panel):
sizer = wx.BoxSizer(wx.VERTICAL)
- self.glyph_list = EditableListCtrl(self, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
+ self.glyph_list = EditableListCtrl(self, style=wx.LC_REPORT | wx.SUNKEN_BORDER, editable_column=3)
self.glyph_list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.parent.on_kerning_list_select)
self.glyph_list.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.parent.on_kerning_update)
+ self.glyph_list.Bind(wx.EVT_LIST_ITEM_CHECKED, self.parent.on_glyph_item_checked)
+ self.glyph_list.Bind(wx.EVT_LIST_ITEM_UNCHECKED, self.parent.on_glyph_item_checked)
+ self.glyph_list.EnableCheckBoxes()
sizer.Add(self.glyph_list, 1, wx.EXPAND, 0)
self.SetSizer(sizer)