aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrien Tétar2015-10-31 17:01:25 +0100
committerAdrien Tétar2015-10-31 17:01:25 +0100
commit44e6a231125c4103d8dc8edbb200ce2f327f1e31 (patch)
treeb3050fbb8509ef54643f4567c0e9a9a6bec9edee
parent16c2f16dcdb17c997f2153a89a423c4e1ca86f79 (diff)
parent6f131223c6821651dbd97c0c6aaff8aa1e6b90b2 (diff)
downloadtrufont-44e6a231125c4103d8dc8edbb200ce2f327f1e31.tar.bz2
Merge pull request #104 from trufont/patch-11
Minor improvements throughout
-rw-r--r--Lib/defconQt/fontView.py53
-rw-r--r--Lib/defconQt/glyphView.py22
-rw-r--r--Lib/defconQt/objects/defcon.py8
3 files changed, 53 insertions, 30 deletions
diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py
index c33f8c3..198e8d9 100644
--- a/Lib/defconQt/fontView.py
+++ b/Lib/defconQt/fontView.py
@@ -938,14 +938,17 @@ class MainWindow(QMainWindow):
def _set_font(self, font):
if self._font is not None:
self._font.removeObserver(self, "Font.Changed")
+ self._font.removeObserver(self, "Font.GlyphOrderChanged")
self._font = font
self._font.addObserver(self, "_fontChanged", "Font.Changed")
- if "public.glyphOrder" in self._font.lib:
- self.sortDescriptor = GlyphSet(
- self._font.lib["public.glyphOrder"])
- else:
+ self._font.addObserver(
+ self, "_glyphOrderChanged", "Font.GlyphOrderChanged")
+ if self._font.glyphOrder is None:
# TODO: cannedDesign or carry sortDescriptor from previous font?
self.sortDescriptor = cannedDesign
+ else:
+ # use the glyphOrder from the font
+ self.sortDescriptor = None
font = property(_get_font, _set_font, doc="The fontView font. Subscribes \
to the new font, updates the sorting order and cells widget when set.")
@@ -954,21 +957,13 @@ class MainWindow(QMainWindow):
return self._sortDescriptor
def _set_sortDescriptor(self, desc):
- if isinstance(desc, GlyphSet):
- glyphs = []
- for glyphName in desc.glyphNames:
- if glyphName in self._font:
- glyphs.append(self._font[glyphName])
- if len(glyphs) < len(self._font):
- # if some glyphs in the font are not present in the glyph
- # order, loop again to add them at the end
- for glyph in self._font:
- if glyph not in glyphs:
- glyphs.append(glyph)
+ if desc is None:
+ self.updateGlyphsFromFont()
+ elif isinstance(desc, GlyphSet):
+ self._font.glyphOrder = desc.glyphNames
else:
- glyphs = [self._font[k] for k in self._font.unicodeData
- .sortGlyphNames(self._font.keys(), desc)]
- self.collectionWidget.glyphs = glyphs
+ self._font.glyphOrder = self._font.unicodeData.sortGlyphNames(
+ self._font.keys(), desc)
self._sortDescriptor = desc
sortDescriptor = property(_get_sortDescriptor, _set_sortDescriptor,
@@ -1040,7 +1035,27 @@ class MainWindow(QMainWindow):
def _fontChanged(self, notification):
self.collectionWidget.update()
- self.setWindowModified(True)
+ self.setWindowModified(self._font.dirty)
+
+ def _glyphOrderChanged(self, notification):
+ self.updateGlyphsFromFont()
+
+ def updateGlyphsFromFont(self):
+ glyphOrder = self._font.glyphOrder
+ if len(glyphOrder):
+ glyphs = []
+ for glyphName in glyphOrder:
+ if glyphName in self._font:
+ glyphs.append(self._font[glyphName])
+ if len(glyphs) < len(self._font):
+ # if some glyphs in the font are not present in the glyph
+ # order, loop again to add them at the end
+ for glyph in self._font:
+ if glyph not in glyphs:
+ glyphs.append(glyph)
+ else:
+ glyphs = self._font[:]
+ self.collectionWidget.glyphs = glyphs
def _glyphOpened(self, glyph):
glyphViewWindow = MainGfxWindow(glyph, self)
diff --git a/Lib/defconQt/glyphView.py b/Lib/defconQt/glyphView.py
index cca153e..fb39e1c 100644
--- a/Lib/defconQt/glyphView.py
+++ b/Lib/defconQt/glyphView.py
@@ -116,7 +116,10 @@ class AddAnchorDialog(QDialog):
def __init__(self, pos=None, parent=None):
super(AddAnchorDialog, self).__init__(parent)
self.setWindowModality(Qt.WindowModal)
- self.setWindowTitle("Add anchor…")
+ if pos is not None:
+ self.setWindowTitle("Add anchor…")
+ else:
+ self.setWindowTitle("Rename anchor…")
layout = QGridLayout(self)
@@ -136,8 +139,9 @@ class AddAnchorDialog(QDialog):
l = 0
layout.addWidget(anchorNameLabel, l, 0)
layout.addWidget(self.anchorNameEdit, l, 1, 1, 3)
- l += 1
- layout.addWidget(anchorPositionLabel, l, 0, 1, 4)
+ if pos is not None:
+ l += 1
+ layout.addWidget(anchorPositionLabel, l, 0, 1, 4)
l += 1
layout.addWidget(buttonBox, l, 3)
self.setLayout(layout)
@@ -363,7 +367,7 @@ class MainGfxWindow(QMainWindow):
oldView = self.view
# Preserve the selected layer (by setting the glyph from that layer)
# Todo: If that layer is already in the glyph, it would be a little bit
- # harder to create it here and may be better or worse. Worse becaue
+ # harder to create it here and may be better or worse. Worse because
# we'd alter the data without being explicitly asked to do so.
# Ask someone who does UX.
if oldView:
@@ -379,6 +383,7 @@ class MainGfxWindow(QMainWindow):
# GlyphView? If yes, we should make an interface for a
# predecessor -> successor transformation
if oldView:
+ self.view._currentTool = oldView._currentTool
self.view.setTransform(oldView.transform())
self._setlayerColorButtonColor()
@@ -1017,6 +1022,12 @@ class AnchorItem(QGraphicsPathItem):
scene._blocked = False
return value
+ def mouseDoubleClickEvent(self, event):
+ view = self.scene().views()[0]
+ newAnchorName, ok = AddAnchorDialog.getNewAnchorName(view)
+ if ok:
+ self._anchor.name = newAnchorName
+
def setPointPath(self, scale=None):
path = QPainterPath()
if scale is None:
@@ -2300,8 +2311,7 @@ class GlyphView(QGraphicsView):
def _makeLayerGlyph(self, layer):
name = self._name
- layer.newGlyph(name)
- glyph = layer[name]
+ glyph = layer.newGlyph(name)
# TODO: generalize this out, can’t use newStandardGlyph unfortunately
glyph.width = self.defaultWidth
diff --git a/Lib/defconQt/objects/defcon.py b/Lib/defconQt/objects/defcon.py
index 24f585f..496f1c6 100644
--- a/Lib/defconQt/objects/defcon.py
+++ b/Lib/defconQt/objects/defcon.py
@@ -19,9 +19,7 @@ class TFont(Font):
if not override:
if name in self:
return None
- # XXX(defcon): newGlyph should return the glyph
- self.newGlyph(name)
- glyph = self[name]
+ glyph = self.newGlyph(name)
glyph.width = width
# TODO: list ought to be changeable from AGL2UV
if addUnicode:
@@ -117,8 +115,8 @@ class TPoint(Point):
class GlyphSet(object):
__slots__ = ["_name", "_glyphNames"]
- def __init__(self, glyphNames, name=None):
- self._name = name
+ def __init__(self, glyphNames, name):
+ self._name = str(name)
self._glyphNames = glyphNames
def _get_name(self):