From ac6e4e03704d0d3111e07412be0df6c5b4c6f2f9 Mon Sep 17 00:00:00 2001 From: dev Date: Fri, 20 Feb 2026 12:02:13 +0000 Subject: [PATCH] feat(canvas): implement class QtSlicingCanvas --- scanslicer/canvas.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scanslicer/canvas.py b/scanslicer/canvas.py index c6a5a44..60a736d 100644 --- a/scanslicer/canvas.py +++ b/scanslicer/canvas.py @@ -8,3 +8,32 @@ from .canvas_state import CanvasStateMixin # QtSlicingCanvas: class definition for ScanSlicer behavior. +class QtSlicingCanvas(CanvasInteractionMixin, CanvasRenderMixin, CanvasStateMixin, QWidget): + AUTO_FIT_SCALE = 0.95 + OFF_CANVAS_COLOR = QColor(38, 38, 38) + CORNER_HANDLE_HIT_RADIUS = 12.0 + SIDE_HANDLE_HIT_RADIUS = 14.0 + SIDE_HANDLE_SIZE_ACTIVE = 11.0 + SIDE_HANDLE_SIZE_INACTIVE = 9.0 + active_slice_changed = Signal(int) + + # __init__: function definition for ScanSlicer behavior. + def __init__(self, parent=None): + super().__init__(parent) + self.setMouseTracking(True) + self.setMinimumSize(640, 480) + + self.zoom = 1.0 + self.image = None + self.pan_offset = QPointF(0.0, 0.0) + self.slices = [] + self.active_slice_index = None + + self.corner_dragging = None + self.side_dragging = None + self.rotation_dragging = None + self.box_dragging = None + self.rotate_handles_mode = False + self.panning = False + self.last_mouse_pos = QPointF(0.0, 0.0) + self.user_transformed_view = False