aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrien Tétar2015-11-12 21:45:16 +0100
committerAdrien Tétar2015-11-12 21:45:16 +0100
commit19aa1dc37277b290f73ddd732985823e0c333512 (patch)
treed1cf7429769e0f5dceffb831dafa8b39447c5337
parent14337a45c2bf33f448918a910d9616b3f957dca4 (diff)
downloadtrufont-19aa1dc37277b290f73ddd732985823e0c333512.tar.bz2
fontView: introduce ColorVignette to inspectorHEADmaster
-rw-r--r--Lib/defconQt/fontView.py47
-rw-r--r--Lib/defconQt/objects/colorWidgets.py15
2 files changed, 41 insertions, 21 deletions
diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py
index 506c842..ed6214c 100644
--- a/Lib/defconQt/fontView.py
+++ b/Lib/defconQt/fontView.py
@@ -128,11 +128,11 @@ class Application(QApplication):
MAX_RECENT_FILES = 6
-class InfoPanel(QWidget):
+class InspectorWindow(QWidget):
def __init__(self):
super().__init__(flags=Qt.Tool)
- self.setWindowTitle("Info Panel")
+ self.setWindowTitle("Inspector Window")
self._blocked = False
self._glyph = None
@@ -169,8 +169,10 @@ class InfoPanel(QWidget):
self.rightSideBearingEdit.setMaximumWidth(columnOneWidth)
self.rightSideBearingEdit.setValidator(QIntValidator(self))
markColorLabel = QLabel("Flag:", self)
- self.markColorButton = QPushButton(self)
- self.markColorButton.setMaximumWidth(columnOneWidth)
+ self.markColorWidget = ColorVignette(QColor(Qt.white), self)
+ self.markColorWidget.colorChanged.connect(
+ self.writeMarkColor)
+ self.markColorWidget.setMaximumWidth(columnOneWidth)
app = QApplication.instance()
self.updateGlyph()
app.currentGlyphChanged.connect(self.updateGlyph)
@@ -191,7 +193,7 @@ class InfoPanel(QWidget):
glyphLayout.addWidget(self.rightSideBearingEdit, l, 3)
l += 1
glyphLayout.addWidget(markColorLabel, l, 0)
- glyphLayout.addWidget(self.markColorButton, l, 1)
+ glyphLayout.addWidget(self.markColorWidget, l, 1)
glyphGroup.setLayout(glyphLayout)
transformGroup = QGroupBox("Transform", self)
@@ -347,7 +349,7 @@ class InfoPanel(QWidget):
width = None
leftSideBearing = None
rightSideBearing = None
- colorStr = "white"
+ markColor = QColor(Qt.white)
if self._glyph is not None:
name = self._glyph.name
unicodes = " ".join("%06X" % u if u > 0xFFFF else "%04X" %
@@ -359,16 +361,15 @@ class InfoPanel(QWidget):
if self._glyph.rightMargin is not None:
rightSideBearing = str(int(self._glyph.rightMargin))
if self._glyph.markColor is not None:
- colorStr = QColor.fromRgbF(
- *tuple(self._glyph.markColor)).name()
+ markColor = QColor.fromRgbF(
+ *tuple(self._glyph.markColor))
self.nameEdit.setText(name)
self.unicodesEdit.setText(unicodes)
self.widthEdit.setText(width)
self.leftSideBearingEdit.setText(leftSideBearing)
self.rightSideBearingEdit.setText(rightSideBearing)
- self.markColorButton.setStyleSheet("background-color: {}; \
- border: 1px solid black;".format(colorStr))
+ self.markColorWidget.setColor(markColor)
def writeGlyphName(self):
if self._glyph is None:
@@ -409,6 +410,10 @@ class InfoPanel(QWidget):
self._glyph.rightMargin = int(self.nameEdit.text())
self._blocked = False
+ def writeMarkColor(self):
+ color = self.markColorWidget.color()
+ self._glyph.markColor = Color(color.getRgbF())
+
class AddGlyphsDialog(QDialog):
@@ -416,7 +421,7 @@ class AddGlyphsDialog(QDialog):
def __init__(self, currentGlyphs=None, parent=None):
super(AddGlyphsDialog, self).__init__(parent)
self.setWindowModality(Qt.WindowModal)
- self.setWindowTitle("Add glyphs…")
+ self.setWindowTitle("Add Glyphs…")
self.currentGlyphs = currentGlyphs
self.currentGlyphNames = [glyph.name for glyph in currentGlyphs]
@@ -719,7 +724,8 @@ class MainWindow(QMainWindow):
menuBar.addMenu(pythonMenu)
windowMenu = QMenu("&Windows", self)
- action = windowMenu.addAction("&Info Panel", self.infoPanel, "Ctrl+I")
+ action = windowMenu.addAction(
+ "&Inspector Window", self.inspector, "Ctrl+I")
# XXX: we're getting duplicate shortcut when we spawn a new window...
action.setShortcutContext(Qt.ApplicationShortcut)
windowMenu.addAction("&Metrics Window", self.metrics, "Ctrl+Alt+S")
@@ -1212,18 +1218,18 @@ class MainWindow(QMainWindow):
else:
app.scriptingWindow.show()
- def infoPanel(self):
+ def inspector(self):
app = QApplication.instance()
- if not hasattr(app, 'infoPanelWindow'):
- app.infoPanelWindow = InfoPanel()
- app.infoPanelWindow.show()
- elif app.infoPanelWindow.isVisible():
+ if not hasattr(app, 'inspectorWindow'):
+ app.inspectorWindow = InspectorWindow()
+ app.inspectorWindow.show()
+ elif app.inspectorWindow.isVisible():
# TODO: do this only if the widget is user-visible, otherwise the
# key press feels as if it did nothing
# toggle
- app.infoPanelWindow.close()
+ app.inspectorWindow.close()
else:
- app.infoPanelWindow.show()
+ app.inspectorWindow.show()
def sortGlyphs(self):
sortDescriptor, ok = SortDialog.getDescriptor(self,
@@ -1596,6 +1602,7 @@ class MiscTab(QTabWidget):
for name, color in entries.items():
modelIndex = self.markColorModel.index(index, 0)
widget = ColorVignette(color, self)
+ widget.setMargins(2, 2, 2, 2)
self.markColorView.setIndexWidget(modelIndex, widget)
item = QStandardItem()
item.setText(name)
@@ -1636,7 +1643,9 @@ class MiscTab(QTabWidget):
self.markColorModel.setItem(index, 1, item)
modelIndex = self.markColorModel.index(index, 0)
+ # TODO: not DRY with ctor
widget = ColorVignette(QColor(), self)
+ widget.setMargins(2, 2, 2, 2)
self.markColorView.setIndexWidget(modelIndex, widget)
itemIndex = self.markColorModel.index(index, 1)
diff --git a/Lib/defconQt/objects/colorWidgets.py b/Lib/defconQt/objects/colorWidgets.py
index f9708c7..f8b4010 100644
--- a/Lib/defconQt/objects/colorWidgets.py
+++ b/Lib/defconQt/objects/colorWidgets.py
@@ -1,4 +1,4 @@
-from PyQt5.QtCore import QSize, Qt
+from PyQt5.QtCore import pyqtSignal, QSize, Qt
from PyQt5.QtWidgets import (QColorDialog, QStyle, QStyleOptionFrame,
QStylePainter, QWidget)
@@ -11,9 +11,12 @@ class ColorVignette(QWidget):
Inspired by ColorPreview and ColorSelector, by Mattia Basaglia.
"""
+ colorChanged = pyqtSignal()
+
def __init__(self, color, parent=None):
super().__init__(parent)
self._color = color
+ self._margins = (0, 2, 0, -2)
self._readOnly = False
def color(self):
@@ -31,6 +34,14 @@ class ColorVignette(QWidget):
ok = dialog.exec_()
if ok:
self.setColor(dialog.currentColor())
+ self.colorChanged.emit()
+
+ def margins(self):
+ dx1, dy1, dx2, dy2 = self._margins
+ return (dx1, dy1, -dx2, -dy2)
+
+ def setMargins(self, left, top, right, bottom):
+ self._margins = (left, top, -right, -bottom)
def readOnly(self):
return self._readOnly
@@ -43,7 +54,7 @@ class ColorVignette(QWidget):
panel.initFrom(self)
panel.lineWidth = 2
panel.midLineWidth = 0
- panel.rect = panel.rect.adjusted(2, 2, -2, -2)
+ panel.rect = panel.rect.adjusted(*self._margins)
panel.state = panel.state | QStyle.State_Sunken
self.style().drawPrimitive(QStyle.PE_Frame, panel, painter, self)
r = self.style().subElementRect(QStyle.SE_FrameContents, panel, self)