Пример #1
0
 def onMonoFontChange(self, propagate=True):
     font = QFont(self.monoFontComboBox.currentFont())
     font.setPointSize(self.monoFontSizeSpinBox.value())
     if propagate and bool(self.state.model):
         self.state.model.setConfig(Gconf.Key.MonoFont, font.family())
         self.state.model.setConfig(Gconf.Key.MonoFontSize,
                                    font.pointSize())
Пример #2
0
 def onDisplayMonoFontChange(self, propagate=True):
     font = QFont(self.displaymonoFontComboBox.currentFont())
     font.setPointSize(self.displaymonoFontSizeSpinBox.value())
     if propagate:
         settings = QSettings()
         settings.setValue(Gopt.Key.MonoFont, font.family())
         settings.setValue(Gopt.Key.MonoFontSize, font.pointSize())
         self.state.updateDisplayFonts()
Пример #3
0
class Panel(QWidget):

    characterSelected = Signal(str)
    fontResized = Signal(float)

    def __init__(self, parent=None):
        super().__init__(parent)
        self.displayFont = QFont()
        self.displayFont.setStyleStrategy(QFont.PreferDefault)
        self.updateFont(self.displayFont.family())
        self.currentChar = ""
        self.setMouseTracking(True)
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding)

    def updateFont(self, family):
        self.displayFont.setFamily(family)
        self.updateSize(self.displayFont.pointSize())

    def updateSize(self, size):
        size = int(size)
        self.displayFont.setPointSize(size)
        self.squareSize = max(SQUARE_SIZE,
                              QFontMetrics(self.displayFont).xHeight() * 3)
        self.fontResized.emit(self.squareSize)
        self.adjustSize()
        self.update()

    def minimumWidth(self):
        return COLUMNS * self.squareSize

    def sizeHint(self):
        return QSize(self.minimumWidth(),
                     (MAX_CHAR / COLUMNS) * self.squareSize)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.currentChar = chr((event.y() // self.squareSize) * COLUMNS +
                                   event.x() // self.squareSize)
            if not unicodedata.category(self.currentChar).startswith("C"):
                self.characterSelected.emit(self.currentChar)
            self.update()
        else:
            super().mousePressEvent(event)

    def mouseMoveEvent(self, event):
        pos = self.mapFromGlobal(event.globalPos())
        code = ((pos.y() // self.squareSize) * COLUMNS +
                pos.x() // self.squareSize)
        name = "unnamed"
        try:
            name = unicodedata.name(chr(code)).capitalize()
        except ValueError:
            pass
        text = """<p><span style="font-size: 18pt;">{0:c}</span></p>
<p><span style="font-size: 13pt;">U+{0:04X}<br>{1}</span></p>""".format(
            code, name)
        QToolTip.showText(event.globalPos(), text, self)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.fillRect(event.rect(), Qt.white)
        painter.setFont(self.displayFont)

        redrawRect = event.rect()
        beginRow = redrawRect.top() // self.squareSize
        endRow = redrawRect.bottom() // self.squareSize
        beginColumn = redrawRect.left() // self.squareSize
        endColumn = redrawRect.right() // self.squareSize

        painter.setPen(Qt.gray)
        for row in range(beginRow, endRow + 1):
            for column in range(beginColumn, endColumn + 1):
                painter.drawRect(column * self.squareSize,
                                 row * self.squareSize, self.squareSize,
                                 self.squareSize)

        fontMetrics = QFontMetrics(self.displayFont)
        painter.setPen(Qt.black)
        for row in range(beginRow, endRow + 1):
            for column in range(beginColumn, endColumn + 1):
                char = chr(row * COLUMNS + column)
                painter.setClipRect(column * self.squareSize,
                                    row * self.squareSize, self.squareSize,
                                    self.squareSize)
                if char == self.currentChar:
                    painter.fillRect(column * self.squareSize + 1,
                                     row * self.squareSize + 1,
                                     self.squareSize, self.squareSize,
                                     Qt.green)
                painter.drawText(
                    column * self.squareSize + (self.squareSize / 2) -
                    fontMetrics.width(char) / 2,
                    row * self.squareSize + 4 + fontMetrics.ascent(), char)