diff options
| author | Adrien Tétar | 2015-06-12 15:23:40 +0200 |
|---|---|---|
| committer | Adrien Tétar | 2015-06-12 15:23:40 +0200 |
| commit | 49ce44561ec8ade6ee0618076bfb955e6d2aaf50 (patch) | |
| tree | e0b9a76f05a37af7bbd620f71b75493016ae6f92 /Lib/defconQt/fontInfo.py | |
| parent | 7e3af461d8516c2c761e3134aa86c4ecc7a2d05f (diff) | |
| download | trufont-49ce44561ec8ade6ee0618076bfb955e6d2aaf50.tar.bz2 | |
fontInfo: Postscript, part of OpenType, (partial) layout rework
Diffstat (limited to 'Lib/defconQt/fontInfo.py')
| -rw-r--r-- | Lib/defconQt/fontInfo.py | 724 |
1 files changed, 634 insertions, 90 deletions
diff --git a/Lib/defconQt/fontInfo.py b/Lib/defconQt/fontInfo.py index 8adb94e..bc9b9f2 100644 --- a/Lib/defconQt/fontInfo.py +++ b/Lib/defconQt/fontInfo.py @@ -1,9 +1,8 @@ -from PyQt5.QtCore import QDate, QDateTime, QTime, Qt -from PyQt5.QtGui import QDoubleValidator, QIntValidator -from PyQt5.QtWidgets import QComboBox, QDateTimeEdit, QDialog, QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QScrollArea, QTabWidget, QVBoxLayout, QWidget +from PyQt5.QtCore import *#QDate, QDateTime, QTime, Qt +from PyQt5.QtGui import *#QDoubleValidator, QIntValidator +from PyQt5.QtWidgets import *#QComboBox, QDateTimeEdit, QDialog, QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QScrollArea, QTabWidget, QVBoxLayout, QWidget class TabDialog(QDialog): - def __init__(self, font, parent=None): super(TabDialog, self).__init__(parent) @@ -11,15 +10,16 @@ class TabDialog(QDialog): self.tabs = { "General": 0, "Metrics": 1, - "OpenType": 2 + "OpenType": 2, + "PostScript": 3 } self.font = font self.tabWidget = QTabWidget() self.tabWidget.addTab(GeneralTab(self.font), "General") self.tabWidget.addTab(MetricsTab(self.font), "Metrics") -# self.tabWidget.addTab(ApplicationsTab(fileInfo), "OpenType") -# self.tabWidget.addTab(ApplicationsTab(fileInfo), "PostScript") + self.tabWidget.addTab(OpenTypeTab(self.font), "OpenType") + self.tabWidget.addTab(PostScriptTab(self.font), "PostScript") # self.tabWidget.addTab(ApplicationsTab(fileInfo), "Miscellaneous") buttonBox = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) @@ -37,6 +37,8 @@ class TabDialog(QDialog): def accept(self): self.tabWidget.widget(self.tabs["General"]).writeValues(self.font) self.tabWidget.widget(self.tabs["Metrics"]).writeValues(self.font) + self.tabWidget.widget(self.tabs["OpenType"]).writeValues(self.font) + self.tabWidget.widget(self.tabs["PostScript"]).writeValues(self.font) super(TabDialog, self).accept() class GeneralTab(QWidget): @@ -48,7 +50,7 @@ class GeneralTab(QWidget): self.familyNameEdit = QLineEdit(font.info.familyName, self) styleNameLabel = QLabel("Style name:", self) self.styleNameEdit = QLineEdit(font.info.styleName, self) - + mainLayout.addWidget(familyNameLabel, 0, 0) mainLayout.addWidget(self.familyNameEdit, 0, 1, 1, 3) mainLayout.addWidget(styleNameLabel, 0, 4) @@ -68,22 +70,22 @@ class GeneralTab(QWidget): 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/ versionLabel = QLabel("Version:", self) @@ -94,8 +96,10 @@ class GeneralTab(QWidget): versionDotLabel = QLabel(".", self) versionMinor = str(font.info.versionMinor) if font.info.versionMinor is not None else '' self.versionMinorEdit = QLineEdit(versionMinor, self) - self.versionMinorEdit.setValidator(QIntValidator(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) @@ -114,51 +118,61 @@ class GeneralTab(QWidget): time = parse[1].split(":") time = QTime(*(int(val) for val in time)) dateTime.setTime(time) - if not dateCreated: + else: cur = QDateTime.currentDateTime() dateTime.setDate(cur.date()) dateTime.setTime(cur.time()) self.dateCreatedEdit = QDateTimeEdit(dateTime, self) - + 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): - font.info.familyName = self.familyNameEdit.text() - font.info.styleName = self.styleNameEdit.text() - font.info.openTypeNameDesigner = self.designerEdit.text() - font.info.openTypeNameDesignerURL = self.designerURLEdit.text() - font.info.openTypeNameManufacturer = self.manufacturerEdit.text() - font.info.openTypeNameManufacturerURL = self.manufacturerURLEdit.text() - font.info.copyright = self.copyrightEdit.text() + familyName = self.familyNameEdit.text() + font.info.familyName = familyName if familyName != '' else None + styleName = self.styleNameEdit.text() + font.info.styleName = styleName if styleName != '' else None + designer = self.designerEdit.text() + font.info.openTypeNameDesigner = designer if designer != '' else None + designerURL = self.designerURLEdit.text() + font.info.openTypeNameDesignerURL = designerURL if designerURL != '' else None + manufacturer = self.manufacturerEdit.text() + font.info.openTypeNameManufacturer = manufacturer if manufacturer != '' else None + manufacturerURL = self.manufacturerURLEdit.text() + font.info.openTypeNameManufacturerURL = manufacturerURL if manufacturerURL != '' else None + copyright = self.copyrightEdit.text() + font.info.copyright = copyright if copyright != '' else None versionMajor = self.versionMajorEdit.text() font.info.versionMajor = int(versionMajor) if versionMajor else None versionMinor = self.versionMinorEdit.text() font.info.versionMinor = int(versionMinor) if versionMinor else None font.info.openTypeHeadCreated = self.dateCreatedEdit.dateTime().toString("yyyy/MM/dd hh:mm:ss") - font.info.openTypeNameLicense = self.licenseEdit.text() - font.info.openTypeNameLicenseURL = self.licenseURLEdit.text() - font.info.trademark = self.trademarkEdit.text() + license = self.licenseEdit.text() + font.info.openTypeNameLicense = license if license != '' else None + licenseURL = self.licenseURLEdit.text() + font.info.openTypeNameLicenseURL = licenseURL if licenseURL != '' else None + trademark = self.trademarkEdit.text() + font.info.trademark = trademark if trademark != '' else None class MetricsTab(QWidget): def __init__(self, font, parent=None): @@ -167,97 +181,627 @@ class MetricsTab(QWidget): styleMapFamilyLabel = QLabel("Style map family name:", self) self.styleMapFamilyEdit = QLineEdit(font.info.styleMapFamilyName, self) -# self.styleMapFamilyCBox = QCheckBox("Use default value", self) styleMapStyleLabel = QLabel("Style map style name:", self) self.styleMapStyleDrop = QComboBox(self) -# items = ["None", "Regular", "Italic", "Bold", "Bold Italic"] - styleMapStyle = { - "None": 0, - "Regular": 1, - "Italic": 2, - "Bold": 3, - "Bold Italic": 4 - } - for name,index in styleMapStyle.items(): - self.styleMapStyleDrop.insertItem(index, name) + items = ["None", "Regular", "Italic", "Bold", "Bold Italic"] + self.styleMapStyleDrop.insertItems(0, items) sn = font.info.styleMapStyleName - # TODO: index to set is statically known, should eventually get rid of dict overhead if any? - if sn == "regular": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Regular"]) - elif sn == "regular italic": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Italic"]) - elif sn == "bold": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Bold"]) - elif sn == "bold italic": self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["Bold Italic"]) - else: self.styleMapStyleDrop.setCurrentIndex(styleMapStyle["None"]) -# self.styleMapStyleCBox = QCheckBox("Use default value") + if sn == "regular": self.styleMapStyleDrop.setCurrentIndex(1) + elif sn == "regular italic": self.styleMapStyleDrop.setCurrentIndex(2) + elif sn == "bold": self.styleMapStyleDrop.setCurrentIndex(3) + elif sn == "bold italic": self.styleMapStyleDrop.setCurrentIndex(4) + else: self.styleMapStyleDrop.setCurrentIndex(0) mainLayout.addWidget(styleMapFamilyLabel, 0, 0) mainLayout.addWidget(self.styleMapFamilyEdit, 0, 1, 1, 3) mainLayout.addWidget(styleMapStyleLabel, 0, 4) 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)) + + mainLayout.addWidget(unitsPerEmLabel, 1, 0) + mainLayout.addWidget(self.unitsPerEmEdit, 1, 1) + mainLayout.addWidget(ascenderLabel, 1, 2) + 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)) - - unitsPerEmLabel = QLabel("Units per em:", self) - unitsPerEm = str(font.info.unitsPerEm) if font.info.unitsPerEm is not None else '' - self.unitsPerEmEdit = QLineEdit(unitsPerEm, self) - self.unitsPerEmEdit.setValidator(QIntValidator(self)) - - mainLayout.addWidget(ascenderLabel, 1, 0) - mainLayout.addWidget(self.ascenderEdit, 1, 1) - mainLayout.addWidget(descenderLabel, 1, 2) - mainLayout.addWidget(self.descenderEdit, 1, 3) - mainLayout.addWidget(unitsPerEmLabel, 1, 4) - mainLayout.addWidget(self.unitsPerEmEdit, 1, 5) 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)) - 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)) + mainLayout.addWidget(italicAngleLabel, 2, 0) + mainLayout.addWidget(self.italicAngleEdit, 2, 1) + mainLayout.addWidget(descenderLabel, 2, 2) + mainLayout.addWidget(self.descenderEdit, 2, 3) + mainLayout.addWidget(xHeightLabel, 2, 4) + mainLayout.addWidget(self.xHeightEdit, 2, 5) + + noteLabel = QLabel("Note:", self) + self.noteEdit = QPlainTextEdit(font.info.note, self) + + mainLayout.addWidget(noteLabel, 3, 0) + mainLayout.addWidget(self.noteEdit, 3, 1, 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)) - - mainLayout.addWidget(xHeightLabel, 2, 0) - mainLayout.addWidget(self.xHeightEdit, 2, 1) - mainLayout.addWidget(capHeightLabel, 2, 2) - mainLayout.addWidget(self.capHeightEdit, 2, 3) - mainLayout.addWidget(italicAngleLabel, 2, 4) - mainLayout.addWidget(self.italicAngleEdit, 2, 5) - self.setLayout(mainLayout) - + def writeValues(self, font): - font.info.styleMapFamilyName = self.styleMapFamilyEdit.text() + styleMapFamilyName = self.styleMapFamilyEdit.text() + font.info.styleMapFamilyName = styleMapFamilyName if styleMapFamilyName != '' else None sn = self.styleMapStyleDrop.currentIndex() if sn == 1: font.info.styleMapStyleName = "regular" elif sn == 2: font.info.styleMapStyleName = "italic" elif sn == 3: font.info.styleMapStyleName = "bold" elif sn == 4: font.info.styleMapStyleName = "bold italic" else: font.info.styleMapStyleName = None + unitsPerEm = self.unitsPerEmEdit.text() + font.info.unitsPerEm = float(unitsPerEm) if "." in unitsPerEm else int(unitsPerEm) if unitsPerEm else None + italicAngle = self.italicAngleEdit.text() + font.info.italicAngle = float(italicAngle) if "." in italicAngle else int(italicAngle) if italicAngle else None ascender = self.ascenderEdit.text() - font.info.ascender = int(ascender) if ascender else None + font.info.ascender = float(ascender) if "." in ascender else int(ascender) if ascender else None descender = self.descenderEdit.text() - font.info.descender = int(descender) if descender else None - unitsPerEm = self.unitsPerEmEdit.text() - font.info.unitsPerEm = int(unitsPerEm) if unitsPerEm else None - xHeight = self.xHeightEdit.text() - font.info.xHeight = int(xHeight) if xHeight else None + font.info.descender = float(descender) if "." in descender else int(descender) if descender else None capHeight = self.capHeightEdit.text() - font.info.capHeight = int(capHeight) if capHeight else None - italicAngle = self.italicAngleEdit.text() - font.info.italicAngle = float(italicAngle) if italicAngle else None + font.info.capHeight = float(capHeight) if "." in capHeight else int(capHeight) if capHeight else None + xHeight = self.xHeightEdit.text() + font.info.xHeight = float(xHeight) if "." in xHeight else int(xHeight) if xHeight else None + note = self.noteEdit.toPlainText() + font.info.note = note if note != '' else None + +class OpenTypeTab(QWidget): + def __init__(self, font, parent=None): + super(OpenTypeTab, self).__init__(parent) + l = 0 + + 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) + + nameLayout.addWidget(preferredFamilyNameLabel, l, 0) + nameLayout.addWidget(self.preferredFamilyNameEdit, l, 1, 1, 2) + nameLayout.addWidget(WWSFamilyNameLabel, l, 3) + nameLayout.addWidget(self.WWSFamilyNameEdit, l, 4, 1, 2) + l += 1 + nameLayout.addWidget(preferredSubfamilyNameLabel, l, 0) + nameLayout.addWidget(self.preferredSubfamilyNameEdit, l, 1, 1, 2) + nameLayout.addWidget(WWSSubfamilyNameLabel, l, 3) + nameLayout.addWidget(self.WWSSubfamilyNameEdit, l, 4, 1, 2) + l += 1 + nameLayout.addWidget(compatibleFullNameLabel, l, 0) + nameLayout.addWidget(self.compatibleFullNameEdit, l, 1, 1, 2) + l += 1 + nameLayout.addWidget(versionLabel, l, 0) + nameLayout.addWidget(self.versionEdit, l, 1, 1, 2) + nameLayout.addWidget(uniqueIDLabel, l, 3) + nameLayout.addWidget(self.uniqueIDEdit, l, 4, 1, 2) + l += 1 + nameLayout.addWidget(descriptionLabel, l, 0) + nameLayout.addWidget(self.descriptionEdit, l, 1, 1, 2) + nameLayout.addWidget(sampleTextLabel, l, 3) + nameLayout.addWidget(self.sampleTextEdit, l, 4, 1, 2) + nameGroup.setLayout(nameLayout) + l = 0 + + hheaGroup = QGroupBox("hhea table", self) + #hheaGroup.setFlat(True) + hheaLayout = QGridLayout(self) + + ascenderLabel = QLabel("Ascender:", self) + ascender = str(font.info.openTypeHheaAscender) if font.info.openTypeHheaAscender is not None else '' + self.ascenderEdit = QLineEdit(ascender, self) + self.ascenderEdit.setValidator(QIntValidator(self)) + + descenderLabel = QLabel("Descender:", self) + descender = str(font.info.openTypeHheaDescender) if font.info.openTypeHheaDescender is not None else '' + self.descenderEdit = QLineEdit(descender, self) + self.descenderEdit.setValidator(QIntValidator(self)) + + lineGapLabel = QLabel("LineGap:", self) + lineGap = str(font.info.openTypeHheaLineGap) if font.info.openTypeHheaLineGap is not None else '' + self.lineGapEdit = QLineEdit(lineGap, self) + self.lineGapEdit.setValidator(QIntValidator(self)) + + caretSlopeRiseLabel = QLabel("caretSlopeRise:", self) + caretSlopeRise = str(font.info.openTypeHheaCaretSlopeRise) if font.info.openTypeHheaCaretSlopeRise is not None else '' + self.caretSlopeRiseEdit = QLineEdit(caretSlopeRise, self) + self.caretSlopeRiseEdit.setValidator(QIntValidator(self)) + + caretSlopeRunLabel = QLabel("caretSlopeRun:", self) + caretSlopeRun = str(font.info.openTypeHheaCaretSlopeRun) if font.info.openTypeHheaCaretSlopeRun is not None else '' + self.caretSlopeRunEdit = QLineEdit(caretSlopeRun, self) + self.caretSlopeRunEdit.setValidator(QIntValidator(self)) + + caretOffsetLabel = QLabel("caretOffset:", self) + caretOffset = str(font.info.openTypeHheaCaretOffset) if font.info.openTypeHheaCaretOffset is not None else '' + self.caretOffsetEdit = QLineEdit(caretOffset, self) + self.caretOffsetEdit.setValidator(QIntValidator(self)) + + hheaLayout.addWidget(ascenderLabel, l, 0) + hheaLayout.addWidget(self.ascenderEdit, l, 1, 1, 2) + hheaLayout.addWidget(caretSlopeRiseLabel, l, 3) + hheaLayout.addWidget(self.caretSlopeRiseEdit, l, 4, 1, 2) + l += 1 + hheaLayout.addWidget(descenderLabel, l, 0) + hheaLayout.addWidget(self.descenderEdit, l, 1, 1, 2) + hheaLayout.addWidget(caretSlopeRunLabel, l, 3) + hheaLayout.addWidget(self.caretSlopeRunEdit, l, 4, 1, 2) + l += 1 + hheaLayout.addWidget(lineGapLabel, l, 0) + hheaLayout.addWidget(self.lineGapEdit, l, 1, 1, 2) + hheaLayout.addWidget(caretOffsetLabel, l, 3) + hheaLayout.addWidget(self.caretOffsetEdit, l, 4, 1, 2) + hheaGroup.setLayout(hheaLayout) + l = 0 + + vheaGroup = QGroupBox("vhea table", self) + #vheaGroup.setFlat(True) + vheaLayout = QGridLayout(self) + + vertTypoAscenderLabel = QLabel("vertTypoAscender:", self) + vertTypoAscender = str(font.info.openTypeVheaVertTypoAscender) if font.info.openTypeVheaVertTypoAscender is not None else '' + self.vertTypoAscenderEdit = QLineEdit(vertTypoAscender, self) + self.vertTypoAscenderEdit.setValidator(QIntValidator(self)) + + vertTypoDescenderLabel = QLabel("vertTypoDescender:", self) + vertTypoDescender = str(font.info.openTypeVheaVertTypoDescender) if font.info.openTypeVheaVertTypoDescender is not None else '' + self.vertTypoDescenderEdit = QLineEdit(vertTypoDescender, self) + self.vertTypoDescenderEdit.setValidator(QIntValidator(self)) + + vertTypoLineGapLabel = QLabel("vertTypoLineGap:", self) + vertTypoLineGap = str(font.info.openTypeVheaVertTypoLineGap) if font.info.openTypeVheaVertTypoLineGap is not None else '' + self.vertTypoLineGapEdit = QLineEdit(vertTypoLineGap, self) + self.vertTypoLineGapEdit.setValidator(QIntValidator(self)) + + vheaCaretSlopeRiseLabel = QLabel("caretSlopeRise:", self) + vheaCaretSlopeRise = str(font.info.openTypeVheaCaretSlopeRise) if font.info.openTypeVheaCaretSlopeRise is not None else '' + self.vheaCaretSlopeRiseEdit = QLineEdit(vheaCaretSlopeRise, self) + self.vheaCaretSlopeRiseEdit.setValidator(QIntValidator(self)) + + vheaCaretSlopeRunLabel = QLabel("caretSlopeRun:", self) + vheaCaretSlopeRun = str(font.info.openTypeVheaCaretSlopeRun) if font.info.openTypeVheaCaretSlopeRun is not None else '' + self.vheaCaretSlopeRunEdit = QLineEdit(vheaCaretSlopeRun, self) + self.vheaCaretSlopeRunEdit.setValidator(QIntValidator(self)) + + vheaCaretOffsetLabel = QLabel("caretOffset:", self) + vheaCaretOffset = str(font.info.openTypeVheaCaretOffset) if font.info.openTypeVheaCaretOffset is not None else '' + self.vheaCaretOffsetEdit = QLineEdit(vheaCaretOffset, self) + self.vheaCaretOffsetEdit.setValidator(QIntValidator(self)) + + vheaLayout.addWidget(vertTypoAscenderLabel, l, 0) + vheaLayout.addWidget(self.vertTypoAscenderEdit, l, 1, 1, 2) + vheaLayout.addWidget(vheaCaretSlopeRiseLabel, l, 3) + vheaLayout.addWidget(self.vheaCaretSlopeRiseEdit, l, 4, 1, 2) + l += 1 + vheaLayout.addWidget(vertTypoDescenderLabel, l, 0) + vheaLayout.addWidget(self.vertTypoDescenderEdit, l, 1, 1, 2) + vheaLayout.addWidget(vheaCaretSlopeRunLabel, l, 3) + vheaLayout.addWidget(self.vheaCaretSlopeRunEdit, l, 4, 1, 2) + l += 1 + vheaLayout.addWidget(vertTypoLineGapLabel, l, 0) + vheaLayout.addWidget(self.vertTypoLineGapEdit, l, 1, 1, 2) + vheaLayout.addWidget(vheaCaretOffsetLabel, l, 3) + vheaLayout.addWidget(self.vheaCaretOffsetEdit, l, 4, 1, 2) + vheaGroup.setLayout(vheaLayout) + l = 0 + + mainLayout = QVBoxLayout() + mainLayout.addWidget(nameGroup) + mainLayout.addWidget(hheaGroup) + mainLayout.addWidget(vheaGroup) + self.setLayout(mainLayout) + + def writeValues(self, font): + preferredFamilyName = self.preferredFamilyNameEdit.text() + font.info.openTypeNamePreferredFamilyName = preferredFamilyName if preferredFamilyName != '' else None + preferredSubfamilyName = self.preferredSubfamilyNameEdit.text() + font.info.openTypeNamePreferredSubfamilyName = preferredSubfamilyName if preferredSubfamilyName != '' else None + WWSFamilyName = self.WWSFamilyNameEdit.text() + font.info.openTypeNameWWSFamilyName = WWSFamilyName if WWSFamilyName != '' else None + WWSSubfamilyName = self.WWSSubfamilyNameEdit.text() + font.info.openTypeNameWWSSubfamilyName = WWSSubfamilyName if WWSSubfamilyName != '' else None + compatibleFullName = self.compatibleFullNameEdit.text() + font.info.openTypeNameCompatibleFullName = compatibleFullName if compatibleFullName != '' else None + version = self.versionEdit.text() + font.info.openTypeNameVersion = version if version != '' else None + uniqueID = self.uniqueIDEdit.text() + font.info.openTypeNameUniqueID = int(uniqueID) if uniqueID != '' else None + description = self.descriptionEdit.text() + font.info.openTypeNameDescription = description if description != '' else None + sampleText = self.sampleTextEdit.text() + font.info.openTypeNameSampleText = sampleText if sampleText != '' else None + ascender = self.ascenderEdit.text() + font.info.openTypeHheaAscender = int(ascender) if ascender != '' else None + descender = self.descenderEdit.text() + font.info.openTypeHheaDescender = int(descender) if descender != '' else None + lineGap = self.lineGapEdit.text() + font.info.openTypeHheaLineGap = int(lineGap) if lineGap != '' else None + caretSlopeRise = self.caretSlopeRiseEdit.text() + font.info.openTypeHheaCaretSlopeRise = int(caretSlopeRise) if caretSlopeRise != '' else None + caretSlopeRun = self.caretSlopeRunEdit.text() + font.info.openTypeHheaCaretSlopeRun = int(caretSlopeRun) if caretSlopeRun != '' else None + caretOffset = self.caretOffsetEdit.text() + font.info.openTypeHheaCaretOffset = int(caretOffset) if caretOffset != '' else None + vertTypoAscender = self.vertTypoAscenderEdit.text() + font.info.openTypeVheaAscender = int(vertTypoAscender) if vertTypoAscender != '' else None + vertTypoDescender = self.vertTypoDescenderEdit.text() + font.info.openTypeVheaDescender = int(vertTypoDescender) if vertTypoDescender != '' else None + vertTypoLineGap = self.vertTypoLineGapEdit.text() + font.info.openTypeVheaLineGap = int(vertTypoLineGap) if vertTypoLineGap != '' else None + vheaCaretSlopeRise = self.vheaCaretSlopeRiseEdit.text() + font.info.openTypeVheaCaretSlopeRise = int(vheaCaretSlopeRise) if vheaCaretSlopeRise != '' else None + vheaCaretSlopeRun = self.vheaCaretSlopeRunEdit.text() + font.info.openTypeVheaCaretSlopeRun = int(vheaCaretSlopeRun) if vheaCaretSlopeRun != '' else None + vheaCaretOffset = self.vheaCaretOffsetEdit.text() + font.info.openTypeVheaCaretOffset = int(vheaCaretOffset) if vheaCaretOffset != '' else None + +class PostScriptTab(QWidget): + def __init__(self, font, parent=None): + super(PostScriptTab, self).__init__(parent) + l = 0 + + 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) + uniqueID = str(font.info.postscriptUniqueID) if font.info.postscriptUniqueID is not None else '' + self.uniqueIDEdit = QLineEdit(uniqueID, self) + self.uniqueIDEdit.setValidator(QIntValidator(self)) + + namingLayout.addWidget(fontNameLabel, l, 0) + namingLayout.addWidget(self.fontNameEdit, l, 1, 1, 2) + namingLayout.addWidget(weightNameLabel, l, 3) + namingLayout.addWidget(self.weightNameEdit, l, 4, 1, 2) + l += 1 + namingLayout.addWidget(fullNameLabel, l, 0) + namingLayout.addWidget(self.fullNameEdit, l, 1, 1, 2) + namingLayout.addWidget(uniqueIDLabel, l, 3) + namingLayout.addWidget(self.uniqueIDEdit, l, 4, 1, 2) + namingGroup.setLayout(namingLayout) + l = 0 + + hintingGroup = QGroupBox("Hinting", self) + #hintingGroup.setFlat(True) + hintingLayout = QGridLayout(self) + + 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) + + hintingLayout.addWidget(blueValuesLabel, l, 0) + hintingLayout.addWidget(self.blueValuesEdit, l, 1, 1, 2) + hintingLayout.addWidget(familyBluesLabel, l, 3) + hintingLayout.addWidget(self.familyBluesEdit, l, 4, 1, 2) + l += 1 + hintingLayout.addWidget(otherBluesLabel, l, 0) + hintingLayout.addWidget(self.otherBluesEdit, l, 1, 1, 2) + hintingLayout.addWidget(familyOtherBluesLabel, l, 3) + hintingLayout.addWidget(self.familyOtherBluesEdit, l, 4, 1, 2) + l += 1 + + blueFuzzLabel = QLabel("Blue fuzz:", self) + blueFuzz = str(font.info.postscriptBlueFuzz) if font.info.postscriptBlueFuzz is not None else '' + 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) + blueScale = str(font.info.postscriptBlueScale) if font.info.postscriptBlueScale is not None else '' + 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) + blueShift = str(font.info.postscriptBlueShift) if font.info.postscriptBlueShift is not None else '' + self.blueShiftEdit = QLineEdit(blueShift, self) + self.blueShiftEdit.setValidator(QDoubleValidator(self)) + + 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) + + hintingLayout.addWidget(blueFuzzLabel, l, 0) + hintingLayout.addWidget(self.blueFuzzEdit, l, 1, 1, 2) + hintingLayout.addWidget(stemSnapHLabel, l, 3) + hintingLayout.addWidget(self.stemSnapHEdit, l, 4, 1, 2) + l += 1 + hintingLayout.addWidget(blueScaleLabel, l, 0) + hintingLayout.addWidget(self.blueScaleEdit, l, 1, 1, 2) + hintingLayout.addWidget(stemSnapVLabel, l, 3) + hintingLayout.addWidget(self.stemSnapVEdit, l, 4, 1, 2) + l += 1 + hintingLayout.addWidget(blueShiftLabel, l, 0) + hintingLayout.addWidget(self.blueShiftEdit, l, 1, 1, 2) + hintingLayout.addWidget(forceBoldLabel, l, 3) + hintingLayout.addWidget(self.forceBoldBox, l, 4, 1, 2) + hintingGroup.setLayout(hintingLayout) + l = 0 + + metricsGroup = QGroupBox("Metrics", self) + #metricsGroup.setFlat(True) + metricsLayout = QGridLayout(self) + + defaultWidthXLabel = QLabel("DefaultWidthX:", self) + defaultWidthX = str(font.info.postscriptDefaultWidthX) if font.info.postscriptDefaultWidthX is not None else '' + self.defaultWidthXEdit = QLineEdit(defaultWidthX, self) + self.defaultWidthXEdit.setValidator(QDoubleValidator(self)) + + underlineThicknessLabel = QLabel("UnderlineThickness:", self) + underlineThickness = str(font.info.postscriptUnderlineThickness) if font.info.postscriptUnderlineThickness is not None else '' + self.underlineThicknessEdit = QLineEdit(underlineThickness, self) + self.underlineThicknessEdit.setValidator(QDoubleValidator(self)) + + nominalWidthXLabel = QLabel("NominalWidthX:", self) + nominalWidthX = str(font.info.postscriptNominalWidthX) if font.info.postscriptNominalWidthX is not None else '' + self.nominalWidthXEdit = QLineEdit(nominalWidthX, self) + self.nominalWidthXEdit.setValidator(QDoubleValidator(self)) + + underlinePositionLabel = QLabel("UnderlinePosition:", self) + underlinePosition = str(font.info.postscriptUnderlinePosition) if font.info.postscriptUnderlinePosition is not None else '' + self.underlinePositionEdit = QLineEdit(underlinePosition, self) + self.underlinePositionEdit.setValidator(QDoubleValidator(self)) + + slantAngleLabel = QLabel("SlantAngle:", self) + slantAngle = str(font.info.postscriptSlantAngle) if font.info.postscriptSlantAngle is not None else '' + self.slantAngleEdit = QLineEdit(slantAngle, self) + self.slantAngleEdit.setValidator(QDoubleValidator(self)) + + 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) + + metricsLayout.addWidget(defaultWidthXLabel, l, 0) + metricsLayout.addWidget(self.defaultWidthXEdit, l, 1, 1, 2) + metricsLayout.addWidget(underlineThicknessLabel, l, 3) + metricsLayout.addWidget(self.underlineThicknessEdit, l, 4, 1, 2) + l += 1 + metricsLayout.addWidget(nominalWidthXLabel, l, 0) + metricsLayout.addWidget(self.nominalWidthXEdit, l, 1, 1, 2) + metricsLayout.addWidget(underlinePositionLabel, l, 3) + metricsLayout.addWidget(self.underlinePositionEdit, l, 4, 1, 2) + l += 1 + metricsLayout.addWidget(slantAngleLabel, l, 0) + metricsLayout.addWidget(self.slantAngleEdit, l, 1, 1, 2) + metricsLayout.addWidget(isFixedPitchLabel, l, 3) + metricsLayout.addWidget(self.isFixedPitchBox, l, 4, 1, 2) + metricsGroup.setLayout(metricsLayout) + l = 0 + + charactersGroup = QGroupBox("Characters", self) + #charactersGroup.setFlat(True) + charactersLayout = QGridLayout(self) + + defaultCharacterLabel = QLabel("Default character:", self) + self.defaultCharacterEdit = QLineEdit(font.info.postscriptDefaultCharacter, self) + + windowsCharacterSetLabel = QLabel("Windows character set:", self) + self.windowsCharacterSetDrop = QComboBox(self) + items = ["None", "ANSI", "Default", "Symbol", "Macintosh", "Shift JIS", "Hangul", "Hangul (Johab)", "GB2312", + "Chinese BIG5", "Greek", "Turkish", "Vietnamese", "Hebrew", "Arabic", "Baltic", "Bitstream", + "Cyrillic", "Thai", "Eastern European", "OEM"] + # windowsCharacterSet = { + # "ANSI": 1, + # "Default": 2, + # "Symbol": 3, + # "Macintosh": 4, + # "Shift JIS": 5, + # "Hangul": 6, + # "Hangul (Johab)": 7, + # "GB2312": 8, + # "Chinese BIG5": 9, + # "Greek": 10, + # "Turkish": 11, + # "Vietnamese": 12, + # "Hebrew": 13, + # "Arabic": 14, + # "Baltic": 15, + # "Bitstream": 16, + # "Cyrillic": 17, + # "Thai": 18, + # "Eastern European": 19, + # "OEM": 20, + # } + self.windowsCharacterSetDrop.insertItems(0, items) + if font.info.postscriptWindowsCharacterSet is not None: + self.windowsCharacterSetDrop.setCurrentIndex(font.info.postscriptWindowsCharacterSet) + #else: + # self.windowsCharacterSetDrop.setCurrentIndex(0) + + charactersLayout.addWidget(defaultCharacterLabel, l, 0) + charactersLayout.addWidget(self.defaultCharacterEdit, l, 1, 1, 2) + charactersLayout.addWidget(windowsCharacterSetLabel, l, 3) + charactersLayout.addWidget(self.windowsCharacterSetDrop, l, 4, 1, 2) + charactersGroup.setLayout(charactersLayout) + #l = 0 + + mainLayout = QVBoxLayout() + mainLayout.addWidget(namingGroup) + mainLayout.addWidget(hintingGroup) + mainLayout.addWidget(metricsGroup) + mainLayout.addWidget(charactersGroup) + self.setLayout(mainLayout) + + def writeValues(self, font): + fontName = self.fontNameEdit.text() + font.info.postscriptFontName = fontName if fontName != '' else None + fullName = self.fullNameEdit.text() + font.info.postscriptFullName = fullName if fullName != '' else None + weightName = self.weightNameEdit.text() + font.info.postscriptWeightName = weightName if weightName != '' else None + uniqueID = self.uniqueIDEdit.text() + font.info.postscriptUniqueID = int(uniqueID) if uniqueID != '' else 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() + font.info.postscriptBlueFuzz = float(blueFuzz) if "." in blueFuzz else int(blueFuzz) if blueFuzz != '' else None + blueScale = self.blueScaleEdit.text() + font.info.postscriptBlueScale = float(blueScale) if blueScale != '' else None + blueShift = self.blueShiftEdit.text() + font.info.postscriptBlueShift = float(blueShift) if "." in blueShift else int(blueShift) if blueShift != '' else 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() + font.info.postscriptDefaultWidthX = float(defaultWidthX) if "." in defaultWidthX else int(defaultWidthX) if defaultWidthX != '' else None + nominalWidthX = self.nominalWidthXEdit.text() + font.info.postscriptNominalWidthX = float(nominalWidthX) if "." in nominalWidthX else int(nominalWidthX) if nominalWidthX != '' else None + underlineThickness = self.underlineThicknessEdit.text() + font.info.postscriptUnderlineThickness = float(underlineThickness) if "." in underlineThickness else int(underlineThickness) if underlineThickness != '' else None + underlinePosition = self.underlinePositionEdit.text() + font.info.postscriptUnderlinePosition = float(underlinePosition) if "." in underlinePosition else int(underlinePosition) if underlinePosition != '' else None + slantAngle = self.slantAngleEdit.text() + font.info.postscriptSlantAngle = float(slantAngle) if "." in slantAngle else int(slantAngle) if slantAngle != '' else None + isFixedPitch = self.isFixedPitchBox.checkState() + if isFixedPitch == Qt.PartiallyChecked: + font.info.postscriptIsFixedPitch = None + else: + font.info.postscriptIsFixedPitch = bool(isFixedPitch) + defaultCharacter = self.defaultCharacterEdit.text() + font.info.postscriptDefaultCharacter = defaultCharacter if defaultCharacter != '' else None + windowsCharacterSet = self.windowsCharacterSetDrop.currentIndex() + if windowsCharacterSet == 0: + font.info.postscriptWindowsCharacterSet = None + else: + font.info.postscriptWindowsCharacterSet = windowsCharacterSet
\ No newline at end of file |
