Skip to content

Commit 8b85fa3

Browse files
authored
Merge pull request #177 from endlessm/T35538-control-block-borders
Improve ControlBlock background drawing
2 parents c6fd7cc + d2495b0 commit 8b85fa3

File tree

5 files changed

+75
-23
lines changed

5 files changed

+75
-23
lines changed

addons/block_code/drag_manager/drag.gd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
@tool
22
extends Control
33

4+
const Background = preload("res://addons/block_code/ui/blocks/utilities/background/background.gd")
45
const BlockCanvas = preload("res://addons/block_code/ui/block_canvas/block_canvas.gd")
56
const Constants = preload("res://addons/block_code/ui/constants.gd")
67
const InstructionTree = preload("res://addons/block_code/instruction_tree/instruction_tree.gd")
@@ -189,8 +190,7 @@ func _update_preview():
189190

190191
if target_snap_point:
191192
# Make preview block
192-
_preview_block = Control.new()
193-
_preview_block.set_script(preload("res://addons/block_code/ui/blocks/utilities/background/background.gd"))
193+
_preview_block = Background.new()
194194

195195
_preview_block.color = Color(1, 1, 1, 0.5)
196196
_preview_block.custom_minimum_size = _block.get_global_rect().size

addons/block_code/ui/blocks/control_block/control_block.gd

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
class_name ControlBlock
33
extends Block
44

5+
const Background = preload("res://addons/block_code/ui/blocks/utilities/background/background.gd")
56
const Constants = preload("res://addons/block_code/ui/constants.gd")
67
const DragDropArea = preload("res://addons/block_code/ui/blocks/utilities/drag_drop_area/drag_drop_area.gd")
8+
const Gutter = preload("res://addons/block_code/ui/blocks/utilities/background/gutter.gd")
79

810
@export var block_formats: Array = []
911
@export var statements: Array = []
@@ -13,15 +15,10 @@ var snaps: Array
1315
var param_name_input_pairs_array: Array
1416
var param_input_strings_array: Array # Only loaded from serialized
1517

16-
@onready var _background := %Background
17-
1818

1919
func _ready():
2020
super()
2121

22-
_background.color = color
23-
_background.custom_minimum_size.x = Constants.CONTROL_MARGIN
24-
2522
format()
2623

2724
if param_input_strings_array:
@@ -109,9 +106,8 @@ func format():
109106
row.custom_minimum_size.y = 30
110107
row.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN
111108

112-
var bg := Control.new()
109+
var bg := Background.new()
113110
bg.name = "Background"
114-
bg.set_script(preload("res://addons/block_code/ui/blocks/utilities/background/background.gd"))
115111
bg.color = color
116112
if i != 0:
117113
bg.shift_top = Constants.CONTROL_MARGIN
@@ -148,20 +144,27 @@ func format():
148144
snap_container.custom_minimum_size.x = 30
149145
snap_container.custom_minimum_size.y = 30
150146
snap_container.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN
151-
snap_container.add_theme_constant_override("margin_left", Constants.CONTROL_MARGIN)
147+
148+
var snap_gutter := Gutter.new()
149+
snap_gutter.name = "Background"
150+
snap_gutter.custom_minimum_size.x = Constants.CONTROL_MARGIN
151+
snap_gutter.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN
152+
snap_gutter.size_flags_vertical = Control.SIZE_EXPAND_FILL
153+
snap_gutter.color = color
154+
snap_container.add_child(snap_gutter)
152155

153156
var snap_point: SnapPoint = preload("res://addons/block_code/ui/blocks/utilities/snap_point/snap_point.tscn").instantiate()
157+
snap_point.add_theme_constant_override("margin_left", Constants.CONTROL_MARGIN)
154158
snap_container.add_child(snap_point)
155159

156160
snaps.append(snap_point)
157161

158162
%Rows.add_child(snap_container)
159163

160-
var bg := Control.new()
164+
var bg := Background.new()
161165
bg.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN
162166
bg.custom_minimum_size.x = 100
163167
bg.custom_minimum_size.y = 30
164-
bg.set_script(preload("res://addons/block_code/ui/blocks/utilities/background/background.gd"))
165168
bg.color = color
166169
bg.shift_top = Constants.CONTROL_MARGIN
167170
%Rows.add_child(bg)

addons/block_code/ui/blocks/control_block/control_block.tscn

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,6 @@ mouse_filter = 2
2727
theme_override_constants/margin_top = 30
2828
theme_override_constants/margin_bottom = 30
2929

30-
[node name="Background" type="ColorRect" parent="VBoxContainer/MarginContainer/MarginContainer"]
31-
unique_name_in_owner = true
32-
custom_minimum_size = Vector2(20, 0)
33-
layout_mode = 2
34-
size_flags_horizontal = 0
35-
color = Color(0.59979, 0.536348, 0.876215, 1)
36-
3730
[node name="Rows" type="VBoxContainer" parent="VBoxContainer/MarginContainer"]
3831
unique_name_in_owner = true
3932
layout_mode = 2

addons/block_code/ui/blocks/utilities/background/background.gd

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,14 @@ func _draw():
6060
fill_polygon.append(Vector2(0.0, 0.0))
6161

6262
var stroke_polygon: PackedVector2Array
63-
stroke_polygon.append(Vector2(shift_top, 0.0))
63+
var edge_polygon: PackedVector2Array
64+
var outline_middle = Constants.OUTLINE_WIDTH / 2
65+
66+
if shift_top > 0:
67+
stroke_polygon.append(Vector2(shift_top - outline_middle, 0.0))
68+
else:
69+
stroke_polygon.append(Vector2(shift_top, 0.0))
70+
6471
if show_top:
6572
stroke_polygon.append(Vector2(Constants.KNOB_X + shift_top, 0.0))
6673
stroke_polygon.append(Vector2(Constants.KNOB_X + Constants.KNOB_Z + shift_top, Constants.KNOB_H))
@@ -74,9 +81,21 @@ func _draw():
7481
stroke_polygon.append(Vector2(Constants.KNOB_X + Constants.KNOB_Z + shift_bottom, size.y + Constants.KNOB_H))
7582
stroke_polygon.append(Vector2(Constants.KNOB_X + shift_bottom, size.y))
7683

77-
stroke_polygon.append(Vector2(shift_bottom, size.y))
78-
if shift_top + shift_bottom == 0:
79-
stroke_polygon.append(Vector2(0.0, 0.0))
84+
if shift_bottom > 0:
85+
stroke_polygon.append(Vector2(shift_bottom - outline_middle, size.y))
86+
else:
87+
stroke_polygon.append(Vector2(shift_bottom, size.y))
88+
89+
if shift_top > 0:
90+
edge_polygon.append(Vector2(0.0, 0.0))
91+
else:
92+
edge_polygon.append(Vector2(0.0, 0.0 - outline_middle))
93+
94+
if shift_bottom > 0:
95+
edge_polygon.append(Vector2(0.0, size.y))
96+
else:
97+
edge_polygon.append(Vector2(0.0, size.y + outline_middle))
8098

8199
draw_colored_polygon(fill_polygon, color)
82100
draw_polyline(stroke_polygon, outline_color, Constants.OUTLINE_WIDTH)
101+
draw_polyline(edge_polygon, outline_color, Constants.OUTLINE_WIDTH)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
@tool
2+
extends Control
3+
4+
const Constants = preload("res://addons/block_code/ui/constants.gd")
5+
6+
var outline_color: Color
7+
8+
@export var color: Color:
9+
set = _set_color
10+
11+
12+
func _set_color(new_color):
13+
color = new_color
14+
outline_color = color.darkened(0.2)
15+
queue_redraw()
16+
17+
18+
func _draw():
19+
var fill_polygon: PackedVector2Array
20+
fill_polygon.append(Vector2(0.0, 0.0))
21+
fill_polygon.append(Vector2(size.x, 0.0))
22+
fill_polygon.append(Vector2(size.x, size.y))
23+
fill_polygon.append(Vector2(0.0, size.y))
24+
fill_polygon.append(Vector2(0.0, 0.0))
25+
26+
var left_polygon: PackedVector2Array
27+
var right_polygon: PackedVector2Array
28+
29+
left_polygon.append(Vector2(0.0, 0.0))
30+
left_polygon.append(Vector2(0.0, size.y))
31+
32+
right_polygon.append(Vector2(size.x, 0.0))
33+
right_polygon.append(Vector2(size.x, size.y))
34+
35+
draw_colored_polygon(fill_polygon, color)
36+
draw_polyline(left_polygon, outline_color, Constants.OUTLINE_WIDTH)
37+
draw_polyline(right_polygon, outline_color, Constants.OUTLINE_WIDTH)

0 commit comments

Comments
 (0)