Commit 79cb3b2d authored by dmMaze's avatar dmMaze
Browse files

optimize textitems' padding

parent b8e5bc09
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ AlignmentChecker#AlignRightChecker::indicator:checked {
}

QFontChecker {
    max-width: 32px;
    max-width: 34px;
}

QFontChecker::indicator {
+2 −2
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ def set_textblk_fontsize(blkitem: TextBlkItem, cursor: QTextCursor, fontsize):
        font.setPointSizeF(fontsize)
        doc.setDefaultFont(font)
    cursor.mergeBlockCharFormat(format)
    blkitem.setPadding(pt2px(fontsize))
    # blkitem.setPadding(pt2px(fontsize))

@restore_textcursor
def set_textblk_weight(blkitem, cursor: QTextCursor, weight):
@@ -551,7 +551,7 @@ class FontFormatPanel(Widget):
        self.vlayout.addLayout(hl1)
        self.vlayout.addLayout(hl2)
        self.vlayout.addLayout(hl3)
        self.vlayout.setContentsMargins(10, 10, 10, 10)
        self.vlayout.setContentsMargins(7, 7, 7, 7)
        self.setFixedWidth(C.TEXTEDIT_FIXWIDTH)

        self.focusOnColorDialog = False
+17 −8
Original line number Diff line number Diff line
from qtpy.QtCore import Qt, QRectF, QPointF, Signal, QSizeF, QSize
from qtpy.QtGui import QTextCharFormat, QTextDocument, QImage, QTransform, QPalette, QPainter, QTextFrame, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QTextOption, QTextLine, QTextFormat
from qtpy.QtGui import QTextCharFormat, QTextDocument, QPixmap, QImage, QTransform, QPalette, QPainter, QTextFrame, QTextBlock, QAbstractTextDocumentLayout, QTextLayout, QFont, QFontMetrics, QTextOption, QTextLine, QTextFormat

import cv2
import numpy as np
from typing import List
from functools import lru_cache, cached_property

from .misc import pixmap2ndarray, ndarray2pixmap, LruIgnoreArgs
from .misc import pixmap2ndarray, pt2px, LruIgnoreArgs
from . import constants as C

def print_transform(tr: QTransform):
@@ -147,6 +147,9 @@ class SceneTextLayout(QAbstractTextDocumentLayout):
        self._map_charidx2frag = []
        self._max_font_size = -1

        self.foreground_pixmap: QPixmap = None
        self.draw_foreground_only = False

    def setMaxSize(self, max_width: int, max_height: int, relayout=True):
        self.max_height = max_height
        self.max_width = max_width
@@ -212,11 +215,11 @@ class SceneTextLayout(QAbstractTextDocumentLayout):
            block = block.next()
        self.reLayout()

    def max_font_size(self) -> float:
        if self._max_font_size > 0:
            return self._max_font_size
        return self.document().defaultFont().pointSizeF()

    def max_font_size(self, to_px=False) -> float:
        fs = self._max_font_size if self._max_font_size > 0 else self.document().defaultFont().pointSizeF()
        if to_px:
            fs = pt2px(fs)
        return fs

class VerticalTextDocumentLayout(SceneTextLayout):

@@ -374,6 +377,9 @@ class VerticalTextDocumentLayout(SceneTextLayout):

            block = block.next()

        if self.foreground_pixmap is not None:
            painter.drawPixmap(0, 0, self.foreground_pixmap)

        if cursor_block is not None:
            block = cursor_block
            blk_text = block.text()
@@ -732,6 +738,9 @@ class HorizontalTextDocumentLayout(SceneTextLayout):
            layout.draw(painter, QPointF(0, 0), selections, clip)
            block = block.next()
        
        if self.foreground_pixmap is not None:
            painter.drawPixmap(0, 0, self.foreground_pixmap)

        if cursor_block is not None:
            block = cursor_block
            blpos = block.position()
+8 −17
Original line number Diff line number Diff line
@@ -46,8 +46,6 @@ class TextBlkItem(QGraphicsTextItem):
        self.oldPos = QPointF()
        self.oldRect = QRectF()

        self._padding = 0

        self.layout: Union[VerticalTextDocumentLayout, HorizontalTextDocumentLayout] = None
        self.document().setDocumentMargin(0)
        self.setVertical(False)
@@ -140,7 +138,6 @@ class TextBlkItem(QGraphicsTextItem):
            self.set_fontformat(font_fmt, set_char_format=set_char_fmt)

        if not blk.rich_text:
            self.setPadding(blk.font_size)
            if blk.translation:
                self.setPlainText(blk.translation)
        else:
@@ -148,14 +145,6 @@ class TextBlkItem(QGraphicsTextItem):
            self.letter_spacing = 1.
            self.setLetterSpacing(font_fmt.letter_spacing)

    def setHtml(self, html: str) -> None:
        fs = html_max_fontsize(html)
        if fs is None:
            fs = self.document().defaultFont().pointSizeF()
        fs = pt2px(fs)
        self.setPadding(fs)
        return super().setHtml(html)

    def setCenterTransform(self):
        center = self.boundingRect().center()
        self.setTransformOriginPoint(center)
@@ -210,9 +199,9 @@ class TextBlkItem(QGraphicsTextItem):
        return self.document().documentMargin()

    def setPadding(self, p: float):
        _p = self.padding()
        if _p > p:
            return
        # _p = self.padding()
        # if _p > p:
        #     return
        abr = self.absBoundingRect()
        if self.layout is not None:
            self.layout.updateDocumentMargin(p)
@@ -343,6 +332,10 @@ class TextBlkItem(QGraphicsTextItem):
        if self.stroke_width == stroke_width:
            return

        if stroke_width > 0:
            p = self.layout.max_font_size(to_px=True) * stroke_width / 2
            self.setPadding(p)

        self.stroke_width = stroke_width
        self.repaint_background()
        self.update()
@@ -521,8 +514,6 @@ class TextBlkItem(QGraphicsTextItem):
        if self.is_vertical != ffmat.vertical:
            self.setVertical(ffmat.vertical)

        self.setPadding(pt2px(ffmat.size))

        cursor = self.textCursor()
        cursor.movePosition(QTextCursor.MoveOperation.Start)
        format = cursor.charFormat()
@@ -551,8 +542,8 @@ class TextBlkItem(QGraphicsTextItem):
        # https://stackoverflow.com/questions/37160039/set-default-character-format-in-qtextdocument
        cursor.movePosition(QTextCursor.MoveOperation.Start)
        self.setTextCursor(cursor)
        self.stroke_color = QColor(ffmat.srgb[0], ffmat.srgb[1], ffmat.srgb[2])
        self.setStrokeWidth(ffmat.stroke_width)
        self.setStrokeColor(ffmat.srgb)
        
        alignment = [Qt.AlignmentFlag.AlignLeft, Qt.AlignmentFlag.AlignCenter, Qt.AlignmentFlag.AlignRight][ffmat.alignment]
        doc = self.document()