Loading ballontranslator/data/config/stylesheet.css +1 −1 Original line number Diff line number Diff line Loading @@ -199,7 +199,7 @@ AlignmentChecker#AlignRightChecker::indicator:checked { } QFontChecker { max-width: 32px; max-width: 34px; } QFontChecker::indicator { Loading ballontranslator/ui/fontformatpanel.py +2 −2 Original line number Diff line number Diff line Loading @@ -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): Loading Loading @@ -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 Loading ballontranslator/ui/scene_textlayout.py +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): Loading Loading @@ -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 Loading Loading @@ -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): Loading Loading @@ -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() Loading Loading @@ -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() Loading ballontranslator/ui/textitem.py +8 −17 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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: Loading @@ -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) Loading Loading @@ -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) Loading Loading @@ -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() Loading Loading @@ -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() Loading Loading @@ -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() Loading Loading
ballontranslator/data/config/stylesheet.css +1 −1 Original line number Diff line number Diff line Loading @@ -199,7 +199,7 @@ AlignmentChecker#AlignRightChecker::indicator:checked { } QFontChecker { max-width: 32px; max-width: 34px; } QFontChecker::indicator { Loading
ballontranslator/ui/fontformatpanel.py +2 −2 Original line number Diff line number Diff line Loading @@ -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): Loading Loading @@ -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 Loading
ballontranslator/ui/scene_textlayout.py +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): Loading Loading @@ -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 Loading Loading @@ -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): Loading Loading @@ -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() Loading Loading @@ -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() Loading
ballontranslator/ui/textitem.py +8 −17 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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: Loading @@ -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) Loading Loading @@ -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) Loading Loading @@ -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() Loading Loading @@ -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() Loading Loading @@ -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() Loading