diff options
| author | Adrien Tétar | 2015-05-26 21:53:37 +0200 |
|---|---|---|
| committer | Adrien Tétar | 2015-05-26 21:53:37 +0200 |
| commit | ecc65d68e0b990399c38e671b48434246dd17592 (patch) | |
| tree | ef0a39254e9d3605d957e5311add243c372b17e2 | |
| parent | ebf00c3a324a4bc11bab15fb59c2ca2c480aba9c (diff) | |
| download | trufont-ecc65d68e0b990399c38e671b48434246dd17592.tar.bz2 | |
fontInfo: shufflings, featEditor, fixes
| -rw-r--r-- | Lib/defconQt/fontView.py | 2 | ||||
| -rw-r--r-- | Lib/defconQt/fontinfo.py | 95 | ||||
| -rw-r--r-- | Lib/defconQt/spacecenter.py | 2 | ||||
| -rw-r--r-- | Lib/defconQt/syntaxhighlighter.py | 81 |
4 files changed, 97 insertions, 83 deletions
diff --git a/Lib/defconQt/fontView.py b/Lib/defconQt/fontView.py index 5d242ae..beb86d6 100644 --- a/Lib/defconQt/fontView.py +++ b/Lib/defconQt/fontView.py @@ -313,7 +313,7 @@ class MainWindow(QMainWindow): def newFile(self): # TODO: ask for save before leaving self.font = Font() - self.font.info.upm = 1000 + self.font.info.unitsPerEm = 1000 self.font.info.ascender = 750 self.font.info.descender = -250 self.font.info.capHeight = 750 diff --git a/Lib/defconQt/fontinfo.py b/Lib/defconQt/fontinfo.py index 30cbcb2..492f92f 100644 --- a/Lib/defconQt/fontinfo.py +++ b/Lib/defconQt/fontinfo.py @@ -1,6 +1,6 @@ -from PyQt5.QtCore import Qt +from PyQt5.QtCore import QDate, QDateTime, QTime, Qt from PyQt5.QtGui import QDoubleValidator, QIntValidator -from PyQt5.QtWidgets import QComboBox, QDialog, QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QScrollArea, QTabWidget, QVBoxLayout, QWidget +from PyQt5.QtWidgets import QComboBox, QDateTimeEdit, QDialog, QDialogButtonBox, QFrame, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QScrollArea, QTabWidget, QVBoxLayout, QWidget class TabDialog(QDialog): @@ -9,7 +9,8 @@ class TabDialog(QDialog): # TODO: figure a proper correspondence to set and fetch widgets... self.tabs = { - "General": 0 + "General": 0, + "Metrics": 1 } self.font = font @@ -33,6 +34,7 @@ class TabDialog(QDialog): def accept(self): self.tabWidget.widget(self.tabs["General"]).writeValues(self.font) + self.tabWidget.widget(self.tabs["Metrics"]).writeValues(self.font) super(TabDialog, self).accept() class GeneralTab(QWidget): @@ -83,24 +85,41 @@ class GeneralTab(QWidget): # 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) - self.versionMajorEdit = QLineEdit(str(font.info.versionMajor or ''), self) + versionMajor = str(font.info.versionMajor) if font.info.versionMajor is not None else '' + self.versionMajorEdit = QLineEdit(versionMajor, self) self.versionMajorEdit.setAlignment(Qt.AlignRight) self.versionMajorEdit.setValidator(QIntValidator(self)) versionDotLabel = QLabel(".", self) - self.versionMinorEdit = QLineEdit(str(font.info.versionMinor or ''), self)#.zfill(3)) + versionMinor = str(font.info.versionMinor) if font.info.versionMinor is not None else '' + self.versionMinorEdit = QLineEdit(versionMinor, self) self.versionMinorEdit.setValidator(QIntValidator(self)) mainLayout.addWidget(versionLabel, 6, 0) mainLayout.addWidget(self.versionMajorEdit, 6, 1) mainLayout.addWidget(versionDotLabel, 6, 2) mainLayout.addWidget(self.versionMinorEdit, 6, 3) + + dateCreatedLabel = QLabel("Date created:", self) + dateTime = QDateTime() + #dateTime.fromString(font.info.openTypeHeadCreated, "yyyy/MM/dd hh:mm:ss") # XXX: why does this not work? + dateCreated = font.info.openTypeHeadCreated + if dateCreated: + parse = dateCreated.split(" ") + if len(parse) == 2: + date = parse[0].split("/") + date = QDate(*(int(val) for val in date)) + dateTime.setDate(date) + time = parse[1].split(":") + time = QTime(*(int(val) for val in time)) + dateTime.setTime(time) + if not dateCreated: + cur = QDateTime.currentDateTime() + dateTime.setDate(cur.date()) + dateTime.setTime(cur.time()) + self.dateCreatedEdit = QDateTimeEdit(dateTime, self) - unitsPerEmLabel = QLabel("Units per em:", self) - self.unitsPerEmEdit = QLineEdit(str(font.info.unitsPerEm or ''), self) - self.unitsPerEmEdit.setValidator(QIntValidator(self)) - - mainLayout.addWidget(unitsPerEmLabel, 6, 4) - mainLayout.addWidget(self.unitsPerEmEdit, 6, 5) + mainLayout.addWidget(dateCreatedLabel, 6, 4) + mainLayout.addWidget(self.dateCreatedEdit, 6, 5) licenseLabel = QLabel("License:", self) self.licenseEdit = QLineEdit(font.info.openTypeNameLicense, self) @@ -130,9 +149,11 @@ class GeneralTab(QWidget): font.info.openTypeNameManufacturer = self.manufacturerEdit.text() font.info.openTypeNameManufacturerURL = self.manufacturerURLEdit.text() font.info.copyright = self.copyrightEdit.text() - font.info.versionMajor = int(self.versionMajorEdit.text()) - font.info.versionMinor = int(self.versionMinorEdit.text()) - font.info.unitsPerEm = int(self.unitsPerEmEdit.text()) + 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() @@ -173,36 +194,48 @@ class NextTab(QWidget): mainLayout.addWidget(self.styleMapStyleDrop, 0, 5) ascenderLabel = QLabel("Ascender:", self) - self.ascenderEdit = QLineEdit(str(font.info.ascender or ''), self) + ascender = str(font.info.ascender) if font.info.ascender is not None else '' + self.ascenderEdit = QLineEdit(ascender, self) self.ascenderEdit.setValidator(QIntValidator(self)) descenderLabel = QLabel("Descender:", self) - self.descenderEdit = QLineEdit(str(font.info.descender or ''), self) + descender = str(font.info.descender) if font.info.descender is not None else '' + self.descenderEdit = QLineEdit(descender, self) self.descenderEdit.setValidator(QIntValidator(self)) - - italicAngleLabel = QLabel("Italic angle:", self) - self.italicAngleEdit = QLineEdit(str(font.info.italicAngle or ''), self) - self.italicAngleEdit.setValidator(QDoubleValidator(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(italicAngleLabel, 1, 4) - mainLayout.addWidget(self.italicAngleEdit, 1, 5) + mainLayout.addWidget(unitsPerEmLabel, 1, 4) + mainLayout.addWidget(self.unitsPerEmEdit, 1, 5) xHeightLabel = QLabel("x-height:", self) - self.xHeightEdit = QLineEdit(str(font.info.xHeight or ''), 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) - self.capHeightEdit = QLineEdit(str(font.info.capHeight or ''), 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) + 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) @@ -213,4 +246,16 @@ class NextTab(QWidget): 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
\ No newline at end of file + else: font.info.styleMapStyleName = None + ascender = self.ascenderEdit.text() + font.info.ascender = 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 + 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
\ No newline at end of file diff --git a/Lib/defconQt/spacecenter.py b/Lib/defconQt/spacecenter.py index 07b1ed5..6c15152 100644 --- a/Lib/defconQt/spacecenter.py +++ b/Lib/defconQt/spacecenter.py @@ -44,7 +44,7 @@ class MainSpaceWindow(QWidget): self._unsubscribeFromGlyphs() super(MainSpaceWindow, self).close() - def _fontInfoChanged(self): + def _fontInfoChanged(self, event): self.canvas.update() def _glyphChanged(self, event): diff --git a/Lib/defconQt/syntaxhighlighter.py b/Lib/defconQt/syntaxhighlighter.py index a5f0988..556735c 100644 --- a/Lib/defconQt/syntaxhighlighter.py +++ b/Lib/defconQt/syntaxhighlighter.py @@ -1,5 +1,5 @@ from PyQt5.QtCore import QFile, QRegExp, Qt -from PyQt5.QtGui import QColor, QFont, QKeySequence, QPainter, QSyntaxHighlighter, QTextCharFormat +from PyQt5.QtGui import QColor, QFont, QKeySequence, QPainter, QSyntaxHighlighter, QTextCharFormat, QTextCursor from PyQt5.QtWidgets import (QApplication, QFileDialog, QMainWindow, QMenu, QMessageBox, QPlainTextEdit, QWidget) @@ -51,14 +51,14 @@ class TextEditor(QPlainTextEdit): font.setPointSize(10) font.setFixedPitch(True) - self.setPlainText(text) - self.setFont(font) - + self._indent = " " self.highlighter = Highlighter(self.document()) - # TODO: get rid of jitter on opening self.lineNumbers = LineNumberArea(self) self.blockCountChanged.connect(self.updateLineNumberAreaWidth) self.updateRequest.connect(self.updateLineNumberArea) + + self.setPlainText(text) + self.setFont(font) def setFontParams(self, family='CamingoCode', ptSize=10, isMono=True): font = QFont() @@ -77,7 +77,7 @@ class TextEditor(QPlainTextEdit): a = event.rect().bottomRight() painter.setPen(Qt.darkGray) painter.drawLine(d.x(), d.y(), a.x(), a.y()) - painter.setPen(Qt.black) + painter.setPen(QColor(100, 100, 100)) painter.setFont(self.font()) block = self.firstVisibleBlock() @@ -102,6 +102,8 @@ class TextEditor(QPlainTextEdit): while (top >= 10): top /= 10 digits += 1 + # Avoid too frequent geometry changes + if digits < 3: digits = 3 return 10 + self.fontMetrics().width('9') * digits def updateLineNumberArea(self, rect, dy): @@ -122,25 +124,27 @@ class TextEditor(QPlainTextEdit): cr = self.contentsRect() self.lineNumbers.setGeometry(cr.left(), cr.top(), self.lineNumberAreaWidth(), cr.height()) - ''' + # TODO: add closing bracket and feature name def keyPressEvent(self, event): if event.key() == Qt.Key_Return: - content = self.toPlainText() - cur_pos = self.textCursor().position() - if (content[cur_pos-1] == "{"): - #print(content[:cur_pos+1]) - #print(content[cur_pos+1:]) - # Probably does not handle CR properly - newtext = content[:cur_pos+1] + " \n" + content[cur_pos+1:] - #print(newtext) - self.setPlainText(newtext) - self.textCursor().setPosition(cur_pos+5) + cursor = self.textCursor() + indentLvl = 0 + cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.KeepAnchor) + if cursor.selectedText() == '{': indentLvl += 1 + cursor.select(QTextCursor.LineUnderCursor) + lineLength = len(cursor.selectedText()) // len(self._indent) + cursor.movePosition(QTextCursor.StartOfLine) + while (lineLength > 0): + cursor.movePosition(QTextCursor.NextCharacter, QTextCursor.KeepAnchor, len(self._indent)) + if cursor.selectedText() == self._indent: + indentLvl += 1 + cursor.movePosition(QTextCursor.NoMove) + lineLength -= 1 + cursor.movePosition(QTextCursor.EndOfLine) + super(TextEditor, self).keyPressEvent(event) + cursor.insertText("".join((self._indent for _ in range(indentLvl)))) else: super(TextEditor, self).keyPressEvent(event) - ''' - - def insertSpaces(self, text): - print(text[-1]) class Highlighter(QSyntaxHighlighter): def __init__(self, parent=None): @@ -178,21 +182,6 @@ class Highlighter(QSyntaxHighlighter): classFormat.setForeground(QColor(200,50,150)) self.highlightingRules.append((QRegExp("@[A-Za-z0-9_.]+"), classFormat)) -# self.multiLineCommentFormat = QTextCharFormat() -# self.multiLineCommentFormat.setForeground(Qt.red) - -# quotationFormat = QTextCharFormat() -# quotationFormat.setForeground(Qt.darkGreen) -# self.highlightingRules.append((QRegExp("\".*\""), quotationFormat)) - -# functionFormat = QTextCharFormat() -# functionFormat.setFontItalic(True) -# functionFormat.setForeground(Qt.blue) -# self.highlightingRules.append((QRegExp("\\b[A-Za-z0-9_]+(?=\\()"), -# functionFormat)) - -# self.commentStartExpression = QRegExp("/\\*") -# self.commentEndExpression = QRegExp("\\*/") def highlightBlock(self, text): for pattern, format in self.highlightingRules: @@ -205,26 +194,6 @@ class Highlighter(QSyntaxHighlighter): self.setCurrentBlockState(0) - ''' - startIndex = 0 - if self.previousBlockState() != 1: - startIndex = self.commentStartExpression.indexIn(text) - - while startIndex >= 0: - endIndex = self.commentEndExpression.indexIn(text, startIndex) - - if endIndex == -1: - self.setCurrentBlockState(1) - commentLength = len(text) - startIndex - else: - commentLength = endIndex - startIndex + self.commentEndExpression.matchedLength() - - self.setFormat(startIndex, commentLength, - self.multiLineCommentFormat) - startIndex = self.commentStartExpression.indexIn(text, - startIndex + commentLength); - ''' - if __name__ == '__main__': import sys |
