Fixed hang with gifs in duplicates form
This commit is contained in:
@@ -424,7 +424,7 @@ class FaceCanvas(QLabel):
|
||||
self.zoom_indicator_point = None
|
||||
self.zoom_indicator_timer = QTimer(self)
|
||||
self.zoom_indicator_timer.setSingleShot(True)
|
||||
self.zoom_indicator_timer.setInterval(500) # Show for 500ms
|
||||
self.zoom_indicator_timer.setInterval(500) # Show for 500ms
|
||||
self.zoom_indicator_timer.timeout.connect(self._clear_zoom_indicator)
|
||||
self.crop_rect = QRect()
|
||||
self.crop_handle = None
|
||||
@@ -636,13 +636,15 @@ class FaceCanvas(QLabel):
|
||||
|
||||
# Draw zoom indicator
|
||||
if self.zoom_indicator_point:
|
||||
painter.setPen(QPen(QColor(255, 255, 0), 2)) # Yellow crosshair
|
||||
painter.setPen(QPen(QColor(255, 255, 0), 2)) # Yellow crosshair
|
||||
painter.drawLine(self.zoom_indicator_point.x() - 10,
|
||||
self.zoom_indicator_point.y(),
|
||||
self.zoom_indicator_point.x() + 10,
|
||||
self.zoom_indicator_point.y())
|
||||
painter.drawLine(self.zoom_indicator_point.x(), self.zoom_indicator_point.y() - 10,
|
||||
self.zoom_indicator_point.x(), self.zoom_indicator_point.y() + 10)
|
||||
painter.drawLine(self.zoom_indicator_point.x(),
|
||||
self.zoom_indicator_point.y() - 10,
|
||||
self.zoom_indicator_point.x(),
|
||||
self.zoom_indicator_point.y() + 10)
|
||||
|
||||
def _hit_test(self, pos):
|
||||
"""Determines if the mouse is over a name, handle, or body."""
|
||||
@@ -1145,7 +1147,8 @@ class ZoomManager(QObject):
|
||||
|
||||
def zoom(self, factor=1.1, reset=False, focus_point=None, absolute_factor=None):
|
||||
"""Applies zoom to the image, centering on focus_point if provided."""
|
||||
if not self.viewer.controller or self.viewer.controller.pixmap_original.isNull():
|
||||
if not self.viewer.controller or \
|
||||
self.viewer.controller.pixmap_original.isNull():
|
||||
return
|
||||
|
||||
c_point = None
|
||||
@@ -1155,9 +1158,10 @@ class ZoomManager(QObject):
|
||||
self.viewer.update_view(resize_win=True)
|
||||
if self.viewer.canvas:
|
||||
c_point = self.viewer.canvas.rect().center()
|
||||
elif absolute_factor is not None: # New: set absolute zoom factor
|
||||
elif absolute_factor is not None: # New: set absolute zoom factor
|
||||
self.viewer.controller.zoom_factor = absolute_factor
|
||||
self.viewer.update_view(resize_win=False) # Don't resize window for sync zoom
|
||||
# Don't resize window for sync zoom
|
||||
self.viewer.update_view(resize_win=False)
|
||||
if focus_point is not None and self.viewer.canvas:
|
||||
scroll_area = self.viewer.scroll_area
|
||||
viewport = scroll_area.viewport()
|
||||
@@ -1171,7 +1175,8 @@ class ZoomManager(QObject):
|
||||
if focus_point is None:
|
||||
v_point = viewport.rect().center()
|
||||
else:
|
||||
# focus_point es relativo al widget self.viewer (ImageViewer o ImagePane)
|
||||
# focus_point es relativo al widget self.viewer (ImageViewer o
|
||||
# ImagePane)
|
||||
v_point = viewport.mapFrom(self.viewer, focus_point)
|
||||
|
||||
# 2. Mapear el punto de enfoque a coordenadas del canvas antes del zoom
|
||||
@@ -1181,7 +1186,8 @@ class ZoomManager(QObject):
|
||||
# Aplicar la actualización (esto redimensiona el canvas)
|
||||
self.viewer.update_view(resize_win=(not self.viewer.isFullScreen()))
|
||||
|
||||
# 3. Ajustar las barras de desplazamiento para mantener el píxel bajo el cursor
|
||||
# 3. Ajustar las barras de desplazamiento para mantener el píxel bajo el
|
||||
# cursor
|
||||
scroll_area.horizontalScrollBar().setValue(
|
||||
int(c_point.x() * factor - v_point.x()))
|
||||
scroll_area.verticalScrollBar().setValue(
|
||||
@@ -1721,7 +1727,9 @@ class ImageViewer(QWidget):
|
||||
|
||||
for pane in self.panes:
|
||||
if pane != self.active_pane:
|
||||
QTimer.singleShot(0, lambda p=pane, x=x_pct, y=y_pct: p.set_scroll_relative(x, y))
|
||||
QTimer.singleShot(
|
||||
0, lambda p=pane, x=x_pct,
|
||||
y=y_pct: p.set_scroll_relative(x, y))
|
||||
|
||||
def update_grid_layout(self):
|
||||
# Clear layout
|
||||
@@ -1761,7 +1769,8 @@ class ImageViewer(QWidget):
|
||||
new_idx = (start_idx + i + 1) % len(img_list)
|
||||
pane = self.add_pane(img_list, new_idx, None, 0) # Metadata will load
|
||||
if self.panes_linked and self.active_pane:
|
||||
pane.controller.zoom_factor = self.active_pane.controller.zoom_factor
|
||||
pane.controller.zoom_factor = \
|
||||
self.active_pane.controller.zoom_factor
|
||||
pane.load_and_fit_image()
|
||||
else:
|
||||
# Remove panes (keep active if possible, else keep first)
|
||||
@@ -1779,7 +1788,7 @@ class ImageViewer(QWidget):
|
||||
# sizing
|
||||
QTimer.singleShot(
|
||||
0, lambda: self.active_pane.update_view(resize_win=True))
|
||||
self.adjustSize() # Ajustar el tamaño de la ventana después de añadir/eliminar paneles
|
||||
self.adjustSize()
|
||||
|
||||
def toggle_link_panes(self):
|
||||
"""Toggles the synchronized zoom/scroll for comparison mode."""
|
||||
|
||||
Reference in New Issue
Block a user