Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions addons/material_maker/engine/nodes/gen_portal.gd
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ var io : Portal
var source : MMGenBase.OutputPort

var editable := false
var color : Color = Color.WHITE

func is_editable() -> bool:
return true
Expand Down Expand Up @@ -91,6 +92,7 @@ func _get_shader_code(uv : String, output_index : int, context : MMGenContext) -
func _serialize(data : Dictionary) -> Dictionary:
data.io = io
data.port_type = port_type
data.color = MMType.serialize_value(color)

# remove unused field
data.erase("seed_int")
Expand All @@ -101,3 +103,5 @@ func _deserialize(data : Dictionary) -> void:
io = data.io
if data.has("port_type"):
port_type = data.port_type
if data.has("color"):
color = MMType.deserialize_value(data.color)
2 changes: 2 additions & 0 deletions material_maker/doc/aperture_nodes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ In/Out nodes are connected via an identifier displayed as a
label on top of the node. This can be set by double-clicking the
node/label or pressing F2/Enter when a node is selected.

Label color can be changed by pressing F when a node is selected.

While multiple output nodes can use the same identifier to reference
the same input node, input nodes must use unique(to the current graph/subgraph) identifiers.

Expand Down
2 changes: 1 addition & 1 deletion material_maker/doc/user_interface_shortcuts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Graph Editor
+-------------------------------------------------------+----------------------------------------------------+
| :kbd:`Ctrl/Cmd-Shift-F` | Frame selected node(s) |
+-------------------------------------------------------+----------------------------------------------------+
| :kbd:`F` | Color selected comment node(s) |
| :kbd:`F` | Color selected comment/aperture node(s) |
+-------------------------------------------------------+----------------------------------------------------+
| :kbd:`C` | Centers view |
+-------------------------------------------------------+----------------------------------------------------+
Expand Down
6 changes: 3 additions & 3 deletions material_maker/nodes/comment/comment.gd
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,9 @@ func set_color(c):
$Popup.hide()
if c == generator.color:
return
var undo_action = { type="comment_color_change", node=generator.get_hier_name(), color=generator.color }
var redo_action = { type="comment_color_change", node=generator.get_hier_name(), color=c }
get_parent().undoredo.add("Change comment color", [undo_action], [redo_action], true)
var _undo_action = { type="node_color_change", node=generator.get_hier_name(), color=generator.color }
var _redo_action = { type="node_color_change", node=generator.get_hier_name(), color=c }
get_parent().undoredo.add("Change comment color", [_undo_action], [_redo_action], false)
generator.color = c
update_stylebox()
get_parent().send_changed_signal()
Expand Down
15 changes: 12 additions & 3 deletions material_maker/nodes/portal/portal.gd
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,12 @@ func _draw() -> void:

# label
var label_pos := size * 0.5
var label_color := Color.WHITE
if "light" in mm_globals.main_window.theme.resource_path:
label_color = Color.BLACK
var label_color : Color = generator.color

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

# label dragger
Expand Down Expand Up @@ -230,6 +229,16 @@ func set_link_from_selection() -> void:
if source_portal.is_portal_in():
generator.set_parameter("link", source_portal.get_link())

func set_color(c : Color) -> void:
if c == generator.color:
return
var _undo_action = { type="node_color_change", node=generator.get_hier_name(), color=generator.color }
var _redo_action = { type="node_color_change", node=generator.get_hier_name(), color=c }
get_parent().undoredo.add("Change portal color", [_undo_action], [_redo_action], false)
generator.color = c
queue_redraw()
get_parent().send_changed_signal()

#region portal link edit

## Replaces all links from [param from_link] to [param new_link].
Expand Down
73 changes: 43 additions & 30 deletions material_maker/panels/graph_edit/graph_edit.gd
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ func _gui_input(event) -> void:
scroll_offset.y += 0.5*size.y
accept_event()
KEY_F:
color_comment_nodes()
colorize_nodes()
KEY_G:
if not get_selected_nodes().is_empty():
has_grab = true
Expand Down Expand Up @@ -1325,13 +1325,16 @@ func undoredo_command(command : Dictionary) -> void:
if has_node("node_"+g.name):
var node = get_node("node_"+g.name)
node.update_node()
"comment_color_change":
"node_color_change":
var g = get_node_from_hier_name(command.node)
g.color = command.color
if g.get_parent() == generator:
if has_node("node_"+g.name):
var node = get_node("node_"+g.name)
node.update_node()
if node is MMGraphComment:
node.update_node()
elif node is MMGraphPortal:
node.queue_redraw()
_:
print("Unknown undo/redo command:")
print(command)
Expand Down Expand Up @@ -1826,33 +1829,43 @@ func _get_connection_line(from : Vector2, to : Vector2) -> PackedVector2Array:
_:
return points

func color_comment_nodes() -> void:
var comments := get_children().filter(
func(n): return (n is MMGraphComment and n.selected))
if not comments.is_empty():
undoredo.start_group()
var picker : PopupPanel = preload("res://material_maker/widgets/color_picker_popup/color_picker_popup.tscn").instantiate()
picker.hide()
add_child(picker)
var color_picker : ColorPicker = picker.get_node("ColorPicker")
for node in comments:
color_picker.color_changed.connect(node.set_color)
color_picker.color = node.generator.color
var csf = get_window().content_scale_factor
picker.about_to_popup.connect(func():
if mm_globals.has_config("color_picker_color_mode"):
color_picker.color_mode = mm_globals.get_config("color_picker_color_mode")
if mm_globals.has_config("color_picker_shape"):
color_picker.picker_shape = mm_globals.get_config("color_picker_shape"))
picker.popup_hide.connect(func():
mm_globals.set_config("color_picker_color_mode", color_picker.color_mode)
mm_globals.set_config("color_picker_shape", color_picker.picker_shape))
picker.content_scale_factor = csf
picker.min_size = picker.get_contents_minimum_size() * csf
picker.position = get_screen_position() + get_local_mouse_position() * csf
picker.popup_hide.connect(picker.queue_free)
picker.popup_hide.connect(undoredo.end_group)
picker.popup()
func colorize_nodes() -> void:
var nodes : Array[GraphElement]
for n in get_children():
if (n is MMGraphPortal or n is MMGraphComment) and n.selected:
nodes.push_back(n)
if nodes.is_empty():
return
undoredo.start_group()

var picker = ColorPicker.new()
var popup : PopupPanel = PopupPanel.new()
popup.add_child(picker)
popup.hide()
add_child(popup)
picker.edit_alpha = false
picker.edit_intensity = false

var csf = get_window().content_scale_factor
popup.about_to_popup.connect(func() -> void:
if mm_globals.has_config("color_picker_color_mode"):
picker.color_mode = mm_globals.get_config("color_picker_color_mode")
if mm_globals.has_config("color_picker_shape"):
picker.picker_shape = mm_globals.get_config("color_picker_shape"))
popup.popup_hide.connect(func() -> void:
mm_globals.set_config("color_picker_color_mode", picker.color_mode)
mm_globals.set_config("color_picker_shape", picker.picker_shape))

popup.content_scale_factor = csf
popup.min_size = popup.get_contents_minimum_size() * csf
popup.position = get_screen_position() + get_local_mouse_position() * csf

picker.color = nodes[0].generator.color
for node in nodes:
picker.color_changed.connect(node.set_color)
popup.popup_hide.connect(undoredo.end_group)
popup.popup_hide.connect(popup.queue_free)
popup.popup()

func _on_resized() -> void:
$GraphUI.size = Vector2.ZERO
Expand Down