1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-30 23:19:49 +00:00

When hovering above the first position when using the curve tool, apply the curve shape

This commit is contained in:
Emmanouil Papadeas 2024-05-21 02:59:37 +03:00
parent 318b381938
commit 3f8799f25a

View file

@ -5,6 +5,7 @@ var _drawing := false ## Set to true when a curve is being drawn.
var _fill := false ## When true, the inside area of the curve gets filled. var _fill := false ## When true, the inside area of the curve gets filled.
var _editing_bezier := false ## Needed to determine when to show the control points preview line. var _editing_bezier := false ## Needed to determine when to show the control points preview line.
var _thickness := 1 ## The thickness of the curve. var _thickness := 1 ## The thickness of the curve.
var _last_mouse_position := Vector2.INF ## The last position of the mouse
func _init() -> void: func _init() -> void:
@ -56,7 +57,11 @@ func update_config() -> void:
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
if _drawing: if _drawing:
if event is InputEventMouseButton: if event is InputEventMouseMotion:
_last_mouse_position = Global.canvas.current_pixel.floor()
if Global.mirror_view:
_last_mouse_position.x = Global.current_project.size.x - 1 - _last_mouse_position.x
elif event is InputEventMouseButton:
if event.double_click and event.button_index == tool_slot.button: if event.double_click and event.button_index == tool_slot.button:
$DoubleClickTimer.start() $DoubleClickTimer.start()
_draw_shape() _draw_shape()
@ -98,6 +103,8 @@ func draw_move(pos: Vector2i) -> void:
func draw_end(pos: Vector2i) -> void: func draw_end(pos: Vector2i) -> void:
_editing_bezier = false _editing_bezier = false
if _is_hovering_first_position(pos):
_draw_shape()
super.draw_end(pos) super.draw_end(pos)
@ -120,6 +127,10 @@ func draw_preview() -> void:
canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale) canvas.draw_set_transform(canvas.position, canvas.rotation, canvas.scale)
var circle_radius := Vector2.ONE * (5.0 / Global.camera.zoom.x)
if _is_hovering_first_position(_last_mouse_position):
var circle_center := _curve.get_point_position(0) + Vector2.ONE * 0.5
draw_empty_circle(canvas, circle_center, circle_radius * 2.0, Color.BLACK)
if _editing_bezier: if _editing_bezier:
var start := _curve.get_point_position(0) var start := _curve.get_point_position(0)
if _curve.point_count > 1: if _curve.point_count > 1:
@ -136,7 +147,6 @@ func draw_preview() -> void:
end.x = Global.current_project.size.x - end.x - 1 end.x = Global.current_project.size.x - end.x - 1
canvas.draw_line(start, end, Color.BLACK) canvas.draw_line(start, end, Color.BLACK)
var circle_radius := Vector2.ONE * (5.0 / Global.camera.zoom.x)
draw_empty_circle(canvas, start, circle_radius, Color.BLACK) draw_empty_circle(canvas, start, circle_radius, Color.BLACK)
draw_empty_circle(canvas, end, circle_radius, Color.BLACK) draw_empty_circle(canvas, end, circle_radius, Color.BLACK)
@ -230,6 +240,10 @@ func _fill_bitmap_with_points(points: Array[Vector2i], bitmap_size: Vector2i) ->
return bitmap return bitmap
func _is_hovering_first_position(pos: Vector2) -> bool:
return _curve.point_count > 0 and _curve.get_point_position(0) == pos
# Thanks to # Thanks to
# https://www.reddit.com/r/godot/comments/3ktq39/drawing_empty_circles_and_curves/cv0f4eo/ # https://www.reddit.com/r/godot/comments/3ktq39/drawing_empty_circles_and_curves/cv0f4eo/
func draw_empty_circle( func draw_empty_circle(