mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-03-14 15:25:17 +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 ""
|
msgstr ""
|
||||||
|
|
||||||
#. Found in the Preferences, in the Canvas tab. Refers to grid and guide snapping. Hint tooltip of the snapping distance slider.
|
#. 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 ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Grid"
|
msgid "Grid"
|
||||||
|
|
|
@ -142,7 +142,8 @@ var draw_pixel_grid := false
|
||||||
var show_rulers := true
|
var show_rulers := true
|
||||||
var show_guides := true
|
var show_guides := true
|
||||||
var show_mouse_guides := false
|
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_guides := false
|
||||||
var snap_to_perspective_guides := false
|
var snap_to_perspective_guides := false
|
||||||
|
|
||||||
|
|
|
@ -518,7 +518,7 @@ columns = 3
|
||||||
margin_right = 161.0
|
margin_right = 161.0
|
||||||
margin_bottom = 14.0
|
margin_bottom = 14.0
|
||||||
rect_min_size = Vector2( 110, 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
|
mouse_filter = 0
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
text = "Snapping distance:"
|
text = "Snapping distance:"
|
||||||
|
|
|
@ -123,7 +123,7 @@ func draw_preview() -> void:
|
||||||
|
|
||||||
func snap_position(position: Vector2) -> Vector2:
|
func snap_position(position: Vector2) -> Vector2:
|
||||||
var snapping_distance := Global.snapping_distance * Global.camera.zoom.x
|
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)
|
var grid_pos := position.snapped(Global.grid_size)
|
||||||
grid_pos += Global.grid_offset
|
grid_pos += Global.grid_offset
|
||||||
# keeping grid_pos as is would have been fine but this adds extra accuracy as to
|
# 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:
|
if grid_point != Vector2.INF:
|
||||||
position = grid_point.floor()
|
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
|
var snap_to := Vector2.INF
|
||||||
if Global.snap_to_guides:
|
if Global.snap_to_guides:
|
||||||
for guide in Global.current_project.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:
|
func _setup_snap_to_submenu(item: String) -> void:
|
||||||
snap_to_submenu.set_name("snap_to_submenu")
|
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 Guides")
|
||||||
snap_to_submenu.add_check_item("Snap to Perspective Guides")
|
snap_to_submenu.add_check_item("Snap to Perspective Guides")
|
||||||
snap_to_submenu.connect("id_pressed", self, "_snap_to_submenu_id_pressed")
|
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:
|
func _snap_to_submenu_id_pressed(id: int) -> void:
|
||||||
if id == 0:
|
if id == 0:
|
||||||
Global.snap_to_rectangular_grid = !Global.snap_to_rectangular_grid
|
Global.snap_to_rectangular_grid_boundary = !Global.snap_to_rectangular_grid_boundary
|
||||||
snap_to_submenu.set_item_checked(id, Global.snap_to_rectangular_grid)
|
snap_to_submenu.set_item_checked(id, Global.snap_to_rectangular_grid_boundary)
|
||||||
elif id == 1:
|
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
|
Global.snap_to_guides = !Global.snap_to_guides
|
||||||
snap_to_submenu.set_item_checked(id, 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
|
Global.snap_to_perspective_guides = !Global.snap_to_perspective_guides
|
||||||
snap_to_submenu.set_item_checked(id, 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