fix lack of snapping toggle
This commit is contained in:
parent
ea4afadf54
commit
ddcfada636
@ -543,16 +543,29 @@ class GLWidget(QOpenGLWidget):
|
|||||||
# Transfer element to the new page
|
# Transfer element to the new page
|
||||||
self._transfer_element_to_page(self.selected_element, source_page, current_page, x, y, current_renderer)
|
self._transfer_element_to_page(self.selected_element, source_page, current_page, x, y, current_renderer)
|
||||||
else:
|
else:
|
||||||
# Same page - just update position normally
|
# Same page - update position with snapping
|
||||||
total_dx = (x - self.drag_start_pos[0]) / self.zoom_level
|
total_dx = (x - self.drag_start_pos[0]) / self.zoom_level
|
||||||
total_dy = (y - self.drag_start_pos[1]) / self.zoom_level
|
total_dy = (y - self.drag_start_pos[1]) / self.zoom_level
|
||||||
|
|
||||||
new_x = self.drag_start_element_pos[0] + total_dx
|
new_x = self.drag_start_element_pos[0] + total_dx
|
||||||
new_y = self.drag_start_element_pos[1] + total_dy
|
new_y = self.drag_start_element_pos[1] + total_dy
|
||||||
|
|
||||||
self.selected_element.position = (new_x, new_y)
|
# Apply snapping
|
||||||
|
main_window = self.window()
|
||||||
|
snap_sys = source_page.layout.snapping_system
|
||||||
|
page_size = source_page.layout.size
|
||||||
|
dpi = main_window.project.working_dpi
|
||||||
|
|
||||||
|
snapped_pos = snap_sys.snap_position(
|
||||||
|
position=(new_x, new_y),
|
||||||
|
size=self.selected_element.size,
|
||||||
|
page_size=page_size,
|
||||||
|
dpi=dpi
|
||||||
|
)
|
||||||
|
|
||||||
|
self.selected_element.position = snapped_pos
|
||||||
else:
|
else:
|
||||||
# No page detected or no parent page - update normally
|
# No page detected or no parent page - update normally without snapping
|
||||||
total_dx = (x - self.drag_start_pos[0]) / self.zoom_level
|
total_dx = (x - self.drag_start_pos[0]) / self.zoom_level
|
||||||
total_dy = (y - self.drag_start_pos[1]) / self.zoom_level
|
total_dy = (y - self.drag_start_pos[1]) / self.zoom_level
|
||||||
|
|
||||||
@ -776,9 +789,41 @@ class GLWidget(QOpenGLWidget):
|
|||||||
if not self.resize_start_pos or not self.resize_start_size:
|
if not self.resize_start_pos or not self.resize_start_size:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Use non-snap resize for now
|
# Get the snapping system from the element's parent page
|
||||||
# TODO: Implement page-aware snapping
|
main_window = self.window()
|
||||||
self._resize_element_no_snap(dx, dy)
|
if not hasattr(self.selected_element, '_parent_page'):
|
||||||
|
self._resize_element_no_snap(dx, dy)
|
||||||
|
return
|
||||||
|
|
||||||
|
parent_page = self.selected_element._parent_page
|
||||||
|
snap_sys = parent_page.layout.snapping_system
|
||||||
|
|
||||||
|
# Get page size
|
||||||
|
page_size = parent_page.layout.size
|
||||||
|
dpi = main_window.project.working_dpi
|
||||||
|
|
||||||
|
# Apply snapping to resize
|
||||||
|
new_pos, new_size = snap_sys.snap_resize(
|
||||||
|
position=self.resize_start_pos,
|
||||||
|
size=self.resize_start_size,
|
||||||
|
dx=dx,
|
||||||
|
dy=dy,
|
||||||
|
resize_handle=self.resize_handle,
|
||||||
|
page_size=page_size,
|
||||||
|
dpi=dpi
|
||||||
|
)
|
||||||
|
|
||||||
|
# Apply the snapped values
|
||||||
|
self.selected_element.position = new_pos
|
||||||
|
self.selected_element.size = new_size
|
||||||
|
|
||||||
|
# Ensure minimum size
|
||||||
|
min_size = 20
|
||||||
|
w, h = self.selected_element.size
|
||||||
|
if w < min_size or h < min_size:
|
||||||
|
w = max(w, min_size)
|
||||||
|
h = max(h, min_size)
|
||||||
|
self.selected_element.size = (w, h)
|
||||||
|
|
||||||
def _resize_element_no_snap(self, dx, dy):
|
def _resize_element_no_snap(self, dx, dy):
|
||||||
"""Resize element without snapping"""
|
"""Resize element without snapping"""
|
||||||
|
|||||||
@ -287,3 +287,58 @@ class ViewOperationsMixin:
|
|||||||
self.update_view()
|
self.update_view()
|
||||||
self.show_status(f"Grid size: {new_grid_size:.1f}mm, Threshold: {new_threshold:.1f}mm", 2000)
|
self.show_status(f"Grid size: {new_grid_size:.1f}mm, Threshold: {new_threshold:.1f}mm", 2000)
|
||||||
print(f"Updated grid settings - Size: {new_grid_size:.1f}mm, Threshold: {new_threshold:.1f}mm")
|
print(f"Updated grid settings - Size: {new_grid_size:.1f}mm, Threshold: {new_threshold:.1f}mm")
|
||||||
|
|
||||||
|
# ===== Layout Tab Snapping Controls =====
|
||||||
|
# These provide easy access to snapping features during layout work
|
||||||
|
|
||||||
|
@ribbon_action(
|
||||||
|
label="Grid Snap",
|
||||||
|
tooltip="Enable/disable snapping to grid (Ctrl+G)",
|
||||||
|
tab="Layout",
|
||||||
|
group="Snapping",
|
||||||
|
shortcut="Ctrl+G"
|
||||||
|
)
|
||||||
|
def layout_toggle_grid_snap(self):
|
||||||
|
"""Toggle grid snapping (Layout tab)"""
|
||||||
|
self.toggle_grid_snap()
|
||||||
|
|
||||||
|
@ribbon_action(
|
||||||
|
label="Edge Snap",
|
||||||
|
tooltip="Enable/disable snapping to page edges (Ctrl+E)",
|
||||||
|
tab="Layout",
|
||||||
|
group="Snapping",
|
||||||
|
shortcut="Ctrl+E"
|
||||||
|
)
|
||||||
|
def layout_toggle_edge_snap(self):
|
||||||
|
"""Toggle edge snapping (Layout tab)"""
|
||||||
|
self.toggle_edge_snap()
|
||||||
|
|
||||||
|
@ribbon_action(
|
||||||
|
label="Guide Snap",
|
||||||
|
tooltip="Enable/disable snapping to guides",
|
||||||
|
tab="Layout",
|
||||||
|
group="Snapping"
|
||||||
|
)
|
||||||
|
def layout_toggle_guide_snap(self):
|
||||||
|
"""Toggle guide snapping (Layout tab)"""
|
||||||
|
self.toggle_guide_snap()
|
||||||
|
|
||||||
|
@ribbon_action(
|
||||||
|
label="Show Grid",
|
||||||
|
tooltip="Toggle visibility of snap lines",
|
||||||
|
tab="Layout",
|
||||||
|
group="Snapping"
|
||||||
|
)
|
||||||
|
def layout_toggle_snap_lines(self):
|
||||||
|
"""Toggle snap lines visibility (Layout tab)"""
|
||||||
|
self.toggle_snap_lines()
|
||||||
|
|
||||||
|
@ribbon_action(
|
||||||
|
label="Grid Settings...",
|
||||||
|
tooltip="Configure grid size and snap threshold",
|
||||||
|
tab="Layout",
|
||||||
|
group="Snapping"
|
||||||
|
)
|
||||||
|
def layout_set_grid_size(self):
|
||||||
|
"""Open grid settings dialog (Layout tab)"""
|
||||||
|
self.set_grid_size()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user