diff options
Diffstat (limited to 'scene/gui/graph_node.cpp')
-rw-r--r-- | scene/gui/graph_node.cpp | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 385b564b7c..fdebca3d28 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -33,6 +33,7 @@ #include "core/string/translation.h" #include "scene/gui/box_container.h" #include "scene/gui/label.h" +#include "scene/theme/theme_db.h" bool GraphNode::_set(const StringName &p_name, const Variant &p_value) { String str = p_name; @@ -151,8 +152,8 @@ void GraphNode::_get_property_list(List<PropertyInfo> *p_list) const { void GraphNode::_resort() { Size2 new_size = get_size(); - Ref<StyleBox> sb_panel = get_theme_stylebox(SNAME("panel")); - Ref<StyleBox> sb_titlebar = get_theme_stylebox(SNAME("titlebar")); + Ref<StyleBox> sb_panel = theme_cache.panel; + Ref<StyleBox> sb_titlebar = theme_cache.titlebar; // Resort titlebar first. Size2 titlebar_size = Size2(new_size.width, titlebar_hbox->get_size().height); @@ -164,8 +165,8 @@ void GraphNode::_resort() { Size2i titlebar_min_size = titlebar_hbox->get_combined_minimum_size(); // First pass, determine minimum size AND amount of stretchable elements. - Ref<StyleBox> sb_slot = get_theme_stylebox(SNAME("slot")); - int separation = get_theme_constant(SNAME("separation")); + Ref<StyleBox> sb_slot = theme_cache.slot; + int separation = theme_cache.separation; int children_count = 0; int stretch_min = 0; @@ -300,7 +301,7 @@ void GraphNode::draw_port(int p_slot_index, Point2i p_pos, bool p_left, const Co Point2 icon_offset; if (!port_icon.is_valid()) { - port_icon = get_theme_icon(SNAME("port")); + port_icon = theme_cache.port; } icon_offset = -port_icon->get_size() * 0.5; @@ -311,19 +312,15 @@ void GraphNode::_notification(int p_what) { switch (p_what) { case NOTIFICATION_DRAW: { // Used for layout calculations. - Ref<StyleBox> sb_panel = get_theme_stylebox(SNAME("panel")); - Ref<StyleBox> sb_titlebar = get_theme_stylebox(SNAME("titlebar")); + Ref<StyleBox> sb_panel = theme_cache.panel; + Ref<StyleBox> sb_titlebar = theme_cache.titlebar; // Used for drawing. - Ref<StyleBox> sb_to_draw_panel = get_theme_stylebox(selected ? SNAME("panel_selected") : SNAME("panel")); - Ref<StyleBox> sb_to_draw_titlebar = get_theme_stylebox(selected ? SNAME("titlebar_selected") : SNAME("titlebar")); + Ref<StyleBox> sb_to_draw_panel = selected ? theme_cache.panel_selected : theme_cache.panel; + Ref<StyleBox> sb_to_draw_titlebar = selected ? theme_cache.titlebar_selected : theme_cache.titlebar; - Ref<StyleBox> sb_slot = get_theme_stylebox(SNAME("slot")); + Ref<StyleBox> sb_slot = theme_cache.slot; - int port_h_offset = get_theme_constant(SNAME("port_h_offset")); - - Ref<Texture2D> resizer_icon = get_theme_icon(SNAME("resizer")); - - Color resizer_color = get_theme_color(SNAME("resizer_color")); + int port_h_offset = theme_cache.port_h_offset; Rect2 titlebar_rect(Point2(), titlebar_hbox->get_size() + sb_titlebar->get_minimum_size()); Size2 body_size = get_size(); @@ -377,7 +374,7 @@ void GraphNode::_notification(int p_what) { } if (resizable) { - draw_texture(resizer_icon, get_size() - resizer_icon->get_size(), resizer_color); + draw_texture(theme_cache.resizer, get_size() - theme_cache.resizer->get_size(), theme_cache.resizer_color); } } break; } @@ -566,11 +563,11 @@ void GraphNode::set_slot_draw_stylebox(int p_slot_index, bool p_enable) { } Size2 GraphNode::get_minimum_size() const { - Ref<StyleBox> sb_panel = get_theme_stylebox(SNAME("panel")); - Ref<StyleBox> sb_titlebar = get_theme_stylebox(SNAME("titlebar")); - Ref<StyleBox> sb_slot = get_theme_stylebox(SNAME("slot")); + Ref<StyleBox> sb_panel = theme_cache.panel; + Ref<StyleBox> sb_titlebar = theme_cache.titlebar; + Ref<StyleBox> sb_slot = theme_cache.slot; - int separation = get_theme_constant(SNAME("separation")); + int separation = theme_cache.separation; Size2 minsize = titlebar_hbox->get_minimum_size() + sb_titlebar->get_minimum_size(); for (int i = 0; i < get_child_count(false); i++) { @@ -599,11 +596,11 @@ Size2 GraphNode::get_minimum_size() const { } void GraphNode::_port_pos_update() { - int edgeofs = get_theme_constant(SNAME("port_h_offset")); - int separation = get_theme_constant(SNAME("separation")); + int edgeofs = theme_cache.port_h_offset; + int separation = theme_cache.separation; - Ref<StyleBox> sb_panel = get_theme_stylebox(SNAME("panel")); - Ref<StyleBox> sb_titlebar = get_theme_stylebox(SNAME("titlebar")); + Ref<StyleBox> sb_panel = theme_cache.panel; + Ref<StyleBox> sb_titlebar = theme_cache.titlebar; left_port_cache.clear(); right_port_cache.clear(); @@ -754,9 +751,7 @@ HBoxContainer *GraphNode::get_titlebar_hbox() { Control::CursorShape GraphNode::get_cursor_shape(const Point2 &p_pos) const { if (resizable) { - Ref<Texture2D> resizer = get_theme_icon(SNAME("resizer")); - - if (resizing || (p_pos.x > get_size().x - resizer->get_width() && p_pos.y > get_size().y - resizer->get_height())) { + if (resizing || (p_pos.x > get_size().x - theme_cache.resizer->get_width() && p_pos.y > get_size().y - theme_cache.resizer->get_height())) { return CURSOR_FDIAGSIZE; } } @@ -830,6 +825,19 @@ void GraphNode::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::STRING, "title"), "set_title", "get_title"); ADD_SIGNAL(MethodInfo("slot_updated", PropertyInfo(Variant::INT, "slot_index"))); + + BIND_THEME_ITEM(Theme::DATA_TYPE_STYLEBOX, GraphNode, panel); + BIND_THEME_ITEM(Theme::DATA_TYPE_STYLEBOX, GraphNode, panel_selected); + BIND_THEME_ITEM(Theme::DATA_TYPE_STYLEBOX, GraphNode, titlebar); + BIND_THEME_ITEM(Theme::DATA_TYPE_STYLEBOX, GraphNode, titlebar_selected); + BIND_THEME_ITEM(Theme::DATA_TYPE_STYLEBOX, GraphNode, slot); + + BIND_THEME_ITEM(Theme::DATA_TYPE_CONSTANT, GraphNode, separation); + BIND_THEME_ITEM(Theme::DATA_TYPE_CONSTANT, GraphNode, port_h_offset); + + BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, GraphNode, port); + BIND_THEME_ITEM(Theme::DATA_TYPE_ICON, GraphNode, resizer); + BIND_THEME_ITEM(Theme::DATA_TYPE_COLOR, GraphNode, resizer_color); } GraphNode::GraphNode() { |