kopia lustrzana https://github.com/inkstitch/inkstitch
mark custom fonts (#1159)
rodzic
2f35a4a192
commit
37c76aafba
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 19 KiB |
|
@ -13,8 +13,6 @@ import inkex
|
||||||
import wx
|
import wx
|
||||||
import wx.adv
|
import wx.adv
|
||||||
|
|
||||||
from .commands import CommandsExtension
|
|
||||||
from .lettering_custom_font_dir import get_custom_font_dir
|
|
||||||
from ..elements import nodes_to_elements
|
from ..elements import nodes_to_elements
|
||||||
from ..gui import PresetsPanel, SimulatorPreview, info_dialog
|
from ..gui import PresetsPanel, SimulatorPreview, info_dialog
|
||||||
from ..i18n import _
|
from ..i18n import _
|
||||||
|
@ -22,7 +20,9 @@ from ..lettering import Font, FontError
|
||||||
from ..svg import get_correction_transform
|
from ..svg import get_correction_transform
|
||||||
from ..svg.tags import (INKSCAPE_LABEL, INKSTITCH_LETTERING, SVG_GROUP_TAG,
|
from ..svg.tags import (INKSCAPE_LABEL, INKSTITCH_LETTERING, SVG_GROUP_TAG,
|
||||||
SVG_PATH_TAG)
|
SVG_PATH_TAG)
|
||||||
from ..utils import DotDict, cache, get_bundled_dir
|
from ..utils import DotDict, cache, get_bundled_dir, get_resource_dir
|
||||||
|
from .commands import CommandsExtension
|
||||||
|
from .lettering_custom_font_dir import get_custom_font_dir
|
||||||
|
|
||||||
|
|
||||||
class LetteringFrame(wx.Frame):
|
class LetteringFrame(wx.Frame):
|
||||||
|
@ -41,6 +41,9 @@ class LetteringFrame(wx.Frame):
|
||||||
_("Ink/Stitch Lettering")
|
_("Ink/Stitch Lettering")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
icon = wx.Icon(os.path.join(get_resource_dir("icons"), "inkstitch256x256.png"))
|
||||||
|
self.SetIcon(icon)
|
||||||
|
|
||||||
self.preview = SimulatorPreview(self, target_duration=1)
|
self.preview = SimulatorPreview(self, target_duration=1)
|
||||||
self.presets_panel = PresetsPanel(self)
|
self.presets_panel = PresetsPanel(self)
|
||||||
|
|
||||||
|
@ -139,10 +142,10 @@ class LetteringFrame(wx.Frame):
|
||||||
|
|
||||||
for font_dir in font_dirs:
|
for font_dir in font_dirs:
|
||||||
font = Font(os.path.join(font_path, font_dir))
|
font = Font(os.path.join(font_path, font_dir))
|
||||||
if font.name == "" or font.id == "":
|
if font.marked_custom_font_name == "" or font.marked_custom_font_id == "":
|
||||||
continue
|
continue
|
||||||
self.fonts[font.name] = font
|
self.fonts[font.marked_custom_font_name] = font
|
||||||
self.fonts_by_id[font.id] = font
|
self.fonts_by_id[font.marked_custom_font_id] = font
|
||||||
|
|
||||||
if len(self.fonts) == 0:
|
if len(self.fonts) == 0:
|
||||||
info_dialog(self, _("Unable to find any fonts! Please try reinstalling Ink/Stitch."))
|
info_dialog(self, _("Unable to find any fonts! Please try reinstalling Ink/Stitch."))
|
||||||
|
@ -151,6 +154,7 @@ class LetteringFrame(wx.Frame):
|
||||||
def set_font_list(self):
|
def set_font_list(self):
|
||||||
for font in self.fonts.values():
|
for font in self.fonts.values():
|
||||||
image = font.preview_image
|
image = font.preview_image
|
||||||
|
|
||||||
if image is not None:
|
if image is not None:
|
||||||
image = wx.Image(font.preview_image)
|
image = wx.Image(font.preview_image)
|
||||||
"""
|
"""
|
||||||
|
@ -166,16 +170,10 @@ class LetteringFrame(wx.Frame):
|
||||||
"""
|
"""
|
||||||
# Windows requires all images to have the exact same size
|
# Windows requires all images to have the exact same size
|
||||||
image.Rescale(300, 20, quality=wx.IMAGE_QUALITY_HIGH)
|
image.Rescale(300, 20, quality=wx.IMAGE_QUALITY_HIGH)
|
||||||
self.font_chooser.Append(font.name, wx.Bitmap(image))
|
self.font_chooser.Append(font.marked_custom_font_name, wx.Bitmap(image))
|
||||||
else:
|
else:
|
||||||
self.font_chooser.Append(font.name)
|
self.font_chooser.Append(font.name)
|
||||||
|
|
||||||
def get_font_names(self):
|
|
||||||
font_names = [font.name for font in self.fonts.values()]
|
|
||||||
font_names.sort()
|
|
||||||
|
|
||||||
return font_names
|
|
||||||
|
|
||||||
def get_font_descriptions(self):
|
def get_font_descriptions(self):
|
||||||
return {font.name: font.description for font in self.fonts.values()}
|
return {font.name: font.description for font in self.fonts.values()}
|
||||||
|
|
||||||
|
@ -186,9 +184,11 @@ class LetteringFrame(wx.Frame):
|
||||||
'''A default font will be substituted.'''
|
'''A default font will be substituted.'''
|
||||||
info_dialog(self, _(message) % font_id)
|
info_dialog(self, _(message) % font_id)
|
||||||
try:
|
try:
|
||||||
self.font_chooser.SetValue(self.fonts_by_id[font_id].name)
|
font = self.fonts_by_id[font_id].marked_custom_font_name
|
||||||
except KeyError:
|
except KeyError:
|
||||||
self.font_chooser.SetValue(self.default_font.name)
|
font = self.default_font.name
|
||||||
|
self.font_chooser.SetValue(font)
|
||||||
|
|
||||||
self.on_font_changed()
|
self.on_font_changed()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -205,7 +205,7 @@ class LetteringFrame(wx.Frame):
|
||||||
|
|
||||||
def on_font_changed(self, event=None):
|
def on_font_changed(self, event=None):
|
||||||
font = self.fonts.get(self.font_chooser.GetValue(), self.default_font)
|
font = self.fonts.get(self.font_chooser.GetValue(), self.default_font)
|
||||||
self.settings.font = font.id
|
self.settings.font = font.marked_custom_font_id
|
||||||
self.scale_spinner.SetRange(int(font.min_scale * 100), int(font.max_scale * 100))
|
self.scale_spinner.SetRange(int(font.min_scale * 100), int(font.max_scale * 100))
|
||||||
|
|
||||||
font_variants = []
|
font_variants = []
|
||||||
|
|
|
@ -341,6 +341,10 @@ class SettingsFrame(wx.Frame):
|
||||||
wx.Frame.__init__(self, None, wx.ID_ANY,
|
wx.Frame.__init__(self, None, wx.ID_ANY,
|
||||||
_("Embroidery Params")
|
_("Embroidery Params")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
icon = wx.Icon(os.path.join(get_resource_dir("icons"), "inkstitch256x256.png"))
|
||||||
|
self.SetIcon(icon)
|
||||||
|
|
||||||
self.notebook = wx.Notebook(self, wx.ID_ANY)
|
self.notebook = wx.Notebook(self, wx.ID_ANY)
|
||||||
self.tabs = self.tabs_factory(self.notebook)
|
self.tabs = self.tabs_factory(self.notebook)
|
||||||
|
|
||||||
|
|
|
@ -9,13 +9,14 @@ from copy import deepcopy
|
||||||
|
|
||||||
import inkex
|
import inkex
|
||||||
|
|
||||||
from .font_variant import FontVariant
|
|
||||||
from ..elements import nodes_to_elements
|
from ..elements import nodes_to_elements
|
||||||
from ..exceptions import InkstitchException
|
from ..exceptions import InkstitchException
|
||||||
|
from ..extensions.lettering_custom_font_dir import get_custom_font_dir
|
||||||
from ..i18n import _, get_languages
|
from ..i18n import _, get_languages
|
||||||
from ..stitches.auto_satin import auto_satin
|
from ..stitches.auto_satin import auto_satin
|
||||||
from ..svg.tags import INKSCAPE_LABEL, SVG_PATH_TAG
|
from ..svg.tags import INKSCAPE_LABEL, SVG_PATH_TAG
|
||||||
from ..utils import Point
|
from ..utils import Point
|
||||||
|
from .font_variant import FontVariant
|
||||||
|
|
||||||
|
|
||||||
class FontError(InkstitchException):
|
class FontError(InkstitchException):
|
||||||
|
@ -157,6 +158,23 @@ class Font(object):
|
||||||
raise FontError(_("The font '%s' has no variants.") % self.name)
|
raise FontError(_("The font '%s' has no variants.") % self.name)
|
||||||
return font_variants
|
return font_variants
|
||||||
|
|
||||||
|
@property
|
||||||
|
def marked_custom_font_id(self):
|
||||||
|
if not self.is_custom_font():
|
||||||
|
return self.id
|
||||||
|
else:
|
||||||
|
return self.id + '*'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def marked_custom_font_name(self):
|
||||||
|
if not self.is_custom_font():
|
||||||
|
return self.name
|
||||||
|
else:
|
||||||
|
return self.name + '*'
|
||||||
|
|
||||||
|
def is_custom_font(self):
|
||||||
|
return get_custom_font_dir() in self.path
|
||||||
|
|
||||||
def render_text(self, text, destination_group, variant=None, back_and_forth=True, trim=False):
|
def render_text(self, text, destination_group, variant=None, back_and_forth=True, trim=False):
|
||||||
"""Render text into an SVG group element."""
|
"""Render text into an SVG group element."""
|
||||||
self._load_variants()
|
self._load_variants()
|
||||||
|
|
Ładowanie…
Reference in New Issue