Commit d07e6818 authored by dmMaze's avatar dmMaze
Browse files

support reset angle

parent 0e6515d8
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ from typing import List, Union, Tuple

from qtpy.QtWidgets import QMenu, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsItem, QScrollBar, QGraphicsPixmapItem, QGraphicsSceneMouseEvent, QGraphicsSceneContextMenuEvent, QRubberBand
from qtpy.QtCore import Qt, QDateTime, QRectF, QPointF, QPoint, Signal, QSizeF, QEvent
from qtpy.QtGui import QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QPainter, QPen, QPainterPath, QCursor
from qtpy.QtGui import QKeySequence, QPixmap, QHideEvent, QKeyEvent, QWheelEvent, QResizeEvent, QPainter, QPen, QPainterPath, QCursor

try:
    from qtpy.QtWidgets import QUndoStack, QUndoCommand
@@ -92,6 +92,7 @@ class Canvas(QGraphicsScene):
    paste_textblks = Signal(QPointF)
    format_textblks = Signal()
    layout_textblks = Signal()
    reset_angle = Signal()

    run_blktrans = Signal(int)

@@ -540,11 +541,12 @@ class Canvas(QGraphicsScene):
            menu = QMenu()
            copy_act = menu.addAction(self.tr("Copy"))
            paste_act = menu.addAction(self.tr("Paste"))
            delete_act = menu.addAction(self.tr("Delete"))
            delete_act = menu.addAction(self.tr("Delete"), )
            delete_recover_act = menu.addAction(self.tr("Delete and Recover removed text"))
            menu.addSeparator()
            format_act = menu.addAction(self.tr("Apply font formatting"))
            layout_act = menu.addAction(self.tr("Auto layout"))
            angle_act = menu.addAction(self.tr("Reset Angle"))
            menu.addSeparator()
            translate_act = menu.addAction(self.tr("translate"))
            ocr_act = menu.addAction(self.tr("OCR"))
@@ -565,6 +567,8 @@ class Canvas(QGraphicsScene):
                self.format_textblks.emit()
            elif rst == layout_act:
                self.layout_textblks.emit()
            elif rst == angle_act:
                self.reset_angle.emit()
            elif rst == translate_act:
                self.run_blktrans.emit(-1)
            elif rst == ocr_act:
@@ -574,6 +578,7 @@ class Canvas(QGraphicsScene):
            elif rst == ocr_translate_inpaint_act:
                self.run_blktrans.emit(2)

    
    def on_hide_canvas(self):
        self.clear_states()

+7 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ from .canvas import Canvas
from .textedit_area import TextPanel, TransTextEdit, SourceTextEdit, TransPairWidget
from .fontformatpanel import set_textblk_fontsize
from .misc import FontFormat, ProgramConfig, pt2px
from .textedit_commands import propagate_user_edit, TextEditCommand, ReshapeItemCommand, MoveBlkItemsCommand, AutoLayoutCommand, ApplyFontformatCommand, ApplyEffectCommand, RotateItemCommand, TextItemEditCommand, TextEditCommand, PageReplaceOneCommand, PageReplaceAllCommand, MultiPasteCommand
from .textedit_commands import propagate_user_edit, TextEditCommand, ReshapeItemCommand, MoveBlkItemsCommand, AutoLayoutCommand, ApplyFontformatCommand, ApplyEffectCommand, RotateItemCommand, TextItemEditCommand, TextEditCommand, PageReplaceOneCommand, PageReplaceAllCommand, MultiPasteCommand, ResetAngleCommand
from utils.imgproc_utils import extract_ballon_region, rotate_polygons
from utils.text_processing import seg_text, is_cjk
from utils.text_layout import layout_text
@@ -276,6 +276,7 @@ class SceneTextManager(QObject):
        self.canvas.paste_textblks.connect(self.onPasteBlkItems)
        self.canvas.format_textblks.connect(self.onFormatTextblks)
        self.canvas.layout_textblks.connect(self.onAutoLayoutTextblks)
        self.canvas.reset_angle.connect(self.onResetAngle)
        self.txtblkShapeControl = canvas.txtblkShapeControl
        self.textpanel = textpanel

@@ -569,6 +570,11 @@ class SceneTextManager(QObject):

            self.canvas.push_undo_command(AutoLayoutCommand(selected_blks, old_rect_lst, old_html_lst, trans_widget_lst))

    def onResetAngle(self):
        selected_blks = self.get_selected_blkitems()
        if len(selected_blks) > 0:
            self.canvas.push_undo_command(ResetAngleCommand(selected_blks, self.txtblkShapeControl))

    def layout_textblk(self, blkitem: TextBlkItem, text: str = None, mask: np.ndarray = None, bounding_rect: List = None, region_rect: List = None):
        
        img = self.imgtrans_proj.img_array
+26 −0
Original line number Diff line number Diff line
@@ -204,6 +204,32 @@ class AutoLayoutCommand(QUndoCommand):
                item.setLetterSpacing(item.letter_spacing, force=True)


class ResetAngleCommand(QUndoCommand):
    def __init__(self, blkitem_lst: List[TextBlkItem], ctrl: TextBlkShapeControl):
        super(ResetAngleCommand, self).__init__()
        self.blkitem_lst = blkitem_lst
        self.angle_lst = []
        self.ctrl = ctrl
        blkitem_lst = []
        for blk in self.blkitem_lst:
            rotation = blk.rotation()
            if rotation != 0:
                self.angle_lst.append(rotation)
                blkitem_lst.append(blk)
        self.blkitem_lst = blkitem_lst
    
    def redo(self):
        for blk in self.blkitem_lst:
            blk.setAngle(0)
            if self.ctrl.blk_item == blk:
                self.ctrl.setAngle(0)

    def undo(self):
        for blk, angle in zip(self.blkitem_lst, self.angle_lst):
            blk.setAngle(angle)
            if self.ctrl.blk_item == blk:
                self.ctrl.setAngle(angle)

class TextItemEditCommand(QUndoCommand):
    def __init__(self, blkitem: TextBlkItem, trans_edit: TransTextEdit, num_steps: int):
        super(TextItemEditCommand, self).__init__()