mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-03-12 22:35:18 +00:00
Rectangular grid center snapping (#905)
* implement center snapping * typo * allow snap distance in center snapping * better description of snapping distance * Update Translations.pot
This commit is contained in:
parent
44b59f84bf
commit
5d1b0ccb25
5 changed files with 35 additions and 9 deletions
|
@ -1274,7 +1274,7 @@ msgid "Snapping distance:"
|
|||
msgstr ""
|
||||
|
||||
#. Found in the Preferences, in the Canvas tab. Refers to grid and guide snapping. Hint tooltip of the snapping distance slider.
|
||||
msgid "This is the distance in pixels where guide and grid snapping gets activated."
|
||||
msgid "This is the distance in screen pixels where guide and grid snapping gets activated."
|
||||
msgstr ""
|
||||
|
||||
msgid "Grid"
|
||||
|
|
|
@ -142,7 +142,8 @@ var draw_pixel_grid := false
|
|||
var show_rulers := true
|
||||
var show_guides := true
|
||||
var show_mouse_guides := false
|
||||
var snap_to_rectangular_grid := false
|
||||
var snap_to_rectangular_grid_boundary := false
|
||||
var snap_to_rectangular_grid_center := false
|
||||
var snap_to_guides := false
|
||||
var snap_to_perspective_guides := false
|
||||
|
||||
|
|
|
@ -518,7 +518,7 @@ columns = 3
|
|||
margin_right = 161.0
|
||||
margin_bottom = 14.0
|
||||
rect_min_size = Vector2( 110, 0 )
|
||||
hint_tooltip = "This is the distance in pixels where guide and grid snapping gets activated."
|
||||
hint_tooltip = "This is the distance in screen pixels where guide and grid snapping gets activated."
|
||||
mouse_filter = 0
|
||||
size_flags_horizontal = 3
|
||||
text = "Snapping distance:"
|
||||
|
|
|
@ -123,7 +123,7 @@ func draw_preview() -> void:
|
|||
|
||||
func snap_position(position: Vector2) -> Vector2:
|
||||
var snapping_distance := Global.snapping_distance * Global.camera.zoom.x
|
||||
if Global.snap_to_rectangular_grid:
|
||||
if Global.snap_to_rectangular_grid_boundary:
|
||||
var grid_pos := position.snapped(Global.grid_size)
|
||||
grid_pos += Global.grid_offset
|
||||
# keeping grid_pos as is would have been fine but this adds extra accuracy as to
|
||||
|
@ -146,6 +146,27 @@ func snap_position(position: Vector2) -> Vector2:
|
|||
if grid_point != Vector2.INF:
|
||||
position = grid_point.floor()
|
||||
|
||||
if Global.snap_to_rectangular_grid_center:
|
||||
var grid_center := position.snapped(Global.grid_size) + (Global.grid_size / 2)
|
||||
grid_center += Global.grid_offset
|
||||
# keeping grid_center as is would have been fine but this adds extra accuracy as to
|
||||
# which snap point (from the list below) is closest to mouse and occupy THAT point
|
||||
var t_l := grid_center + Vector2(-Global.grid_size.x, -Global.grid_size.y)
|
||||
var t_c := grid_center + Vector2(0, -Global.grid_size.y) # t_c is for "top centre" and so on
|
||||
var t_r := grid_center + Vector2(Global.grid_size.x, -Global.grid_size.y)
|
||||
var m_l := grid_center + Vector2(-Global.grid_size.x, 0)
|
||||
var m_c := grid_center
|
||||
var m_r := grid_center + Vector2(Global.grid_size.x, 0)
|
||||
var b_l := grid_center + Vector2(-Global.grid_size.x, Global.grid_size.y)
|
||||
var b_c := grid_center + Vector2(0, Global.grid_size.y)
|
||||
var b_r := grid_center + Global.grid_size
|
||||
var vec_arr := [t_l, t_c, t_r, m_l, m_c, m_r, b_l, b_c, b_r]
|
||||
for vec in vec_arr:
|
||||
if vec.distance_to(position) < grid_center.distance_to(position):
|
||||
grid_center = vec
|
||||
if grid_center.distance_to(position) <= snapping_distance:
|
||||
position = grid_center.floor()
|
||||
|
||||
var snap_to := Vector2.INF
|
||||
if Global.snap_to_guides:
|
||||
for guide in Global.current_project.guides:
|
||||
|
|
|
@ -186,7 +186,8 @@ func _setup_tile_mode_submenu(item: String) -> void:
|
|||
|
||||
func _setup_snap_to_submenu(item: String) -> void:
|
||||
snap_to_submenu.set_name("snap_to_submenu")
|
||||
snap_to_submenu.add_check_item("Snap to Rectangular Grid")
|
||||
snap_to_submenu.add_check_item("Snap to Rectangular Grid Boundary")
|
||||
snap_to_submenu.add_check_item("Snap to Rectangular Grid Center")
|
||||
snap_to_submenu.add_check_item("Snap to Guides")
|
||||
snap_to_submenu.add_check_item("Snap to Perspective Guides")
|
||||
snap_to_submenu.connect("id_pressed", self, "_snap_to_submenu_id_pressed")
|
||||
|
@ -506,12 +507,15 @@ func _tile_mode_submenu_id_pressed(id: int) -> void:
|
|||
|
||||
func _snap_to_submenu_id_pressed(id: int) -> void:
|
||||
if id == 0:
|
||||
Global.snap_to_rectangular_grid = !Global.snap_to_rectangular_grid
|
||||
snap_to_submenu.set_item_checked(id, Global.snap_to_rectangular_grid)
|
||||
elif id == 1:
|
||||
Global.snap_to_rectangular_grid_boundary = !Global.snap_to_rectangular_grid_boundary
|
||||
snap_to_submenu.set_item_checked(id, Global.snap_to_rectangular_grid_boundary)
|
||||
if id == 1:
|
||||
Global.snap_to_rectangular_grid_center = !Global.snap_to_rectangular_grid_center
|
||||
snap_to_submenu.set_item_checked(id, Global.snap_to_rectangular_grid_center)
|
||||
elif id == 2:
|
||||
Global.snap_to_guides = !Global.snap_to_guides
|
||||
snap_to_submenu.set_item_checked(id, Global.snap_to_guides)
|
||||
elif id == 2:
|
||||
elif id == 3:
|
||||
Global.snap_to_perspective_guides = !Global.snap_to_perspective_guides
|
||||
snap_to_submenu.set_item_checked(id, Global.snap_to_perspective_guides)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue