summaryrefslogtreecommitdiff
path: root/lib/gui/edit_json
diff options
context:
space:
mode:
authorKaalleen <36401965+kaalleen@users.noreply.github.com>2025-10-10 10:25:49 +0200
committerGitHub <noreply@github.com>2025-10-10 10:25:49 +0200
commit2c295ace644a27b7d1523c047e168aac2ead03dc (patch)
tree436f73eb6b788c3ac68fdda3b1e15fac27a8eef0 /lib/gui/edit_json
parent31cebe4228be707a1fe0a8727044fbc7271dd4b3 (diff)
Edit json: allow 0 values for horiz_adv_x_default (#3965)
* edit json: allow 0 values for horiz_adv_x_default and enable None for using the glyph width * enable None value in generate json too
Diffstat (limited to 'lib/gui/edit_json')
-rw-r--r--lib/gui/edit_json/editable_list.py2
-rw-r--r--lib/gui/edit_json/main_panel.py33
-rw-r--r--lib/gui/edit_json/settings_panel.py21
3 files changed, 43 insertions, 13 deletions
diff --git a/lib/gui/edit_json/editable_list.py b/lib/gui/edit_json/editable_list.py
index 8f62f554..7a51f0b6 100644
--- a/lib/gui/edit_json/editable_list.py
+++ b/lib/gui/edit_json/editable_list.py
@@ -24,12 +24,12 @@ class EditableListCtrl(wx.ListCtrl, TextEditMixin):
event.Skip()
def CloseEditor(self, event=None, swap=False):
- text = self.editor.GetValue()
if swap:
self.editor.Hide()
TextEditMixin.CloseEditor(self, event)
return
+ text = self.editor.GetValue()
if text:
try:
float(text)
diff --git a/lib/gui/edit_json/main_panel.py b/lib/gui/edit_json/main_panel.py
index bd43f523..7cf82ab7 100644
--- a/lib/gui/edit_json/main_panel.py
+++ b/lib/gui/edit_json/main_panel.py
@@ -125,12 +125,25 @@ class LetteringEditJsonPanel(wx.Panel):
event.Skip()
def on_horiz_adv_x_default_changed(self, event=None):
- self.font_meta['horiz_adv_x_default'] = event.GetValue()
+ value = event.GetValue()
+ if not self.settings_panel.font_kerning.horiz_adv_x_default_null_checkbox.IsChecked():
+ self.update_horiz_adv_x_default(value)
+
+ def on_horiz_adv_x_default_checkbox_changed(self, event=None):
+ value = event.IsChecked()
+ if value is False:
+ value = self.settings_panel.font_kerning.horiz_adv_x_default.GetValue()
+ else:
+ value = None
+ self.update_horiz_adv_x_default(value)
+
+ def update_horiz_adv_x_default(self, value):
+ self.font_meta['horiz_adv_x_default'] = value
glyph_list = self.settings_panel.glyph_list
for i in range(glyph_list.ItemCount):
- selected = glyph_list.IsItemChecked(i)
+ checked = glyph_list.IsItemChecked(i)
glyph = glyph_list.GetItem(i, 1).Text
- if selected:
+ if checked:
self.horiz_adv_x[glyph] = self.font_meta['horiz_adv_x_default']
self.update_preview()
@@ -341,8 +354,10 @@ class LetteringEditJsonPanel(wx.Panel):
self.settings_panel.font_kerning.min_scale.SetValue(self.font.min_scale)
if self.font.horiz_adv_x_default is None:
self.settings_panel.font_kerning.horiz_adv_x_default.SetValue(0.0)
+ self.settings_panel.font_kerning.horiz_adv_x_default_null_checkbox.SetValue(True)
else:
self.settings_panel.font_kerning.horiz_adv_x_default.SetValue(self.font.horiz_adv_x_default)
+ self.settings_panel.font_kerning.horiz_adv_x_default_null_checkbox.SetValue(False)
self.settings_panel.font_kerning.horiz_adv_x_space.SetValue(self.font.word_spacing)
def update_filter_list(self):
@@ -423,13 +438,9 @@ class LetteringEditJsonPanel(wx.Panel):
with open(json_file, 'r') as font_data:
data = json.load(font_data)
- horiz_adv_x_default = self.font_meta['horiz_adv_x_default']
- if horiz_adv_x_default == 0:
- horiz_adv_x_default = None
-
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_meta['horiz_adv_x_default']}
+ horiz_adv_x = {key: val for key, val in self.horiz_adv_x.items() if key and 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
@@ -514,12 +525,14 @@ class LetteringEditJsonPanel(wx.Panel):
node.set('transform', transform)
horiz_adv_x_default = self.font_meta['horiz_adv_x_default']
- if horiz_adv_x_default in [0, None]:
+ if horiz_adv_x_default is None:
horiz_adv_x_default = glyph.width + glyph.min_x
+ horiz_adv_x = self.font.horiz_adv_x.get(character, horiz_adv_x_default)
# in some rare cases, horiz_adv_x for a character returns None
# so we need to really ensure that the default is used in this case
- horiz_adv_x = self.font.horiz_adv_x.get(character, horiz_adv_x_default) or horiz_adv_x_default
+ if horiz_adv_x is None:
+ horiz_adv_x = horiz_adv_x_default
position_x += horiz_adv_x - glyph.min_x
self.font._update_commands(node, glyph)
diff --git a/lib/gui/edit_json/settings_panel.py b/lib/gui/edit_json/settings_panel.py
index b4fd51d9..a16ac53a 100644
--- a/lib/gui/edit_json/settings_panel.py
+++ b/lib/gui/edit_json/settings_panel.py
@@ -201,7 +201,7 @@ class GeneralKerning(wx.Panel):
wx.Panel.__init__(self, parent)
sizer = wx.BoxSizer(wx.VERTICAL)
- grid_sizer = wx.FlexGridSizer(20, 2, 10, 10)
+ grid_sizer = wx.FlexGridSizer(20, 3, 10, 10)
grid_sizer.AddGrowableCol(1)
size_label = wx.StaticText(self, label=_("Size"))
@@ -236,6 +236,12 @@ class GeneralKerning(wx.Panel):
wx.EVT_SPINCTRLDOUBLE,
self.parent.on_horiz_adv_x_default_changed
)
+ self.horiz_adv_x_default_null_checkbox = wx.CheckBox(self, label=_("Glyph width"))
+ self.horiz_adv_x_default_null_checkbox.SetToolTip(_("Use the width of the individual glyphs."))
+ self.horiz_adv_x_default_null_checkbox.Bind(
+ wx.EVT_CHECKBOX,
+ self.parent.on_horiz_adv_x_default_checkbox_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)
self.horiz_adv_x_space.Bind(
@@ -246,16 +252,27 @@ class GeneralKerning(wx.Panel):
grid_sizer.AddMany([
(size_label, 0, wx.ALL, 0),
(self.size, 1, wx.ALL | wx.EXPAND, 0),
+ (wx.StaticText(self), 1, wx.ALL | wx.EXPAND, 0),
+
(min_scale_label, 0, wx.ALL, 0),
(self.min_scale, 1, wx.ALL | wx.EXPAND, 0),
+ (wx.StaticText(self), 1, wx.ALL | wx.EXPAND, 0),
+
(max_scale_label, 0, wx.ALL, 0),
(self.max_scale, 1, wx.ALL | wx.EXPAND, 0),
+ (wx.StaticText(self), 1, wx.ALL | wx.EXPAND, 0),
+
(leading_label, 0, wx.ALL, 0),
(self.leading, 1, wx.ALL | wx.EXPAND, 0),
+ (wx.StaticText(self), 1, wx.ALL | wx.EXPAND, 0),
+
(horiz_adv_x_default_label, 0, wx.ALL, 0),
(self.horiz_adv_x_default, 1, wx.ALL | wx.EXPAND, 0),
+ (self.horiz_adv_x_default_null_checkbox, 1, wx.ALL | wx.EXPAND, 0),
+
(horiz_adv_x_space_label, 0, wx.ALL, 0),
- (self.horiz_adv_x_space, 1, wx.ALL | wx.EXPAND, 0)
+ (self.horiz_adv_x_space, 1, wx.ALL | wx.EXPAND, 0),
+ (wx.StaticText(self), 1, wx.ALL | wx.EXPAND, 0)
])
sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 10)