Пример #1
0
def GetTextSizeFromPainter(painter: QG.QPainter, text: str):

    try:

        text_size = painter.fontMetrics().size(QC.Qt.TextSingleLine, text)

    except ValueError:

        from hydrus.client.metadata import ClientTags

        if not ClientTags.have_shown_invalid_tag_warning:

            from hydrus.core import HydrusData

            HydrusData.ShowText(
                'Hey, I think hydrus stumbled across an invalid tag! Please run _database->check and repair->fix invalid tags_ immediately, or you may get errors!'
            )

            bad_text = repr(text)
            bad_text = HydrusText.ElideText(bad_text, 24)

            HydrusData.ShowText('The bad text was: {}'.format(bad_text))

            ClientTags.have_shown_invalid_tag_warning = True

        text = '*****INVALID, UNDISPLAYABLE TAG, RUN DATABASE REPAIR NOW*****'

        text_size = painter.fontMetrics().size(QC.Qt.TextSingleLine, text)

    return (text_size, text)
Пример #2
0
    def draw_entry_labels(painter: QPainter, geom: NodeGeometry,
                          state: NodeState, model: NodeDataModel,
                          node_style: NodeStyle):
        """
        Draw entry labels

        Parameters
        ----------
        painter : QPainter
        geom : NodeGeometry
        state : NodeState
        model : NodeDataModel
        node_style : NodeStyle
        """
        metrics = painter.fontMetrics()

        for port in state.ports:
            scene_pos = port.scene_position
            if not port.connections:
                painter.setPen(node_style.font_color_faded)
            else:
                painter.setPen(node_style.font_color)

            display_text = port.display_text
            rect = metrics.boundingRect(display_text)
            scene_pos.setY(scene_pos.y() + rect.height() / 4.0)
            if port.port_type == PortType.input:
                scene_pos.setX(5.0)
            elif port.port_type == PortType.output:
                scene_pos.setX(geom.width - 5.0 - rect.width())

            painter.drawText(scene_pos, display_text)
Пример #3
0
    def paintEvent(self, event):
        super().paintEvent(event)
        painter = QPainter(self)
        font_metrics = painter.fontMetrics()
        text_layout = QTextLayout(self._text, painter.font())
        text_layout.beginLayout()

        y = 0
        while True:
            line = text_layout.createLine()
            if not line.isValid():
                break
            line.setLineWidth(self.width())
            nextLineY = y + font_metrics.lineSpacing()
            if self.height() >= nextLineY + font_metrics.lineSpacing():
                line.draw(painter, QPoint(0, y))
                y = nextLineY
            else:
                lastLine = self._text[line.textStart():]
                elidedLastLine = font_metrics.elidedText(
                    lastLine, Qt.ElideRight, self.width())
                painter.drawText(QPoint(0, y + font_metrics.ascent()),
                                 elidedLastLine)
                line = text_layout.createLine()
                break
        text_layout.endLayout()
Пример #4
0
def get_font_array(sz, chars=DEFAULT_CHARS):
    from qtpy.QtGui import QFont, QPainter, QColor

    font = QFont()
    font.setFixedPitch(True)
    font.setPixelSize(int(sz))
    font.setStyleStrategy(QFont.NoAntialias)
    dummy = QImage(10, 10, QImage.Format_ARGB32)
    pnt = QPainter(dummy)
    pnt.setFont(font)
    metric = pnt.fontMetrics()
    rct = metric.boundingRect(chars)
    pnt.end()
    h = rct.height()
    w = rct.width()
    img = QImage(w, h, QImage.Format_ARGB32)
    paint = QPainter()
    paint.begin(img)
    paint.setFont(font)
    paint.setBrush(QColor(255, 255, 255))
    paint.setPen(QColor(255, 255, 255))
    paint.drawRect(0, 0, w + 1, h + 1)
    paint.setPen(QColor(0, 0, 0))
    paint.setBrush(QColor(0, 0, 0))
    paint.drawText(0, paint.fontMetrics().ascent(), chars)
    paint.end()
    try:
        try:
            # PyQt4 (at least until Qt 4.8)
            data = img.bits().asstring(img.numBytes())
        except AttributeError:
            if PYSIDE2:
                # PySide2
                data = bytes(img.bits())
            else:
                # PyQt5
                data = img.bits().asstring(img.byteCount())
    except SystemError:
        # PyQt4 (4.11.3) and PyQt5 (5.3.2) on Python 3
        return
    npy = np.frombuffer(data, np.uint8)
    npy.shape = img.height(), int(img.bytesPerLine() / 4), 4
    return npy[:, :, 0]