mirror of
https://github.com/Relintai/material-maker.git
synced 2024-12-23 21:16:54 +01:00
Added clipping when drawing links
This commit is contained in:
parent
1a5ddae226
commit
d6527848d3
@ -1,9 +1,20 @@
|
||||
extends Node2D
|
||||
extends Control
|
||||
|
||||
var clip_pos = Vector2(0, 0)
|
||||
var clip_size = Vector2(0, 0)
|
||||
var end
|
||||
var source = null
|
||||
var target = null
|
||||
|
||||
func _ready():
|
||||
mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
|
||||
func clip(p, s):
|
||||
clip_pos = p
|
||||
rect_global_position = p
|
||||
rect_size = s
|
||||
rect_clip_content = true
|
||||
|
||||
func closest(rect, point):
|
||||
return Vector2(max(rect.position.x, min(rect.end.x, point.x)), max(rect.position.y, min(rect.end.y, point.y)))
|
||||
|
||||
@ -14,9 +25,9 @@ func _draw():
|
||||
if target != null:
|
||||
color = Color(0.5, 1, 0.5, 0.5)
|
||||
rect = Rect2(target.rect_global_position, target.rect_size*target.get_global_transform().get_scale())
|
||||
draw_rect(rect, color, false)
|
||||
draw_rect(Rect2(rect.position-clip_pos, rect.size), color, false)
|
||||
end = closest(rect, start)
|
||||
rect = Rect2(source.rect_global_position, source.rect_size*source.get_global_transform().get_scale())
|
||||
draw_rect(rect, color, false)
|
||||
draw_rect(Rect2(rect.position-clip_pos, rect.size), color, false)
|
||||
start = closest(rect, end)
|
||||
draw_line(start, end, color, 1, true)
|
||||
draw_line(start-clip_pos, end-clip_pos, color, 1, true)
|
||||
|
@ -52,10 +52,14 @@ func delete():
|
||||
|
||||
func _on_mouse_entered():
|
||||
_on_mouse_exited()
|
||||
get_graph_edit()
|
||||
if graph_edit == null:
|
||||
return
|
||||
links = []
|
||||
var viewport = get_viewport()
|
||||
for w in linked_widgets:
|
||||
var link = Link.new()
|
||||
link.clip(graph_edit.rect_global_position, graph_edit.rect_size)
|
||||
link.source = self
|
||||
link.target = w.widget
|
||||
viewport.add_child(link)
|
||||
@ -73,7 +77,10 @@ var link = null
|
||||
var graph_edit = null
|
||||
var pointed_control = null
|
||||
|
||||
const Link = preload("res://addons/material_maker/widgets/linked_widgets/link.gd")
|
||||
func get_graph_edit():
|
||||
graph_edit = get_parent()
|
||||
while graph_edit != null && !(graph_edit is GraphEdit):
|
||||
graph_edit = graph_edit.get_parent()
|
||||
|
||||
func find_control(gp):
|
||||
for c in graph_edit.get_children():
|
||||
@ -108,14 +115,13 @@ func _input(event):
|
||||
|
||||
func pick_linked():
|
||||
# Verify we are in a graph edit
|
||||
graph_edit = get_parent()
|
||||
while graph_edit != null && !(graph_edit is GraphEdit):
|
||||
graph_edit = graph_edit.get_parent()
|
||||
get_graph_edit()
|
||||
if graph_edit == null:
|
||||
return
|
||||
# Create line that will be shown when looking for a target
|
||||
var viewport = get_viewport()
|
||||
link = Link.new()
|
||||
link.clip(graph_edit.rect_global_position, graph_edit.rect_size)
|
||||
link.source = self
|
||||
link.end = rect_global_position+0.5*rect_size*get_global_transform().get_scale()
|
||||
viewport.add_child(link)
|
||||
|
Loading…
Reference in New Issue
Block a user