Skip to content

Commit 9054261

Browse files
authored
Merge pull request #1370 from williamchange/color-portal
Add shortcut(F) to colorize portal node labels
2 parents 3dc4676 + bc82e42 commit 9054261

6 files changed

Lines changed: 65 additions & 37 deletions

File tree

addons/material_maker/engine/nodes/gen_portal.gd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var io : Portal
1616
var source : MMGenBase.OutputPort
1717

1818
var editable := false
19+
var color : Color = Color.WHITE
1920

2021
func is_editable() -> bool:
2122
return true
@@ -91,6 +92,7 @@ func _get_shader_code(uv : String, output_index : int, context : MMGenContext) -
9192
func _serialize(data : Dictionary) -> Dictionary:
9293
data.io = io
9394
data.port_type = port_type
95+
data.color = MMType.serialize_value(color)
9496

9597
# remove unused field
9698
data.erase("seed_int")
@@ -101,3 +103,5 @@ func _deserialize(data : Dictionary) -> void:
101103
io = data.io
102104
if data.has("port_type"):
103105
port_type = data.port_type
106+
if data.has("color"):
107+
color = MMType.deserialize_value(data.color)

material_maker/doc/aperture_nodes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ In/Out nodes are connected via an identifier displayed as a
1414
label on top of the node. This can be set by double-clicking the
1515
node/label or pressing F2/Enter when a node is selected.
1616

17+
Label color can be changed by pressing F when a node is selected.
18+
1719
While multiple output nodes can use the same identifier to reference
1820
the same input node, input nodes must use unique(to the current graph/subgraph) identifiers.
1921

material_maker/doc/user_interface_shortcuts.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Graph Editor
8484
+-------------------------------------------------------+----------------------------------------------------+
8585
| :kbd:`Ctrl/Cmd-Shift-F` | Frame selected node(s) |
8686
+-------------------------------------------------------+----------------------------------------------------+
87-
| :kbd:`F` | Color selected comment node(s) |
87+
| :kbd:`F` | Color selected comment/aperture node(s) |
8888
+-------------------------------------------------------+----------------------------------------------------+
8989
| :kbd:`C` | Centers view |
9090
+-------------------------------------------------------+----------------------------------------------------+

material_maker/nodes/comment/comment.gd

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ func set_color(c):
162162
$Popup.hide()
163163
if c == generator.color:
164164
return
165-
var undo_action = { type="comment_color_change", node=generator.get_hier_name(), color=generator.color }
166-
var redo_action = { type="comment_color_change", node=generator.get_hier_name(), color=c }
167-
get_parent().undoredo.add("Change comment color", [undo_action], [redo_action], true)
165+
var _undo_action = { type="node_color_change", node=generator.get_hier_name(), color=generator.color }
166+
var _redo_action = { type="node_color_change", node=generator.get_hier_name(), color=c }
167+
get_parent().undoredo.add("Change comment color", [_undo_action], [_redo_action], false)
168168
generator.color = c
169169
update_stylebox()
170170
get_parent().send_changed_signal()

material_maker/nodes/portal/portal.gd

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@ func _draw() -> void:
3030

3131
# label
3232
var label_pos := size * 0.5
33-
var label_color := Color.WHITE
34-
if "light" in mm_globals.main_window.theme.resource_path:
35-
label_color = Color.BLACK
33+
var label_color : Color = generator.color
3634

3735
var label_size = LABEL_FONT.get_string_size(get_link(), HORIZONTAL_ALIGNMENT_CENTER, -1, label_font_size)
3836
var label_draw_pos := label_pos - Vector2(label_size.x * 0.5, label_y_offset)
3937
if not is_editing:
38+
draw_string_outline(LABEL_FONT, label_draw_pos, get_link(), HORIZONTAL_ALIGNMENT_CENTER, -1, label_font_size, 5, Color.BLACK)
4039
draw_string(LABEL_FONT, label_draw_pos, get_link(), HORIZONTAL_ALIGNMENT_CENTER, -1, label_font_size, label_color)
4140

4241
# label dragger
@@ -230,6 +229,16 @@ func set_link_from_selection() -> void:
230229
if source_portal.is_portal_in():
231230
generator.set_parameter("link", source_portal.get_link())
232231

232+
func set_color(c : Color) -> void:
233+
if c == generator.color:
234+
return
235+
var _undo_action = { type="node_color_change", node=generator.get_hier_name(), color=generator.color }
236+
var _redo_action = { type="node_color_change", node=generator.get_hier_name(), color=c }
237+
get_parent().undoredo.add("Change portal color", [_undo_action], [_redo_action], false)
238+
generator.color = c
239+
queue_redraw()
240+
get_parent().send_changed_signal()
241+
233242
#region portal link edit
234243

235244
## Replaces all links from [param from_link] to [param new_link].

material_maker/panels/graph_edit/graph_edit.gd

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ func _gui_input(event) -> void:
293293
scroll_offset.y += 0.5*size.y
294294
accept_event()
295295
KEY_F:
296-
color_comment_nodes()
296+
colorize_nodes()
297297
KEY_G:
298298
if not get_selected_nodes().is_empty():
299299
has_grab = true
@@ -1326,13 +1326,16 @@ func undoredo_command(command : Dictionary) -> void:
13261326
if has_node("node_"+g.name):
13271327
var node = get_node("node_"+g.name)
13281328
node.update_node()
1329-
"comment_color_change":
1329+
"node_color_change":
13301330
var g = get_node_from_hier_name(command.node)
13311331
g.color = command.color
13321332
if g.get_parent() == generator:
13331333
if has_node("node_"+g.name):
13341334
var node = get_node("node_"+g.name)
1335-
node.update_node()
1335+
if node is MMGraphComment:
1336+
node.update_node()
1337+
elif node is MMGraphPortal:
1338+
node.queue_redraw()
13361339
_:
13371340
print("Unknown undo/redo command:")
13381341
print(command)
@@ -1827,33 +1830,43 @@ func _get_connection_line(from : Vector2, to : Vector2) -> PackedVector2Array:
18271830
_:
18281831
return points
18291832

1830-
func color_comment_nodes() -> void:
1831-
var comments := get_children().filter(
1832-
func(n): return (n is MMGraphComment and n.selected))
1833-
if not comments.is_empty():
1834-
undoredo.start_group()
1835-
var picker : PopupPanel = preload("res://material_maker/widgets/color_picker_popup/color_picker_popup.tscn").instantiate()
1836-
picker.hide()
1837-
add_child(picker)
1838-
var color_picker : ColorPicker = picker.get_node("ColorPicker")
1839-
for node in comments:
1840-
color_picker.color_changed.connect(node.set_color)
1841-
color_picker.color = node.generator.color
1842-
var csf = get_window().content_scale_factor
1843-
picker.about_to_popup.connect(func():
1844-
if mm_globals.has_config("color_picker_color_mode"):
1845-
color_picker.color_mode = mm_globals.get_config("color_picker_color_mode")
1846-
if mm_globals.has_config("color_picker_shape"):
1847-
color_picker.picker_shape = mm_globals.get_config("color_picker_shape"))
1848-
picker.popup_hide.connect(func():
1849-
mm_globals.set_config("color_picker_color_mode", color_picker.color_mode)
1850-
mm_globals.set_config("color_picker_shape", color_picker.picker_shape))
1851-
picker.content_scale_factor = csf
1852-
picker.min_size = picker.get_contents_minimum_size() * csf
1853-
picker.position = get_screen_position() + get_local_mouse_position() * csf
1854-
picker.popup_hide.connect(picker.queue_free)
1855-
picker.popup_hide.connect(undoredo.end_group)
1856-
picker.popup()
1833+
func colorize_nodes() -> void:
1834+
var nodes : Array[GraphElement]
1835+
for n in get_children():
1836+
if (n is MMGraphPortal or n is MMGraphComment) and n.selected:
1837+
nodes.push_back(n)
1838+
if nodes.is_empty():
1839+
return
1840+
undoredo.start_group()
1841+
1842+
var picker = ColorPicker.new()
1843+
var popup : PopupPanel = PopupPanel.new()
1844+
popup.add_child(picker)
1845+
popup.hide()
1846+
add_child(popup)
1847+
picker.edit_alpha = false
1848+
picker.edit_intensity = false
1849+
1850+
var csf = get_window().content_scale_factor
1851+
popup.about_to_popup.connect(func() -> void:
1852+
if mm_globals.has_config("color_picker_color_mode"):
1853+
picker.color_mode = mm_globals.get_config("color_picker_color_mode")
1854+
if mm_globals.has_config("color_picker_shape"):
1855+
picker.picker_shape = mm_globals.get_config("color_picker_shape"))
1856+
popup.popup_hide.connect(func() -> void:
1857+
mm_globals.set_config("color_picker_color_mode", picker.color_mode)
1858+
mm_globals.set_config("color_picker_shape", picker.picker_shape))
1859+
1860+
popup.content_scale_factor = csf
1861+
popup.min_size = popup.get_contents_minimum_size() * csf
1862+
popup.position = get_screen_position() + get_local_mouse_position() * csf
1863+
1864+
picker.color = nodes[0].generator.color
1865+
for node in nodes:
1866+
picker.color_changed.connect(node.set_color)
1867+
popup.popup_hide.connect(undoredo.end_group)
1868+
popup.popup_hide.connect(popup.queue_free)
1869+
popup.popup()
18571870

18581871
func _on_resized() -> void:
18591872
$GraphUI.size = Vector2.ZERO

0 commit comments

Comments
 (0)