aboutsummaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAdrien Tétar2015-10-22 12:43:21 +0200
committerAdrien Tétar2015-10-22 12:43:21 +0200
commit66ca760b37bec7613a587d3b0f31df81cd7df846 (patch)
treee23497f834e2cd08687c84bbfe765e75a8fad90a /Lib
parentf4ddcd84fbc8c0b210f7caa62a7b1b41a4498ce4 (diff)
parentec2ae503b13e4d06b2556893356a7bc1a05ff54c (diff)
downloadtrufont-66ca760b37bec7613a587d3b0f31df81cd7df846.tar.bz2
Merge pull request #49 from moyogo/fontinfo
fontInfo: Add OS/2 tab, add class TabWidget, use load and write functions
Diffstat (limited to 'Lib')
-rw-r--r--Lib/defconQt/fontInfo.py1221
1 files changed, 548 insertions, 673 deletions
diff --git a/Lib/defconQt/fontInfo.py b/Lib/defconQt/fontInfo.py
index 45f954f..93fc3df 100644
--- a/Lib/defconQt/fontInfo.py
+++ b/Lib/defconQt/fontInfo.py
@@ -1,9 +1,10 @@
from PyQt5.QtCore import QDate, QDateTime, QTime, Qt
-from PyQt5.QtGui import QDoubleValidator, QIntValidator
+from PyQt5.QtGui import (
+ QDoubleValidator, QIntValidator, QStandardItem, QStandardItemModel)
from PyQt5.QtWidgets import (
QCheckBox, QComboBox, QDateTimeEdit, QDialog, QDialogButtonBox,
- QGridLayout, QGroupBox, QLabel, QLineEdit, QPlainTextEdit, QTabWidget,
- QVBoxLayout, QWidget)
+ QGridLayout, QGroupBox, QLabel, QLineEdit, QListView, QPlainTextEdit,
+ QTabWidget, QVBoxLayout, QWidget)
class InfoTabWidget(QTabWidget):
@@ -15,13 +16,14 @@ class InfoTabWidget(QTabWidget):
class TabDialog(QDialog):
def __init__(self, font, parent=None):
- super(TabDialog, self).__init__(parent)
+ super().__init__(parent)
self.font = font
self.tabWidget = InfoTabWidget(self)
self.tabWidget.addNamedTab(GeneralTab(self.font))
self.tabWidget.addNamedTab(MetricsTab(self.font))
self.tabWidget.addNamedTab(OpenTypeTab(self.font))
+ self.tabWidget.addNamedTab(OS2Tab(self.font))
self.tabWidget.addNamedTab(PostScriptTab(self.font))
buttonBox = QDialogButtonBox(
@@ -41,80 +43,170 @@ class TabDialog(QDialog):
def accept(self):
for i in range(self.tabWidget.count()):
self.tabWidget.widget(i).writeValues(self.font)
- super(TabDialog, self).accept()
+ super().accept()
-class GeneralTab(QWidget):
- name = "General"
+class TabWidget(QWidget):
+
+ def __init__(self, font, parent=None, name=None):
+ self.name = name
+ self.font = font
+ super().__init__(parent)
+
+ def loadString(self, font, src, dst):
+ value = getattr(font.info, src)
+ if value is not None:
+ setattr(self, dst + "Edit", QLineEdit(value, self))
+ else:
+ setattr(self, dst + "Edit", QLineEdit(None, self))
+
+ def writeString(self, font, src, dst):
+ value = getattr(self, src + "Edit").text()
+ if value != "":
+ setattr(font.info, dst, value)
+ else:
+ setattr(font.info, dst, None)
+
+ def loadInteger(self, font, src, dst):
+ value = getattr(font.info, src)
+ if value is not None:
+ value = str(value)
+ else:
+ value = ""
+ setattr(self, dst + "Edit", QLineEdit(value, self))
+ getattr(self, dst + "Edit").setValidator(QIntValidator(self))
+
+ def writeInteger(self, font, src, dst):
+ value = getattr(self, src + "Edit").text()
+ if value != "":
+ setattr(font.info, dst, int(value))
+ else:
+ setattr(font.info, dst, None)
+
+ def loadPositiveInteger(self, font, src, dst):
+ value = getattr(font.info, src)
+ if value is not None:
+ value = str(value)
+ else:
+ value = ""
+ setattr(self, dst + "Edit", QLineEdit(value, self))
+ getattr(self, dst + "Edit").setValidator(QIntValidator(self))
+ validator = QIntValidator(self)
+ validator.setBottom(0)
+ getattr(self, dst + "Edit").setValidator(validator)
+
+ writePositiveInteger = writeInteger
+
+ def loadIntegerFloat(self, font, src, dst):
+ value = getattr(font.info, src)
+ if value is not None:
+ value = str(value)
+ else:
+ value = ""
+ setattr(self, dst + "Edit", QLineEdit(value, self))
+ getattr(self, dst + "Edit").setValidator(QDoubleValidator(self))
+
+ def writeIntegerFloat(self, font, src, dst):
+ value = getattr(self, src + "Edit").text()
+ if "." in value:
+ setattr(font.info, dst, float(value))
+ elif value:
+ setattr(font.info, dst, int(value))
+ else:
+ setattr(font.info, dst, None)
+
+ def loadPositiveIntegerFloat(self, font, src, dst):
+ value = getattr(font.info, src)
+ if value is not None:
+ value = str(value)
+ else:
+ value = ""
+ setattr(self, dst + "Edit", QLineEdit(value, self))
+ validator = QDoubleValidator(self)
+ validator.setBottom(0)
+ getattr(self, dst + "Edit").setValidator(validator)
+
+ writePositiveIntegerFloat = writeIntegerFloat
+
+ def loadIntegerFloatList(self, font, src, dst):
+ values = " ".join(str(val) for val in getattr(font.info, src))
+ setattr(self, dst + "Edit", QLineEdit(values, self))
+
+ def writeIntegerFloatList(self, font, src, dst):
+ values = getattr(self, src + "Edit").text()
+ dstValues = []
+ for val in values:
+ if "." in val:
+ dstValues.append(float(val))
+ elif val not in ("", " "):
+ dstValues.append(int(val))
+ setattr(font.info, dst, dstValues)
+
+ def loadBoolean(self, font, src, dst):
+ value = getattr(font.info, src)
+ setattr(self, dst + "Box", QCheckBox(self))
+ if value is None:
+ getattr(self, dst + "Box").setCheckState(Qt.PartiallyChecked)
+ else:
+ getattr(self, dst + "Box").setCheckState(value)
+
+ def writeBoolean(self, font, src, dst):
+ value = getattr(self, src + "Box").checkState()
+ if value == Qt.PartiallyChecked:
+ setattr(font.info, dst, None)
+ else:
+ setattr(font.info, dst, bool(value))
+
+
+class GeneralTab(TabWidget):
def __init__(self, font, parent=None):
- super(GeneralTab, self).__init__(parent)
+ super().__init__(parent, name="General")
mainLayout = QGridLayout(self)
familyNameLabel = QLabel("Family name:", self)
- self.familyNameEdit = QLineEdit(font.info.familyName, self)
styleNameLabel = QLabel("Style name:", self)
- self.styleNameEdit = QLineEdit(font.info.styleName, self)
+ designerLabel = QLabel("Designer:", self)
+ designerURLLabel = QLabel("Designer URL:", self)
+ manufacturerLabel = QLabel("Manufacturer:", self)
+ manufacturerURLLabel = QLabel("Manufacturer URL:", self)
+ copyrightLabel = QLabel("Copyright:", self)
+ licenseLabel = QLabel("License:", self)
+ licenseURLLabel = QLabel("License URL:", self)
+ trademarkLabel = QLabel("Trademark:", self)
+ # TODO: give visual feedback of input data validity using QLineEdit
+ # lose focus event
+ # http://snorf.net/blog/2014/08/09/using-qvalidator-in-pyqt4-to-validate-user-input/ # noqa
+ versionLabel = QLabel("Version:", self)
+ versionDotLabel = QLabel(".", self)
+ self.loadString(font, "familyName", "familyName")
+ self.loadString(font, "styleName", "styleName")
+ self.loadString(font, "openTypeNameDesigner", "designer")
+ self.loadString(font, "openTypeNameDesignerURL", "designerURL")
+ self.loadString(font, "openTypeNameManufacturer", "manufacturer")
+ self.loadString(font, "openTypeNameManufacturerURL", "manufacturerURL")
+ self.loadString(font, "copyright", "copyright")
+ self.loadString(font, "openTypeNameLicense", "license")
+ self.loadString(font, "openTypeNameLicenseURL", "licenseURL")
+ self.loadString(font, "trademark", "trademark")
+ self.loadInteger(font, "versionMajor", "versionMajor")
+ self.versionMajorEdit.setAlignment(Qt.AlignRight)
+ self.loadPositiveInteger(font, "versionMinor", "versionMinor")
mainLayout.addWidget(familyNameLabel, 0, 0)
mainLayout.addWidget(self.familyNameEdit, 0, 1, 1, 3)
mainLayout.addWidget(styleNameLabel, 0, 4)
mainLayout.addWidget(self.styleNameEdit, 0, 5)
-
- designerLabel = QLabel("Designer:", self)
- self.designerEdit = QLineEdit(font.info.openTypeNameDesigner, self)
-
mainLayout.addWidget(designerLabel, 1, 0)
mainLayout.addWidget(self.designerEdit, 1, 1, 1, 5)
-
- designerURLLabel = QLabel("Designer URL:", self)
- self.designerURLEdit = QLineEdit(
- font.info.openTypeNameDesignerURL, self)
-
mainLayout.addWidget(designerURLLabel, 2, 0)
mainLayout.addWidget(self.designerURLEdit, 2, 1, 1, 5)
-
- manufacturerLabel = QLabel("Manufacturer:", self)
- self.manufacturerEdit = QLineEdit(
- font.info.openTypeNameManufacturer, self)
-
mainLayout.addWidget(manufacturerLabel, 3, 0)
mainLayout.addWidget(self.manufacturerEdit, 3, 1, 1, 5)
-
- manufacturerURLLabel = QLabel("Manufacturer URL:", self)
- self.manufacturerURLEdit = QLineEdit(
- font.info.openTypeNameManufacturerURL, self)
-
mainLayout.addWidget(manufacturerURLLabel, 4, 0)
mainLayout.addWidget(self.manufacturerURLEdit, 4, 1, 1, 5)
-
- copyrightLabel = QLabel("Copyright:", self)
- self.copyrightEdit = QLineEdit(font.info.copyright, self)
-
mainLayout.addWidget(copyrightLabel, 5, 0)
mainLayout.addWidget(self.copyrightEdit, 5, 1, 1, 5)
-
- # TODO: give visual feedback of input data validity using QLineEdit
- # lose focus event
- # http://snorf.net/blog/2014/08/09/using-qvalidator-in-pyqt4-to-validate-user-input/ # noqa
- versionLabel = QLabel("Version:", self)
- if font.info.versionMajor is not None:
- versionMajor = str(font.info.versionMajor)
- else:
- versionMajor = ''
- self.versionMajorEdit = QLineEdit(versionMajor, self)
- self.versionMajorEdit.setAlignment(Qt.AlignRight)
- self.versionMajorEdit.setValidator(QIntValidator(self))
- versionDotLabel = QLabel(".", self)
- if font.info.versionMinor is not None:
- versionMinor = str(font.info.versionMinor)
- else:
- versionMinor = ''
- self.versionMinorEdit = QLineEdit(versionMinor, self)
- validator = QIntValidator(self)
- validator.setBottom(0)
- self.versionMinorEdit.setValidator(validator)
-
mainLayout.addWidget(versionLabel, 6, 0)
mainLayout.addWidget(self.versionMajorEdit, 6, 1)
mainLayout.addWidget(versionDotLabel, 6, 2)
@@ -142,97 +234,39 @@ class GeneralTab(QWidget):
mainLayout.addWidget(dateCreatedLabel, 6, 4)
mainLayout.addWidget(self.dateCreatedEdit, 6, 5)
-
- licenseLabel = QLabel("License:", self)
- self.licenseEdit = QLineEdit(font.info.openTypeNameLicense, self)
-
mainLayout.addWidget(licenseLabel, 7, 0)
mainLayout.addWidget(self.licenseEdit, 7, 1, 1, 5)
-
- licenseURLLabel = QLabel("License URL:", self)
- self.licenseURLEdit = QLineEdit(font.info.openTypeNameLicenseURL, self)
-
mainLayout.addWidget(licenseURLLabel, 8, 0)
mainLayout.addWidget(self.licenseURLEdit, 8, 1, 1, 5)
-
- trademarkLabel = QLabel("Trademark:", self)
- self.trademarkEdit = QLineEdit(font.info.trademark, self)
-
mainLayout.addWidget(trademarkLabel, 9, 0)
mainLayout.addWidget(self.trademarkEdit, 9, 1, 1, 5)
self.setLayout(mainLayout)
def writeValues(self, font):
- familyName = self.familyNameEdit.text()
- if familyName != '':
- font.info.familyName = familyName
- else:
- font.info.trademark = None
- styleName = self.styleNameEdit.text()
- if styleName != '':
- font.info.styleName = styleName
- else:
- font.info.trademark = None
- designer = self.designerEdit.text()
- if designer != '':
- font.info.openTypeNameDesigner = designer
- else:
- font.info.trademark = None
- designerURL = self.designerURLEdit.text()
- if designerURL != '':
- font.info.openTypeNameDesignerURL = designerURL
- else:
- font.info.trademark = None
- manufacturer = self.manufacturerEdit.text()
- if manufacturer != '':
- font.info.openTypeNameManufacturer = manufacturer
- else:
- font.info.trademark = None
- manufacturerURL = self.manufacturerURLEdit.text()
- if manufacturerURL != '':
- font.info.openTypeNameManufacturerURL = manufacturerURL
- else:
- font.info.trademark = None
- copyright = self.copyrightEdit.text()
- if copyright != '':
- font.info.copyright = copyright
- else:
- font.info.trademark = None
- versionMajor = self.versionMajorEdit.text()
- if versionMajor:
- font.info.versionMajor = int(versionMajor)
- else:
- font.info.versionMajor = None
- versionMinor = self.versionMinorEdit.text()
- if versionMinor:
- font.info.versionMinor = int(versionMinor)
- else:
- font.info.versionMinor = None
- font.info.openTypeHeadCreated = self.dateCreatedEdit.dateTime(
- ).toString("yyyy/MM/dd hh:mm:ss")
- license = self.licenseEdit.text()
- if license != '':
- font.info.openTypeNameLicense = license
- else:
- font.info.trademark = None
- licenseURL = self.licenseURLEdit.text()
- if licenseURL != '':
- font.info.openTypeNameLicenseURL = licenseURL
- else:
- font.info.trademark = None
- trademark = self.trademarkEdit.text()
- if trademark != '':
- font.info.trademark = trademark
- else:
- font.info.trademark = None
+ self.writeString(font, "familyName", "familyName")
+ self.writeString(font, "styleName", "styleName")
+ self.writeString(font, "trademark", "trademark")
+ self.writeString(font, "copyright", "copyright")
+ self.writeString(font, "designer", "openTypeNameDesigner")
+ self.writeString(font, "designerURL", "openTypeNameDesignerURL")
+ self.writeString(font, "manufacturer", "openTypeNameManufacturer")
+ self.writeString(
+ font, "manufacturerURL", "openTypeNameManufacturerURL")
+ self.writeString(font, "license", "openTypeNameLicense")
+ self.writeString(font, "licenseURL", "openTypeNameLicenseURL")
+
+ self.writeInteger(font, "versionMajor", "versionMajor")
+ self.writePositiveInteger(font, "versionMinor", "versionMinor")
+ font.info.openTypeHeadCreated = \
+ self.dateCreatedEdit.dateTime().toString("yyyy/MM/dd hh:mm:ss")
-class MetricsTab(QWidget):
- name = "Metrics"
+
+class MetricsTab(TabWidget):
def __init__(self, font, parent=None):
- super(MetricsTab, self).__init__(parent)
+ super().__init__(parent, name="Metrics")
mainLayout = QGridLayout()
styleMapFamilyLabel = QLabel("Style map family name:", self)
@@ -260,24 +294,19 @@ class MetricsTab(QWidget):
mainLayout.addWidget(self.styleMapStyleDrop, 0, 5)
unitsPerEmLabel = QLabel("Units per em:", self)
- unitsPerEm = str(
- font.info.unitsPerEm) if font.info.unitsPerEm is not None else ''
- self.unitsPerEmEdit = QLineEdit(unitsPerEm, self)
- validator = QIntValidator(self)
- validator.setBottom(0)
- self.unitsPerEmEdit.setValidator(validator)
-
ascenderLabel = QLabel("Ascender:", self)
- ascender = str(
- font.info.ascender) if font.info.ascender is not None else ''
- self.ascenderEdit = QLineEdit(ascender, self)
- self.ascenderEdit.setValidator(QIntValidator(self))
-
capHeightLabel = QLabel("Cap height:", self)
- capHeight = str(
- font.info.capHeight) if font.info.capHeight is not None else ''
- self.capHeightEdit = QLineEdit(capHeight, self)
- self.capHeightEdit.setValidator(QIntValidator(self))
+ italicAngleLabel = QLabel("Italic angle:", self)
+ descenderLabel = QLabel("Descender:", self)
+ xHeightLabel = QLabel("x-height:", self)
+ # In the UFO specs these are integer or float, and unitsPerEm is
+ # non-negative integer or float
+ self.loadPositiveIntegerFloat(font, "unitsPerEm", "unitsPerEm")
+ self.loadIntegerFloat(font, "ascender", "ascender")
+ self.loadIntegerFloat(font, "capHeight", "capHeight")
+ self.loadIntegerFloat(font, "italicAngle", "italicAngle")
+ self.loadIntegerFloat(font, "descender", "descender")
+ self.loadIntegerFloat(font, "xHeight", "xHeight")
mainLayout.addWidget(unitsPerEmLabel, 1, 0)
mainLayout.addWidget(self.unitsPerEmEdit, 1, 1)
@@ -285,25 +314,6 @@ class MetricsTab(QWidget):
mainLayout.addWidget(self.ascenderEdit, 1, 3)
mainLayout.addWidget(capHeightLabel, 1, 4)
mainLayout.addWidget(self.capHeightEdit, 1, 5)
-
- italicAngleLabel = QLabel("Italic angle:", self)
- italicAngle = str(
- font.info.italicAngle) if font.info.italicAngle is not None else ''
- self.italicAngleEdit = QLineEdit(italicAngle, self)
- self.italicAngleEdit.setValidator(QDoubleValidator(self))
-
- descenderLabel = QLabel("Descender:", self)
- descender = str(
- font.info.descender) if font.info.descender is not None else ''
- self.descenderEdit = QLineEdit(descender, self)
- self.descenderEdit.setValidator(QIntValidator(self))
-
- xHeightLabel = QLabel("x-height:", self)
- xHeight = str(
- font.info.xHeight) if font.info.xHeight is not None else ''
- self.xHeightEdit = QLineEdit(xHeight, self)
- self.xHeightEdit.setValidator(QIntValidator(self))
-
mainLayout.addWidget(italicAngleLabel, 2, 0)
mainLayout.addWidget(self.italicAngleEdit, 2, 1)
mainLayout.addWidget(descenderLabel, 2, 2)
@@ -336,48 +346,14 @@ class MetricsTab(QWidget):
font.info.styleMapStyleName = "bold italic"
else:
font.info.styleMapStyleName = None
- unitsPerEm = self.unitsPerEmEdit.text()
- if "." in unitsPerEm:
- font.info.unitsPerEm = float(unitsPerEm)
- elif unitsPerEm:
- font.info.unitsPerEm = int(unitsPerEm)
- else:
- font.info.unitsPerEm = None
- italicAngle = self.italicAngleEdit.text()
- if "." in italicAngle:
- font.info.italicAngle = float(italicAngle)
- elif italicAngle:
- font.info.italicAngle = int(italicAngle)
- else:
- font.info.italicAngle = None
- ascender = self.ascenderEdit.text()
- if "." in ascender:
- font.info.ascender = float(ascender)
- elif ascender:
- font.info.ascender = int(ascender)
- else:
- font.info.ascender = None
- descender = self.descenderEdit.text()
- if "." in descender:
- font.info.descender = float(descender)
- elif descender:
- font.info.descender = int(descender)
- else:
- font.info.descender = None
- capHeight = self.capHeightEdit.text()
- if "." in capHeight:
- font.info.capHeight = float(capHeight)
- elif capHeight:
- font.info.capHeight = int(capHeight)
- else:
- font.info.capHeight = None
- xHeight = self.xHeightEdit.text()
- if "." in xHeight:
- font.info.xHeight = float(xHeight)
- elif xHeight:
- font.info.xHeight = int(xHeight)
- else:
- font.info.xHeight = None
+
+ self.writePositiveIntegerFloat(font, "unitsPerEm", "unitsPerEm")
+ self.writeIntegerFloat(font, "italicAngle", "italicAngle")
+ self.writeIntegerFloat(font, "ascender", "ascender")
+ self.writeIntegerFloat(font, "descender", "descender")
+ self.writeIntegerFloat(font, "capHeight", "capHeight")
+ self.writeIntegerFloat(font, "xHeight", "xHeight")
+
note = self.noteEdit.toPlainText()
if note != '':
font.info.note = note
@@ -385,48 +361,38 @@ class MetricsTab(QWidget):
font.info.note = None
-class OpenTypeTab(QWidget):
- name = "OpenType"
+class OpenTypeTab(TabWidget):
def __init__(self, font, parent=None):
- super(OpenTypeTab, self).__init__(parent)
+ super().__init__(parent, name="OpenType")
nameGroup = QGroupBox("name table", self)
# nameGroup.setFlat(True)
nameLayout = QGridLayout(self)
preferredFamilyNameLabel = QLabel("Pref. Family Name:", self)
- self.preferredFamilyNameEdit = QLineEdit(
- font.info.openTypeNamePreferredFamilyName, self)
-
preferredSubfamilyNameLabel = QLabel("Pref. Subfamily Name:", self)
- self.preferredSubfamilyNameEdit = QLineEdit(
- font.info.openTypeNamePreferredSubfamilyName, self)
-
compatibleFullNameLabel = QLabel("Compatible Full Name:", self)
- self.compatibleFullNameEdit = QLineEdit(
- font.info.openTypeNameCompatibleFullName, self)
-
WWSFamilyNameLabel = QLabel("WWS Family Name:", self)
- self.WWSFamilyNameEdit = QLineEdit(
- font.info.openTypeNameWWSFamilyName, self)
-
WWSSubfamilyNameLabel = QLabel("WWS Subfamily Name:", self)
- self.WWSSubfamilyNameEdit = QLineEdit(
- font.info.openTypeNameWWSSubfamilyName, self)
-
versionLabel = QLabel("Version:", self)
- self.versionEdit = QLineEdit(font.info.openTypeNameVersion, self)
-
uniqueIDLabel = QLabel("Unique ID:", self)
- self.uniqueIDEdit = QLineEdit(font.info.openTypeNameUniqueID, self)
-
descriptionLabel = QLabel("Description:", self)
- self.descriptionEdit = QLineEdit(
- font.info.openTypeNameDescription, self)
-
sampleTextLabel = QLabel("Sample text:", self)
- self.sampleTextEdit = QLineEdit(font.info.openTypeNameSampleText, self)
+ self.loadString(
+ font, "openTypeNamePreferredFamilyName", "preferredFamilyName")
+ self.loadString(
+ font, "openTypeNamePreferredSubfamilyName",
+ "preferredSubfamilyName")
+ self.loadString(
+ font, "openTypeNameCompatibleFullName", "compatibleFullName")
+ self.loadString(font, "openTypeNameWWSFamilyName", "WWSFamilyName")
+ self.loadString(
+ font, "openTypeNameWWSSubfamilyName", "WWSSubfamilyName")
+ self.loadString(font, "openTypeNameVersion", "version")
+ self.loadString(font, "openTypeNameUniqueID", "uniqueID")
+ self.loadString(font, "openTypeNameDescription", "description")
+ self.loadString(font, "openTypeNameSampleText", "sampleText")
l = 0
nameLayout.addWidget(preferredFamilyNameLabel, l, 0)
@@ -458,52 +424,17 @@ class OpenTypeTab(QWidget):
hheaLayout = QGridLayout(self)
ascenderLabel = QLabel("Ascender:", self)
- if font.info.openTypeHheaAscender is not None:
- ascender = str(font.info.openTypeHheaAscender)
- else:
- ascender = ''
- self.ascenderEdit = QLineEdit(ascender, self)
- self.ascenderEdit.setValidator(QIntValidator(self))
-
descenderLabel = QLabel("Descender:", self)
- if font.info.openTypeHheaDescender is not None:
- descender = str(font.info.openTypeHheaDescender)
- else:
- descender = ''
- self.descenderEdit = QLineEdit(descender, self)
- self.descenderEdit.setValidator(QIntValidator(self))
-
lineGapLabel = QLabel("LineGap:", self)
- if font.info.openTypeHheaLineGap is not None:
- lineGap = str(font.info.openTypeHheaLineGap)
- else:
- lineGap = ''
- self.lineGapEdit = QLineEdit(lineGap, self)
- self.lineGapEdit.setValidator(QIntValidator(self))
-
caretSlopeRiseLabel = QLabel("caretSlopeRise:", self)
- if font.info.openTypeHheaCaretSlopeRise is not None:
- caretSlopeRise = str(font.info.openTypeHheaCaretSlopeRise)
- else:
- caretSlopeRise = ''
- self.caretSlopeRiseEdit = QLineEdit(caretSlopeRise, self)
- self.caretSlopeRiseEdit.setValidator(QIntValidator(self))
-
caretSlopeRunLabel = QLabel("caretSlopeRun:", self)
- if font.info.openTypeHheaCaretSlopeRun is not None:
- caretSlopeRun = str(font.info.openTypeHheaCaretSlopeRun)
- else:
- caretSlopeRun = ''
- self.caretSlopeRunEdit = QLineEdit(caretSlopeRun, self)
- self.caretSlopeRunEdit.setValidator(QIntValidator(self))
-
caretOffsetLabel = QLabel("caretOffset:", self)
- if font.info.openTypeHheaCaretOffset is not None:
- caretOffset = str(font.info.openTypeHheaCaretOffset)
- else:
- caretOffset = ''
- self.caretOffsetEdit = QLineEdit(caretOffset, self)
- self.caretOffsetEdit.setValidator(QIntValidator(self))
+ self.loadInteger(font, "openTypeHheaAscender", "ascender")
+ self.loadInteger(font, "openTypeHheaDescender", "descender")
+ self.loadInteger(font, "openTypeHheaLineGap", "lineGap")
+ self.loadInteger(font, "openTypeHheaCaretSlopeRise", "caretSlopeRise")
+ self.loadInteger(font, "openTypeHheaCaretSlopeRun", "caretSlopeRun")
+ self.loadInteger(font, "openTypeHheaCaretOffset", "caretOffset")
l = 0
hheaLayout.addWidget(ascenderLabel, l, 0)
@@ -527,52 +458,22 @@ class OpenTypeTab(QWidget):
vheaLayout = QGridLayout(self)
vertTypoAscenderLabel = QLabel("vertTypoAscender:", self)
- if font.info.openTypeVheaVertTypoAscender is not None:
- vertTypoAscender = str(font.info.openTypeVheaVertTypoAscender)
- else:
- vertTypoAscender = ''
- self.vertTypoAscenderEdit = QLineEdit(vertTypoAscender, self)
- self.vertTypoAscenderEdit.setValidator(QIntValidator(self))
-
vertTypoDescenderLabel = QLabel("vertTypoDescender:", self)
- if font.info.openTypeVheaVertTypoDescender is not None:
- vertTypoDescender = str(font.info.openTypeVheaVertTypoDescender)
- else:
- vertTypoDescender = ''
- self.vertTypoDescenderEdit = QLineEdit(vertTypoDescender, self)
- self.vertTypoDescenderEdit.setValidator(QIntValidator(self))
-
vertTypoLineGapLabel = QLabel("vertTypoLineGap:", self)
- if font.info.openTypeVheaVertTypoLineGap is not None:
- vertTypoLineGap = str(font.info.openTypeVheaVertTypoLineGap)
- else:
- vertTypoLineGap = ''
- self.vertTypoLineGapEdit = QLineEdit(vertTypoLineGap, self)
- self.vertTypoLineGapEdit.setValidator(QIntValidator(self))
-
vheaCaretSlopeRiseLabel = QLabel("caretSlopeRise:", self)
- if font.info.openTypeVheaCaretSlopeRise is not None:
- vheaCaretSlopeRise = str(font.info.openTypeVheaCaretSlopeRise)
- else:
- vheaCaretSlopeRise = ''
- self.vheaCaretSlopeRiseEdit = QLineEdit(vheaCaretSlopeRise, self)
- self.vheaCaretSlopeRiseEdit.setValidator(QIntValidator(self))
-
vheaCaretSlopeRunLabel = QLabel("caretSlopeRun:", self)
- if font.info.openTypeVheaCaretSlopeRun is not None:
- vheaCaretSlopeRun = str(font.info.openTypeVheaCaretSlopeRun)
- else:
- vheaCaretSlopeRun = ''
- self.vheaCaretSlopeRunEdit = QLineEdit(vheaCaretSlopeRun, self)
- self.vheaCaretSlopeRunEdit.setValidator(QIntValidator(self))
-
vheaCaretOffsetLabel = QLabel("caretOffset:", self)
- if font.info.openTypeVheaCaretOffset is not None:
- vheaCaretOffset = str(font.info.openTypeVheaCaretOffset)
- else:
- vheaCaretOffset = ''
- self.vheaCaretOffsetEdit = QLineEdit(vheaCaretOffset, self)
- self.vheaCaretOffsetEdit.setValidator(QIntValidator(self))
+ self.loadInteger(
+ font, "openTypeVheaVertTypoAscender", "vertTypoAscender")
+ self.loadInteger(
+ font, "openTypeVheaVertTypoDescender", "vertTypoDescender")
+ self.loadInteger(
+ font, "openTypeVheaVertTypoLineGap", "vertTypoLineGap")
+ self.loadInteger(
+ font, "openTypeVheaCaretSlopeRise", "vheaCaretSlopeRise")
+ self.loadInteger(
+ font, "openTypeVheaCaretSlopeRun", "vheaCaretSlopeRun")
+ self.loadInteger(font, "openTypeVheaCaretOffset", "vheaCaretOffset")
l = 0
vheaLayout.addWidget(vertTypoAscenderLabel, l, 0)
@@ -598,140 +499,298 @@ class OpenTypeTab(QWidget):
self.setLayout(mainLayout)
def writeValues(self, font):
- preferredFamilyName = self.preferredFamilyNameEdit.text()
- if preferredFamilyName != '':
- font.info.openTypeNamePreferredFamilyName = preferredFamilyName
- else:
- font.info.openTypeNamePreferredFamilyName = None
- preferredSubfamilyName = self.preferredSubfamilyNameEdit.text()
- if preferredSubfamilyName != '':
- font.info.openTypeNamePreferredSubfamilyName = \
- preferredSubfamilyName
- else:
- font.info.openTypeNamePreferredSubfamilyName = None
- WWSFamilyName = self.WWSFamilyNameEdit.text()
- if WWSFamilyName != '':
- font.info.openTypeNameWWSFamilyName = WWSFamilyName
- else:
- font.info.openTypeNameWWSFamilyName = None
- WWSSubfamilyName = self.WWSSubfamilyNameEdit.text()
- if WWSSubfamilyName != '':
- font.info.openTypeNameWWSSubfamilyName = WWSSubfamilyName
- else:
- font.info.openTypeNameWWSSubfamilyName = None
- compatibleFullName = self.compatibleFullNameEdit.text()
- if compatibleFullName != '':
- font.info.openTypeNameCompatibleFullName = compatibleFullName
- else:
- font.info.openTypeNameCompatibleFullName = None
- version = self.versionEdit.text()
- if version != '':
- font.info.openTypeNameVersion = version
- else:
- font.info.openTypeNameVersion = None
- uniqueID = self.uniqueIDEdit.text()
- if uniqueID != '':
- font.info.openTypeNameUniqueID = uniqueID
- else:
- font.info.openTypeNameUniqueID = None
- description = self.descriptionEdit.text()
- if description != '':
- font.info.openTypeNameDescription = description
- else:
- font.info.openTypeNameDescription = None
- sampleText = self.sampleTextEdit.text()
- if sampleText != '':
- font.info.openTypeNameSampleText = sampleText
- else:
- font.info.openTypeNameSampleText = None
- ascender = self.ascenderEdit.text()
- if ascender != '':
- font.info.openTypeHheaAscender = int(ascender)
- else:
- font.info.openTypeHheaAscender = None
- descender = self.descenderEdit.text()
- if descender != '':
- font.info.openTypeHheaDescender = int(descender)
- else:
- font.info.openTypeHheaDescender = None
- lineGap = self.lineGapEdit.text()
- if lineGap != '':
- font.info.openTypeHheaLineGap = int(lineGap)
- else:
- font.info.openTypeHheaLineGap = None
- caretSlopeRise = self.caretSlopeRiseEdit.text()
- if caretSlopeRise != '':
- font.info.openTypeHheaCaretSlopeRise = int(caretSlopeRise)
- else:
- font.info.openTypeHheaCaretSlopeRise = None
- caretSlopeRun = self.caretSlopeRunEdit.text()
- if caretSlopeRun != '':
- font.info.openTypeHheaCaretSlopeRun = int(caretSlopeRun)
- else:
- font.info.openTypeHheaCaretSlopeRun = None
- caretOffset = self.caretOffsetEdit.text()
- if caretOffset != '':
- font.info.openTypeHheaCaretOffset = int(caretOffset)
- else:
- font.info.openTypeHheaCaretOffset = None
- vertTypoAscender = self.vertTypoAscenderEdit.text()
- if vertTypoAscender != '':
- font.info.openTypeVheaAscender = int(vertTypoAscender)
- else:
- font.info.openTypeVheaAscender = None
- vertTypoDescender = self.vertTypoDescenderEdit.text()
- if vertTypoDescender != '':
- font.info.openTypeVheaDescender = int(vertTypoDescender)
- else:
- font.info.openTypeVheaDescender = None
- vertTypoLineGap = self.vertTypoLineGapEdit.text()
- if vertTypoLineGap != '':
- font.info.openTypeVheaLineGap = int(vertTypoLineGap)
- else:
- font.info.openTypeVheaLineGap = None
- vheaCaretSlopeRise = self.vheaCaretSlopeRiseEdit.text()
- if vheaCaretSlopeRise != '':
- font.info.openTypeVheaCaretSlopeRise = int(vheaCaretSlopeRise)
- else:
- font.info.openTypeVheaCaretSlopeRise = None
- vheaCaretSlopeRun = self.vheaCaretSlopeRunEdit.text()
- if vheaCaretSlopeRun != '':
- font.info.openTypeVheaCaretSlopeRun = int(vheaCaretSlopeRun)
- else:
- font.info.openTypeVheaCaretSlopeRun = None
- vheaCaretOffset = self.vheaCaretOffsetEdit.text()
- if vheaCaretOffset != '':
- font.info.openTypeVheaCaretOffset = int(vheaCaretOffset)
- else:
- font.info.openTypeVheaCaretOffset = None
+ self.writeString(
+ font, "preferredFamilyName", "openTypeNamePreferredFamilyName")
+ self.writeString(
+ font, "preferredSubfamilyName",
+ "openTypeNamePreferredSubfamilyName")
+ self.writeString(font, "WWSFamilyName", "openTypeNameWWSFamilyName")
+ self.writeString(
+ font, "WWSSubfamilyName", "openTypeNameWWSSubfamilyName")
+ self.writeString(
+ font, "compatibleFullName", "openTypeNameCompatibleFullName")
+ self.writeString(font, "version", "openTypeNameVersion")
+ self.writeString(font, "uniqueID", "openTypeNameUniqueID")
+ self.writeString(font, "description", "openTypeNameDescription")
+ self.writeString(font, "sampleText", "openTypeNameSampleText")
+ self.writeInteger(font, "ascender", "openTypeHheaAscender")
+ self.writeInteger(font, "descender", "openTypeHheaDescender")
+ self.writeInteger(font, "lineGap", "openTypeHheaLineGap")
+ self.writeInteger(font, "caretSlopeRise", "openTypeHheaCaretSlopeRise")
+ self.writeInteger(font, "caretSlopeRun", "openTypeHheaCaretSlopeRun")
+ self.writeInteger(font, "caretOffset", "openTypeHheaCaretOffset")
+ self.writeInteger(
+ font, "vertTypoAscender", "openTypeVheaVertTypoAscender")
+ self.writeInteger(
+ font, "vertTypoDescender", "openTypeVheaVertTypoDescender")
+ self.writeInteger(
+ font, "vertTypoLineGap", "openTypeVheaVertTypoLineGap")
+ self.writeInteger(
+ font, "vheaCaretSlopeRise", "openTypeVheaCaretSlopeRise")
+ self.writeInteger(
+ font, "vheaCaretSlopeRun", "openTypeVheaCaretSlopeRun")
+ self.writeInteger(font, "vheaCaretOffset", "openTypeVheaCaretOffset")
+
+
+class OS2Tab(TabWidget):
+
+ def __init__(self, font, parent=None):
+ super().__init__(parent, name="OS/2")
+
+ # OS2Group = QGroupBox("OS/2 table", self)
+ # OS2Group.setFlat(True)
+ OS2Layout = QGridLayout(self)
+
+ usWidthClassLabel = QLabel("usWidthClass:", self)
+ self.usWidthClassDrop = QComboBox(self)
+ items = [
+ "None", "Ultra-condensed", "Extra-condensed", "Condensed",
+ "Semi-Condensed", "Medium (normal)", "Semi-expanded", "Expanded",
+ "Extra-expanded", "Ultra-expanded"]
+ self.usWidthClassDrop.insertItems(0, items)
+ if font.info.openTypeOS2WidthClass is not None:
+ self.usWidthClassDrop.setCurrentIndex(
+ font.info.openTypeOS2WidthClass)
+
+ fsSelectionLabel = QLabel("fsSelection:", self)
+ fsSelection = font.info.openTypeOS2Selection
+ self.fsSelectionList = QListView(self)
+ items = [
+ "1 UNDERSCORE", "2 NEGATIVE", "3 OUTLINED", "4 STRIKEOUT",
+ "7 USE_TYPO_METRICS", "8 WWS", "9 OBLIQUE"]
+ # http://stackoverflow.com/a/26613163
+ model = QStandardItemModel(7, 1)
+ for index, elem in enumerate(items):
+ item = QStandardItem()
+ item.setText(elem)
+ item.setCheckable(True)
+ bit = index + 1
+ if fsSelection is not None and bit in fsSelection:
+ # maybe default setting? if so, unneeded
+ item.setCheckState(Qt.Checked)
+ else:
+ item.setCheckState(Qt.Unchecked)
+ model.setItem(index, item)
+ self.fsSelectionList.setModel(model)
+
+ achVendorIDLabel = QLabel("achVendorID:", self)
+ self.achVendorIDEdit = QLineEdit(font.info.openTypeOS2VendorID, self)
+ self.achVendorIDEdit.setMaxLength(4)
+
+ fsTypeLabel = QLabel("fsType:", self)
+ fsType = font.info.openTypeOS2Type
+ self.fsTypeDrop = QComboBox(self)
+ items = [
+ "No embedding restrictions", "Restricted embedding",
+ "Preview and print embedding allowed",
+ "Editable embedding allowed"]
+ self.allowSubsettingBox = QCheckBox("Allow subsetting", self)
+ self.allowBitmapEmbeddingBox = QCheckBox(
+ "Allow only bitmap embedding", self)
+ self.fsTypeDrop.currentIndexChanged[int].connect(
+ self._updateFsTypeVisibility)
+ self.fsTypeDrop.insertItems(0, items)
+ if fsType is not None:
+ for i in range(1, 4):
+ if i in fsType:
+ self.fsTypeDrop.setCurrentIndex(i)
+ break
+ self.allowSubsettingBox.setChecked(8 not in fsType)
+ self.allowBitmapEmbeddingBox.setChecked(9 in fsType)
+
+ # XXX: ulUnicodeRange
+
+ # XXX: ulCodePageRange
+
+ sTypoAscenderLabel = QLabel("sTypoAscender:", self)
+ sTypoDescenderLabel = QLabel("sTypoDescender:", self)
+ sTypoLineGapLabel = QLabel("sTypoLineGap:", self)
+ usWeightClassLabel = QLabel("usWeightClass:", self)
+ usWinAscentLabel = QLabel("usWinAscent:", self)
+ usWinDescentLabel = QLabel("usWinDescent:", self)
+ ySubscriptXSizeLabel = QLabel("ySubscriptXSize:", self)
+ ySubscriptYSizeLabel = QLabel("ySubscriptYSize:", self)
+ ySubscriptXOffsetLabel = QLabel("ySubscriptXOffset:", self)
+ ySubscriptYOffsetLabel = QLabel("ySubscriptYOffset:", self)
+ ySuperscriptXSizeLabel = QLabel("ySuperscriptXSize:", self)
+ ySuperscriptYSizeLabel = QLabel("ySuperscriptYSize:", self)
+ ySuperscriptXOffsetLabel = QLabel("ySuperscriptXOffset:", self)
+ ySuperscriptYOffsetLabel = QLabel("ySuperscriptYOffset:", self)
+ yStrikeoutSizeLabel = QLabel("yStrikeoutSize:", self)
+ yStrikeoutPositionLabel = QLabel("yStrikeoutPosition:", self)
+ self.loadPositiveInteger(
+ font, "openTypeOS2WeightClass", "usWeightClass")
+ self.loadInteger(font, "openTypeOS2TypoAscender", "sTypoAscender")
+ self.loadInteger(font, "openTypeOS2TypoDescender", "sTypoDescender")
+ self.loadInteger(font, "openTypeOS2TypoLineGap", "sTypoLineGap")
+ self.loadPositiveInteger(font, "openTypeOS2WinAscent", "usWinAscent")
+ self.loadPositiveInteger(font, "openTypeOS2WinDescent", "usWinDescent")
+ self.loadInteger(font, "openTypeOS2SubscriptXSize", "ySubscriptXSize")
+ self.loadInteger(font, "openTypeOS2SubscriptYSize", "ySubscriptYSize")
+ self.loadInteger(
+ font, "openTypeOS2SubscriptXOffset", "ySubscriptXOffset")
+ self.loadInteger(
+ font, "openTypeOS2SubscriptYOffset", "ySubscriptYOffset")
+ self.loadInteger(
+ font, "openTypeOS2SuperscriptXSize", "ySuperscriptXSize")
+ self.loadInteger(
+ font, "openTypeOS2SuperscriptYSize", "ySuperscriptYSize")
+ self.loadInteger(
+ font, "openTypeOS2SuperscriptXOffset", "ySuperscriptXOffset")
+ self.loadInteger(
+ font, "openTypeOS2SuperscriptYOffset", "ySuperscriptYOffset")
+ self.loadInteger(font, "openTypeOS2StrikeoutSize", "yStrikeoutSize")
+ self.loadInteger(
+ font, "openTypeOS2StrikeoutPosition", "yStrikeoutPosition")
+
+ # XXX: panose
+
+ l = 0
+ OS2Layout.addWidget(usWidthClassLabel, l, 0)
+ OS2Layout.addWidget(self.usWidthClassDrop, l, 1, 1, 2)
+ OS2Layout.addWidget(achVendorIDLabel, l, 3)
+ OS2Layout.addWidget(self.achVendorIDEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(usWeightClassLabel, l, 0)
+ OS2Layout.addWidget(self.usWeightClassEdit, l, 1, 1, 2)
+ l += 1
+ OS2Layout.addWidget(fsSelectionLabel, l, 0, 3, 1)
+ OS2Layout.addWidget(self.fsSelectionList, l, 1, 3, 2)
+ OS2Layout.addWidget(fsTypeLabel, l, 3, 3, 1)
+ OS2Layout.addWidget(self.fsTypeDrop, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(self.allowSubsettingBox, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(self.allowBitmapEmbeddingBox, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(sTypoAscenderLabel, l, 0)
+ OS2Layout.addWidget(self.sTypoAscenderEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(usWinAscentLabel, l, 3)
+ OS2Layout.addWidget(self.usWinAscentEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(sTypoDescenderLabel, l, 0)
+ OS2Layout.addWidget(self.sTypoDescenderEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(usWinDescentLabel, l, 3)
+ OS2Layout.addWidget(self.usWinDescentEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(sTypoLineGapLabel, l, 0)
+ OS2Layout.addWidget(self.sTypoLineGapEdit, l, 1, 1, 2)
+ l += 1
+ OS2Layout.addWidget(ySubscriptXSizeLabel, l, 0)
+ OS2Layout.addWidget(self.ySubscriptXSizeEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(ySubscriptXOffsetLabel, l, 3)
+ OS2Layout.addWidget(self.ySubscriptXOffsetEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(ySubscriptYSizeLabel, l, 0)
+ OS2Layout.addWidget(self.ySubscriptYSizeEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(ySubscriptYOffsetLabel, l, 3)
+ OS2Layout.addWidget(self.ySubscriptYOffsetEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(ySuperscriptXSizeLabel, l, 0)
+ OS2Layout.addWidget(self.ySuperscriptXSizeEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(ySuperscriptXOffsetLabel, l, 3)
+ OS2Layout.addWidget(self.ySuperscriptXOffsetEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(ySuperscriptYSizeLabel, l, 0)
+ OS2Layout.addWidget(self.ySuperscriptYSizeEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(ySuperscriptYOffsetLabel, l, 3)
+ OS2Layout.addWidget(self.ySuperscriptYOffsetEdit, l, 4, 1, 2)
+ l += 1
+ OS2Layout.addWidget(yStrikeoutSizeLabel, l, 0)
+ OS2Layout.addWidget(self.yStrikeoutSizeEdit, l, 1, 1, 2)
+ OS2Layout.addWidget(yStrikeoutPositionLabel, l, 3)
+ OS2Layout.addWidget(self.yStrikeoutPositionEdit, l, 4, 1, 2)
+ # OS2Group.setLayout(OS2Layout)
+ self.setLayout(OS2Layout)
+
+ def _updateFsTypeVisibility(self, index):
+ if index == 0:
+ # TODO: maybe uncheck as well?
+ self.allowSubsettingBox.setEnabled(False)
+ self.allowBitmapEmbeddingBox.setEnabled(False)
+ else:
+ self.allowSubsettingBox.setEnabled(True)
+ self.allowBitmapEmbeddingBox.setEnabled(True)
+ def writeValues(self, font):
-class PostScriptTab(QWidget):
- name = "Postscript"
+ self.writePositiveInteger(
+ font, "usWeightClass", "openTypeOS2WeightClass")
+ self.writeInteger(font, "sTypoAscender", "openTypeOS2TypoAscender")
+ self.writeInteger(font, "sTypoDescender", "openTypeOS2TypoDescender")
+ self.writeInteger(font, "sTypoLineGap", "openTypeOS2TypoLineGap")
+ self.writePositiveInteger(font, "usWinAscent", "openTypeOS2WinAscent")
+ self.writePositiveInteger(
+ font, "usWinDescent", "openTypeOS2WinDescent")
+ self.writeInteger(font, "ySubscriptXSize", "openTypeOS2SubscriptXSize")
+ self.writeInteger(font, "ySubscriptYSize", "openTypeOS2SubscriptYSize")
+ self.writeInteger(
+ font, "ySubscriptXOffset", "openTypeOS2SubscriptXOffset")
+ self.writeInteger(
+ font, "ySubscriptYOffset", "openTypeOS2SubscriptYOffset")
+ self.writeInteger(
+ font, "ySuperscriptXSize", "openTypeOS2SuperscriptXSize")
+ self.writeInteger(
+ font, "ySuperscriptYSize", "openTypeOS2SuperscriptYSize")
+ self.writeInteger(
+ font, "ySuperscriptXOffset", "openTypeOS2SuperscriptXOffset")
+ self.writeInteger(
+ font, "ySuperscriptYOffset", "openTypeOS2SuperscriptYOffset")
+ self.writeInteger(font, "yStrikeoutSize", "openTypeOS2StrikeoutSize")
+ self.writeInteger(
+ font, "yStrikeoutPosition", "openTypeOS2StrikeoutPosition")
+
+ fsSelectionModel = self.fsSelectionList.model()
+ fsSelection = []
+ for i in range(7):
+ item = fsSelectionModel.item(i)
+ if item.checkState() == Qt.Checked:
+ fsSelection.append(i)
+ if len(fsSelection):
+ font.info.openTypeOS2Selection = fsSelection
+ else:
+ # XXX: None or empty array? should distinct those cases
+ font.info.openTypeOS2Selection = None
+
+ fsTypeIndex = self.fsTypeDrop.currentIndex()
+ fsType = []
+ if fsTypeIndex > 0:
+ fsType.append(fsTypeIndex)
+ if not self.allowSubsettingBox.isChecked():
+ fsType.append(8)
+ if self.allowBitmapEmbeddingBox.isChecked():
+ fsType.append(9)
+ # TODO: provide a way to represent None w this?
+ font.info.openTypeOS2Type = fsType
+
+ # TODO: see if data needs to be padded to 4 chars.
+ # I think that this is to be deferred to ufo2fdk(?)
+ font.info.openTypeOS2VendorID = self.achVendorIDEdit.text()
+
+ # XXX: ulUnicodeRange
+
+ # XXX: ulCodePageRange
+
+ # XXX: panose
+
+
+class PostScriptTab(TabWidget):
def __init__(self, font, parent=None):
- super(PostScriptTab, self).__init__(parent)
+ super().__init__(parent, name="PostScript")
namingGroup = QGroupBox("Naming", self)
# namingGroup.setFlat(True)
namingLayout = QGridLayout(self)
fontNameLabel = QLabel("FontName:", self)
- self.fontNameEdit = QLineEdit(font.info.postscriptFontName, self)
-
fullNameLabel = QLabel("FullName:", self)
- self.fullNameEdit = QLineEdit(font.info.postscriptFullName, self)
-
weightNameLabel = QLabel("WeightName:", self)
- self.weightNameEdit = QLineEdit(font.info.postscriptWeightName, self)
-
uniqueIDLabel = QLabel("Unique ID:", self)
- if font.info.postscriptUniqueID is not None:
- uniqueID = str(font.info.postscriptUniqueID)
- else:
- uniqueID = ''
- self.uniqueIDEdit = QLineEdit(uniqueID, self)
- self.uniqueIDEdit.setValidator(QIntValidator(self))
+ self.loadString(font, "postscriptFontName", "fontName")
+ self.loadString(font, "postscriptFullName", "fullName")
+ self.loadString(font, "postscriptWeightName", "weightName")
+ self.loadInteger(font, "postscriptUniqueID", "uniqueID")
l = 0
namingLayout.addWidget(fontNameLabel, l, 0)
@@ -749,25 +808,15 @@ class PostScriptTab(QWidget):
# hintingGroup.setFlat(True)
hintingLayout = QGridLayout(self)
+ self.loadIntegerFloatList(font, "postscriptBlueValues", "blueValues")
+ self.loadIntegerFloatList(font, "postscriptOtherBlues", "otherBlues")
+ self.loadIntegerFloatList(font, "postscriptFamilyBlues", "familyBlues")
+ self.loadIntegerFloatList(
+ font, "postscriptFamilyOtherBlues", "familyOtherBlues")
blueValuesLabel = QLabel("Blue values:", self)
- blueValues = " ".join(str(val)
- for val in font.info.postscriptBlueValues)
- self.blueValuesEdit = QLineEdit(blueValues, self)
-
otherBluesLabel = QLabel("Other blues:", self)
- otherBlues = " ".join(str(val)
- for val in font.info.postscriptOtherBlues)
- self.otherBluesEdit = QLineEdit(otherBlues, self)
-
familyBluesLabel = QLabel("Family blues:", self)
- familyBlues = " ".join(str(val)
- for val in font.info.postscriptFamilyBlues)
- self.familyBluesEdit = QLineEdit(familyBlues, self)
-
familyOtherBluesLabel = QLabel("Family other blues:", self)
- familyOtherBlues = " ".join(
- str(val) for val in font.info.postscriptFamilyOtherBlues)
- self.familyOtherBluesEdit = QLineEdit(familyOtherBlues, self)
l = 0
hintingLayout.addWidget(blueValuesLabel, l, 0)
@@ -782,45 +831,18 @@ class PostScriptTab(QWidget):
l += 1
blueFuzzLabel = QLabel("Blue fuzz:", self)
- if font.info.postscriptBlueFuzz is not None:
- blueFuzz = str(font.info.postscriptBlueFuzz)
- else:
- blueFuzz = ''
- self.blueFuzzEdit = QLineEdit(blueFuzz, self)
- self.blueFuzzEdit.setValidator(QDoubleValidator(self))
-
stemSnapHLabel = QLabel("StemSnapH:", self)
- stemSnapH = " ".join(str(val) for val in font.info.postscriptStemSnapH)
- self.stemSnapHEdit = QLineEdit(stemSnapH, self)
-
blueScaleLabel = QLabel("Blue scale:", self)
- if font.info.postscriptBlueScale is not None:
- blueScale = str(font.info.postscriptBlueScale)
- else:
- blueScale = ''
- self.blueScaleEdit = QLineEdit(blueScale, self)
- self.blueScaleEdit.setValidator(QDoubleValidator(self))
-
stemSnapVLabel = QLabel("StemSnapV:", self)
- stemSnapV = " ".join(str(val) for val in font.info.postscriptStemSnapV)
- self.stemSnapVEdit = QLineEdit(stemSnapV, self)
-
blueShiftLabel = QLabel("Blue shift:", self)
- if font.info.postscriptBlueShift is not None:
- blueShift = str(font.info.postscriptBlueShift)
- else:
- blueShift = ''
- self.blueShiftEdit = QLineEdit(blueShift, self)
- self.blueShiftEdit.setValidator(QDoubleValidator(self))
+ self.loadIntegerFloatList(font, "postscriptStemSnapH", "stemSnapH")
+ self.loadIntegerFloatList(font, "postscriptStemSnapV", "stemSnapV")
+ self.loadIntegerFloat(font, "postscriptBlueFuzz", "blueFuzz")
+ self.loadIntegerFloat(font, "postscriptBlueScale", "blueScale")
+ self.loadIntegerFloat(font, "postscriptBlueShift", "blueShift")
forceBoldLabel = QLabel("Force bold:", self)
- forceBold = font.info.postscriptForceBold
- self.forceBoldBox = QCheckBox(self)
- self.forceBoldBox.setTristate()
- if forceBold is None:
- self.forceBoldBox.setCheckState(Qt.PartiallyChecked)
- else:
- self.forceBoldBox.setChecked(forceBold)
+ self.loadBoolean(font, "postscriptForceBold", "forceBold")
hintingLayout.addWidget(blueFuzzLabel, l, 0)
hintingLayout.addWidget(self.blueFuzzEdit, l, 1, 1, 2)
@@ -843,53 +865,20 @@ class PostScriptTab(QWidget):
metricsLayout = QGridLayout(self)
defaultWidthXLabel = QLabel("DefaultWidthX:", self)
- if font.info.postscriptDefaultWidthX is not None:
- defaultWidthX = str(font.info.postscriptDefaultWidthX)
- else:
- defaultWidthX = ''
- self.defaultWidthXEdit = QLineEdit(defaultWidthX, self)
- self.defaultWidthXEdit.setValidator(QDoubleValidator(self))
-
underlineThicknessLabel = QLabel("UnderlineThickness:", self)
- if font.info.postscriptUnderlineThickness is not None:
- underlineThickness = str(font.info.postscriptUnderlineThickness)
- else:
- underlineThickness = ''
- self.underlineThicknessEdit = QLineEdit(underlineThickness, self)
- self.underlineThicknessEdit.setValidator(QDoubleValidator(self))
-
nominalWidthXLabel = QLabel("NominalWidthX:", self)
- if font.info.postscriptNominalWidthX is not None:
- nominalWidthX = str(font.info.postscriptNominalWidthX)
- else:
- nominalWidthX = ''
- self.nominalWidthXEdit = QLineEdit(nominalWidthX, self)
- self.nominalWidthXEdit.setValidator(QDoubleValidator(self))
-
underlinePositionLabel = QLabel("UnderlinePosition:", self)
- if font.info.postscriptUnderlinePosition is not None:
- underlinePosition = str(font.info.postscriptUnderlinePosition)
- else:
- underlinePosition = ''
- self.underlinePositionEdit = QLineEdit(underlinePosition, self)
- self.underlinePositionEdit.setValidator(QDoubleValidator(self))
-
slantAngleLabel = QLabel("SlantAngle:", self)
- if font.info.postscriptSlantAngle is not None:
- slantAngle = str(font.info.postscriptSlantAngle)
- else:
- slantAngle = ''
- self.slantAngleEdit = QLineEdit(slantAngle, self)
- self.slantAngleEdit.setValidator(QDoubleValidator(self))
+ self.loadIntegerFloat(font, "postscriptDefaultWidthX", "defaultWidthX")
+ self.loadIntegerFloat(font, "postscriptNominalWidthX", "nominalWidthX")
+ self.loadIntegerFloat(
+ font, "postscriptUnderlineThickness", "underlineThickness")
+ self.loadIntegerFloat(
+ font, "postscriptUnderlinePosition", "underlinePosition")
+ self.loadIntegerFloat(font, "postscriptSlantAngle", "slantAngle")
isFixedPitchLabel = QLabel("isFixedPitched:", self)
- isFixedPitch = font.info.postscriptIsFixedPitch
- self.isFixedPitchBox = QCheckBox(self)
- self.isFixedPitchBox.setTristate()
- if isFixedPitch is None:
- self.isFixedPitchBox.setCheckState(Qt.PartiallyChecked)
- else:
- self.isFixedPitchBox.setChecked(isFixedPitch)
+ self.loadBoolean(font, "postscriptIsFixedPitch", "isFixedPitch")
l = 0
metricsLayout.addWidget(defaultWidthXLabel, l, 0)
@@ -913,8 +902,7 @@ class PostScriptTab(QWidget):
charactersLayout = QGridLayout(self)
defaultCharacterLabel = QLabel("Default character:", self)
- self.defaultCharacterEdit = QLineEdit(
- font.info.postscriptDefaultCharacter, self)
+ self.loadString(font, "postscriptDefaultCharacter", "defaultCharacter")
windowsCharacterSetLabel = QLabel("Windows character set:", self)
self.windowsCharacterSetDrop = QComboBox(self)
@@ -943,150 +931,37 @@ class PostScriptTab(QWidget):
self.setLayout(mainLayout)
def writeValues(self, font):
- fontName = self.fontNameEdit.text()
- if fontName != '':
- font.info.postscriptFontName = fontName
- else:
- font.info.postscriptFontName = None
- fullName = self.fullNameEdit.text()
- if fullName != '':
- font.info.postscriptFullName = fullName
- else:
- font.info.postscriptFullName = None
- weightName = self.weightNameEdit.text()
- if weightName != '':
- font.info.postscriptWeightName = weightName
- else:
- font.info.postscriptWeightName = None
- uniqueID = self.uniqueIDEdit.text()
- if uniqueID != '':
- font.info.postscriptUniqueID = int(uniqueID)
- else:
- font.info.postscriptUniqueID = None
- blueValues = self.blueValuesEdit.text().split(" ")
- if blueValues is None:
- font.info.postscriptBlueValues = None
- else:
- blues = []
- for blue in blueValues:
- if blue != '':
- blues.append(int(blue))
- font.info.postscriptBlueValues = blues
- otherBlues = self.otherBluesEdit.text().split(" ")
- if otherBlues is None:
- font.info.postscriptOtherBlues = None
- else:
- blues = []
- for blue in otherBlues:
- if blue != '':
- blues.append(int(blue))
- font.info.postscriptOtherBlues = blues
- familyBlues = self.familyBluesEdit.text().split(" ")
- if familyBlues is None:
- font.info.postscriptFamilyBlues = None
- else:
- blues = []
- for blue in familyBlues:
- if blue != '':
- blues.append(int(blue))
- font.info.postscriptFamilyBlues = blues
- familyOtherBlues = self.familyOtherBluesEdit.text().split(" ")
- if familyOtherBlues is None:
- font.info.postscriptFamilyOtherBlues = None
- else:
- blues = []
- for blue in familyOtherBlues:
- if blue != '':
- blues.append(int(blue))
- font.info.postscriptFamilyOtherBlues = blues
- blueFuzz = self.blueFuzzEdit.text()
- if "." in blueFuzz:
- font.info.postscriptBlueFuzz = float(blueFuzz)
- elif blueFuzz != '':
- font.info.postscriptBlueFuzz = int(blueFuzz)
- else:
- font.info.postscriptBlueFuzz = None
- blueScale = self.blueScaleEdit.text()
- if blueScale != '':
- font.info.postscriptBlueScale = float(blueScale)
- else:
- font.info.postscriptBlueScale = None
- blueShift = self.blueShiftEdit.text()
- if "." in blueShift:
- font.info.postscriptBlueShift = float(blueShift)
- elif blueShift != '':
- font.info.postscriptBlueShift = int(blueShift)
- else:
- font.info.postscriptBlueShift = None
- stemSnapH = self.stemSnapHEdit.text().split(" ")
- if stemSnapH is None:
- font.info.postscriptStemSnapH = None
- else:
- stems = []
- for stem in stemSnapH:
- if stem != '':
- stems.append(int(stem))
- font.info.postscriptStemSnapH = stems
- stemSnapV = self.stemSnapVEdit.text().split(" ")
- if stemSnapV is None:
- font.info.postscriptStemSnapV = None
- else:
- stems = []
- for stem in stemSnapV:
- if stem != '':
- stems.append(int(stem))
- font.info.postscriptStemSnapV = stems
- forceBold = self.forceBoldBox.checkState()
- if forceBold == Qt.PartiallyChecked:
- font.info.postscriptForceBold = None
- else:
- font.info.postscriptForceBold = bool(forceBold)
- defaultWidthX = self.defaultWidthXEdit.text()
- if "." in defaultWidthX:
- font.info.postscriptDefaultWidthX = float(defaultWidthX)
- elif defaultWidthX != '':
- font.info.postscriptDefaultWidthX = int(defaultWidthX)
- else:
- font.info.postscriptDefaultWidthX = None
- nominalWidthX = self.nominalWidthXEdit.text()
- if "." in nominalWidthX:
- font.info.postscriptNominalWidthX = float(nominalWidthX)
- elif nominalWidthX != '':
- font.info.postscriptNominalWidthX = int(nominalWidthX)
- else:
- font.info.postscriptNominalWidthX = None
- underlineThickness = self.underlineThicknessEdit.text()
- if "." in underlineThickness:
- font.info.postscriptUnderlineThickness = float(underlineThickness)
- elif underlineThickness != '':
- font.info.postscriptUnderlineThickness = \
- int(underlineThickness)
- else:
- font.info.postscriptUnderlineThickness = None
- underlinePosition = self.underlinePositionEdit.text()
- if "." in underlinePosition:
- font.info.postscriptUnderlinePosition = float(underlinePosition)
- elif underlinePosition != '':
- font.info.postscriptUnderlinePosition = int(underlinePosition)
- else:
- font.info.postscriptUnderlinePosition = None
- slantAngle = self.slantAngleEdit.text()
- if "." in slantAngle:
- font.info.postscriptSlantAngle = float(slantAngle)
- elif slantAngle != '':
- font.info.postscriptSlantAngle = int(slantAngle)
- else:
- font.info.postscriptSlantAngle = None
- isFixedPitch = self.isFixedPitchBox.checkState()
- if isFixedPitch == Qt.PartiallyChecked:
- font.info.postscriptIsFixedPitch = None
- else:
- font.info.postscriptIsFixedPitch = bool(isFixedPitch)
- defaultCharacter = self.defaultCharacterEdit.text()
- if defaultCharacter != '':
- font.info.postscriptDefaultCharacter = defaultCharacter
- else:
- font.info.postscriptDefaultCharacter = None
+ self.writeString(font, "fontName", "postscriptFontName")
+ self.writeString(font, "fullName", "postscriptFullName")
+ self.writeString(font, "weightName", "postscriptWeightName")
+ self.writeInteger(font, "uniqueID", "postscriptUniqueID")
+ self.writeIntegerFloatList(font, "blueValues", "postscriptBlueValues")
+ self.writeIntegerFloatList(font, "otherBlues", "postscriptOtherBlues")
+ self.writeIntegerFloatList(
+ font, "familyBlues", "postscriptFamilyBlues")
+ self.writeIntegerFloatList(
+ font, "familyOtherBlues", "postscriptFamilyOtherBlues")
+ self.writeIntegerFloatList(font, "stemSnapH", "postscriptStemSnapH")
+ self.writeIntegerFloatList(font, "stemSnapV", "postscriptStemSnapV")
+ self.writeIntegerFloat(font, "blueFuzz", "postscriptBlueFuzz")
+ self.writeIntegerFloat(font, "blueScale", "postscriptBlueScale")
+ self.writeIntegerFloat(font, "blueShift", "postscriptBlueShift")
+ self.writeIntegerFloat(
+ font, "defaultWidthX", "postscriptDefaultWidthX")
+ self.writeIntegerFloat(
+ font, "nominalWidthX", "postscriptNominalWidthX")
+ self.writeIntegerFloat(
+ font, "underlineThickness", "postscriptUnderlineThickness")
+ self.writeIntegerFloat(
+ font, "underlinePosition", "postscriptUnderlinePosition")
+ self.writeIntegerFloat(font, "slantAngle", "postscriptSlantAngle")
+
+ self.writeBoolean(font, "forceBold", "postscriptForceBold")
+ self.writeBoolean(font, "isFixedPitch", "postscriptIsFixedPitch")
+
+ self.writeString(
+ font, "defaultCharacter", "postscriptDefaultCharacter")
+
windowsCharacterSet = self.windowsCharacterSetDrop.currentIndex()
if windowsCharacterSet == 0:
font.info.postscriptWindowsCharacterSet = None