1
0
Fork 0
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:
Variable 2023-08-28 16:17:05 +05:00 committed by GitHub
parent 44b59f84bf
commit 5d1b0ccb25
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 9 deletions

View file

@ -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"

View file

@ -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

View file

@ -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:"

View file

@ -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:

View file

@ -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)