GraphEdit

Наследует: Control < CanvasItem < Node < Object

Редактор графоподобных структур, использующий GraphNode.

Описание

GraphEdit предоставляет инструменты для создания, обработки и отображения различных графиков. Его основная цель в движке — питание систем визуального программирования, таких как визуальные шейдеры, но он также доступен для использования в пользовательских проектах.

GraphEdit сам по себе является лишь пустым контейнером, представляющим бесконечную сетку, в которой могут быть размещены GraphNode. Каждый GraphNode представляет собой узел в графике, отдельную единицу данных в связанной схеме. GraphEdit, в свою очередь, помогает контролировать различные взаимодействия с узлами и между узлами. Когда пользователь пытается подключить, отключить или удалить GraphNode, в GraphEdit выдается сигнал, но по умолчанию никаких действий не выполняется. Программист, использующий этот элемент управления, несет ответственность за реализацию необходимой логики для определения того, как должен обрабатываться каждый запрос.

Производительность: Настоятельно рекомендуется включить режим низкого использования процессора (см. OS.low_processor_usage_mode) при использовании GraphEdits.

Примечание: Имейте в виду, что Node.get_children() также вернет узел уровня соединения с именем _connection_layer из-за технических ограничений. Это поведение может измениться в будущих выпусках.

Свойства

bool

clip_contents

true (overrides Control)

bool

connection_lines_antialiased

true

float

connection_lines_curvature

0.5

float

connection_lines_thickness

4.0

Array[Dictionary]

connections

[]

FocusMode

focus_mode

2 (overrides Control)

GridPattern

grid_pattern

0

bool

minimap_enabled

true

float

minimap_opacity

0.65

Vector2

minimap_size

Vector2(240, 160)

PanningScheme

panning_scheme

0

bool

right_disconnects

false

Vector2

scroll_offset

Vector2(0, 0)

bool

show_arrange_button

true

bool

show_grid

true

bool

show_grid_buttons

true

bool

show_menu

true

bool

show_minimap_button

true

bool

show_zoom_buttons

true

bool

show_zoom_label

false

int

snapping_distance

20

bool

snapping_enabled

true

Dictionary

type_names

{}

float

zoom

1.0

float

zoom_max

2.0736003

float

zoom_min

0.23256795

float

zoom_step

1.2

Методы

PackedVector2Array

_get_connection_line(from_position: Vector2, to_position: Vector2) virtual const

bool

_is_in_input_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual

bool

_is_in_output_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual

bool

_is_node_hover_valid(from_node: StringName, from_port: int, to_node: StringName, to_port: int) virtual

void

add_valid_connection_type(from_type: int, to_type: int)

void

add_valid_left_disconnect_type(type: int)

void

add_valid_right_disconnect_type(type: int)

void

arrange_nodes()

void

attach_graph_element_to_frame(element: StringName, frame: StringName)

void

clear_connections()

Error

connect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int, keep_alive: bool = false)

void

detach_graph_element_from_frame(element: StringName)

void

disconnect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int)

void

force_connection_drag_end()

Array[StringName]

get_attached_nodes_of_frame(frame: StringName)

Dictionary

get_closest_connection_at_point(point: Vector2, max_distance: float = 4.0) const

int

get_connection_count(from_node: StringName, from_port: int)

PackedVector2Array

get_connection_line(from_node: Vector2, to_node: Vector2) const

Array[Dictionary]

get_connection_list_from_node(node: StringName) const

Array[Dictionary]

get_connections_intersecting_with_rect(rect: Rect2) const

GraphFrame

get_element_frame(element: StringName)

HBoxContainer

get_menu_hbox()

bool

is_node_connected(from_node: StringName, from_port: int, to_node: StringName, to_port: int)

bool

is_valid_connection_type(from_type: int, to_type: int) const

void

remove_valid_connection_type(from_type: int, to_type: int)

void

remove_valid_left_disconnect_type(type: int)

void

remove_valid_right_disconnect_type(type: int)

void

set_connection_activity(from_node: StringName, from_port: int, to_node: StringName, to_port: int, amount: float)

void

set_selected(node: Node)

Свойства темы

Color

activity

Color(1, 1, 1, 1)

Color

connection_hover_tint_color

Color(0, 0, 0, 0.3)

Color

connection_rim_color

Color(0.1, 0.1, 0.1, 0.6)

Color

connection_valid_target_tint_color

Color(1, 1, 1, 0.4)

Color

grid_major

Color(1, 1, 1, 0.2)

Color

grid_minor

Color(1, 1, 1, 0.05)

Color

selection_fill

Color(1, 1, 1, 0.3)

Color

selection_stroke

Color(1, 1, 1, 0.8)

int

connection_hover_thickness

0

int

port_hotzone_inner_extent

22

int

port_hotzone_outer_extent

26

Texture2D

grid_toggle

Texture2D

layout

Texture2D

minimap_toggle

Texture2D

snapping_toggle

Texture2D

zoom_in

Texture2D

zoom_out

Texture2D

zoom_reset

StyleBox

menu_panel

StyleBox

panel

StyleBox

panel_focus


Сигналы

begin_node_move() 🔗

Вызывается в начале движения GraphElement.


connection_drag_ended() 🔗

Выдается в конце перетаскивания соединения.


connection_drag_started(from_node: StringName, from_port: int, is_output: bool) 🔗

Выдается в начале перетаскивания соединения.


connection_from_empty(to_node: StringName, to_port: int, release_position: Vector2) 🔗

Вызывается, когда пользователь перетаскивает соединение из входного порта в пустое пространство графика.


connection_request(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗

Отправляется в GraphEdit при попытке создания соединения между from_port from_node GraphNode и to_port to_node GraphNode.


connection_to_empty(from_node: StringName, from_port: int, release_position: Vector2) 🔗

Вызывается, когда пользователь перетаскивает соединение из выходного порта в пустое пространство графика.


copy_nodes_request() 🔗

Выдается, когда этот GraphEdit захватывает действие ui_copy (Ctrl + C по умолчанию). В общем случае этот сигнал указывает на то, что выбранные GraphElement должны быть скопированы.


cut_nodes_request() 🔗

Выдается, когда этот GraphEdit захватывает действие ui_cut (Ctrl + X по умолчанию). В общем случае этот сигнал указывает на то, что выбранные GraphElement-ы должны быть вырезаны.


delete_nodes_request(nodes: Array[StringName]) 🔗

Выдается, когда этот GraphEdit захватывает действие ui_graph_delete (Delete по умолчанию).

nodes — это массив имен узлов, которые следует удалить. Обычно они включают все выбранные узлы.


disconnection_request(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗

Отправляется в GraphEdit при попытке удалить соединение между from_port из from_node GraphNode и to_port из to_node GraphNode.


duplicate_nodes_request() 🔗

Выдается, когда этот GraphEdit захватывает действие ui_graph_duplicate (Ctrl + D по умолчанию). В общем случае этот сигнал указывает на то, что выбранные GraphElement должны быть дублированы.


end_node_move() 🔗

Выдается в конце движения GraphElement.


frame_rect_changed(frame: GraphFrame, new_rect: Rect2) 🔗

Вызывается, когда GraphFrame frame изменяет размер на new_rect.


graph_elements_linked_to_frame_request(elements: Array, frame: StringName) 🔗

Вызывается, когда один или несколько GraphElement помещаются на GraphFrame с именем frame, когда они ранее не были прикреплены ни к какому другому.

elements — это массив GraphElement, которые необходимо прикрепить.


node_deselected(node: Node) 🔗

Вызывается, когда указанный узел GraphElement отменяет выбор (теряет фокус).


node_selected(node: Node) 🔗

Вызывается при выборе указанного узла GraphElement.


paste_nodes_request() 🔗

Выдается, когда этот GraphEdit захватывает действие ui_paste (Ctrl + V по умолчанию). В общем случае этот сигнал указывает на то, что ранее скопированные GraphElement должны быть вставлены.


popup_request(at_position: Vector2) 🔗

Выдается при запросе всплывающего окна. Происходит при щелчке правой кнопкой мыши в GraphEdit. at_position — это положение указателя мыши при отправке сигнала.


scroll_offset_changed(offset: Vector2) 🔗

Выдается, когда пользователь изменяет смещение прокрутки. Не будет выдаваться при изменении в коде.


Перечисления

enum PanningScheme: 🔗

PanningScheme SCROLL_ZOOMS = 0

Mouse Wheel будет увеличивать масштаб, Ctrl + Mouse Wheel будет перемещать вид.

PanningScheme SCROLL_PANS = 1

Mouse Wheel перемещает вид, Ctrl + Mouse Wheel масштабирует.


enum GridPattern: 🔗

GridPattern GRID_PATTERN_LINES = 0

Нарисуйте сетку сплошными линиями.

GridPattern GRID_PATTERN_DOTS = 1

Нарисуйте сетку с помощью точек.


Описания свойств

bool connection_lines_antialiased = true 🔗

  • void set_connection_lines_antialiased(value: bool)

  • bool is_connection_lines_antialiased()

Если true, линии между узлами будут использовать сглаживание.


float connection_lines_curvature = 0.5 🔗

  • void set_connection_lines_curvature(value: float)

  • float get_connection_lines_curvature()

Кривизна линий между узлами. 0 приводит к прямым линиям.


float connection_lines_thickness = 4.0 🔗

  • void set_connection_lines_thickness(value: float)

  • float get_connection_lines_thickness()

Толщина линий между узлами.


Array[Dictionary] connections = [] 🔗

Связи между GraphNode.

Связь представлена как Dictionary в форме:

{
    from_node: StringName,
    from_port: int,
    to_node: StringName,
    to_port: int,
    keep_alive: bool
}

Связи с keep_alive, установленным на false, могут быть удалены автоматически, если они недействительны во время перерисовки.


GridPattern grid_pattern = 0 🔗

Узор, используемый для рисования сетки.


bool minimap_enabled = true 🔗

  • void set_minimap_enabled(value: bool)

  • bool is_minimap_enabled()

Если true, мини-карта видна.


float minimap_opacity = 0.65 🔗

  • void set_minimap_opacity(value: float)

  • float get_minimap_opacity()

Непрозрачность прямоугольника миникарты.


Vector2 minimap_size = Vector2(240, 160) 🔗

Размер прямоугольника миникарты. Сама карта основана на размере области сетки и масштабируется, чтобы вписаться в этот прямоугольник.


PanningScheme panning_scheme = 0 🔗

Определяет схему управления панорамированием с помощью колесика мыши.


bool right_disconnects = false 🔗

  • void set_right_disconnects(value: bool)

  • bool is_right_disconnects_enabled()

Если true, позволяет отключать существующие соединения в GraphEdit путем перетаскивания правого конца.


Vector2 scroll_offset = Vector2(0, 0) 🔗

Смещение прокрутки.


bool show_arrange_button = true 🔗

  • void set_show_arrange_button(value: bool)

  • bool is_showing_arrange_button()

Если true, кнопка для автоматического упорядочивания узлов графа будет видна.


bool show_grid = true 🔗

  • void set_show_grid(value: bool)

  • bool is_showing_grid()

Если true, сетка видна.


bool show_grid_buttons = true 🔗

  • void set_show_grid_buttons(value: bool)

  • bool is_showing_grid_buttons()

Если true, то видны кнопки, позволяющие настраивать параметры сетки и привязки.


bool show_menu = true 🔗

  • void set_show_menu(value: bool)

  • bool is_showing_menu()

Если true, панель инструментов меню видна.


bool show_minimap_button = true 🔗

  • void set_show_minimap_button(value: bool)

  • bool is_showing_minimap_button()

Если true, кнопка переключения мини-карты будет видна.


bool show_zoom_buttons = true 🔗

  • void set_show_zoom_buttons(value: bool)

  • bool is_showing_zoom_buttons()

Если true, видны кнопки, позволяющие изменять и сбрасывать уровень масштабирования.


bool show_zoom_label = false 🔗

  • void set_show_zoom_label(value: bool)

  • bool is_showing_zoom_label()

Если true, то виден текст с текущим уровнем масштабирования. Уровень масштабирования отображается в процентах.


int snapping_distance = 20 🔗

  • void set_snapping_distance(value: int)

  • int get_snapping_distance()

Расстояние привязки в пикселях, также определяет расстояние между линиями сетки.


bool snapping_enabled = true 🔗

  • void set_snapping_enabled(value: bool)

  • bool is_snapping_enabled()

Если true, включает привязку.


Dictionary type_names = {} 🔗

Dictionary удобочитаемых названий типов портов.


float zoom = 1.0 🔗

Текущее значение масштабирования.


float zoom_max = 2.0736003 🔗

  • void set_zoom_max(value: float)

  • float get_zoom_max()

Максимальный предел масштабирования.


float zoom_min = 0.23256795 🔗

  • void set_zoom_min(value: float)

  • float get_zoom_min()

Минимальный предел масштабирования.


float zoom_step = 1.2 🔗

  • void set_zoom_step(value: float)

  • float get_zoom_step()

Шаг каждого уровня масштабирования.


Описания метода

PackedVector2Array _get_connection_line(from_position: Vector2, to_position: Vector2) virtual const 🔗

Виртуальный метод, который можно переопределить, чтобы настроить способ рисования соединений.


bool _is_in_input_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual 🔗

Возвращает, находится ли mouse_position в зоне активного входа.

По умолчанию зона активного входа — это Rect2, расположенный таким образом, что его центр находится в in_node.GraphNode.get_input_port_position()(in_port) (В случае выхода вместо этого вызовите GraphNode.get_output_port_position()). Ширина зоны активного входа в два раза больше свойства темы port_grab_distance_horizontal, а ее высота в два раза больше port_grab_distance_vertical.

Ниже приведен пример кода, который поможет начать работу:

func _is_in_input_hotzone(in_node, in_port, mouse_position):
    var port_size = Vector2(get_theme_constant("port_grab_distance_horizontal"), get_theme_constant("port_grab_distance_vertical"))
    var port_pos = in_node.get_position() + in_node.get_input_port_position(in_port) - port_size / 2
    var rect = Rect2(port_pos, port_size)

    return rect.has_point(mouse_position)

bool _is_in_output_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual 🔗

Возвращает, находится ли mouse_position в выходной горячей зоне. Для получения дополнительной информации о горячих зонах см. _is_in_input_hotzone().

Ниже приведен пример кода, который поможет начать работу:

func _is_in_output_hotzone(in_node, in_port, mouse_position):
    var port_size = Vector2(get_theme_constant("port_grab_distance_horizontal"), get_theme_constant("port_grab_distance_vertical"))
    var port_pos = in_node.get_position() + in_node.get_output_port_position(in_port) - port_size / 2
    var rect = Rect2(port_pos, port_size)

    return rect.has_point(mouse_position)

bool _is_node_hover_valid(from_node: StringName, from_port: int, to_node: StringName, to_port: int) virtual 🔗

Этот виртуальный метод можно использовать для вставки дополнительного обнаружения ошибок, пока пользователь перетаскивает соединение через допустимый порт.

Верните true, если соединение действительно допустимо, или верните false, если соединение невозможно. Если соединение невозможно, то привязка к порту и, следовательно, запрос на соединение к этому порту не произойдет.

В этом примере соединение с тем же узлом подавляется:

func _is_node_hover_valid(from, from_port, to, to_port):
    return from != to

void add_valid_connection_type(from_type: int, to_type: int) 🔗

Позволяет устанавливать соединение между двумя разными типами портов. Тип порта определяется индивидуально для левого и правого порта каждого слота с помощью метода GraphNode.set_slot().

См. также is_valid_connection_type() и remove_valid_connection_type().


void add_valid_left_disconnect_type(type: int) 🔗

Позволяет отключать узлы при перетаскивании из левого порта слота GraphNode, если он имеет указанный тип. См. также remove_valid_left_disconnect_type().


void add_valid_right_disconnect_type(type: int) 🔗

Позволяет отключать узлы при перетаскивании из правого порта слота GraphNode, если он имеет указанный тип. См. также remove_valid_right_disconnect_type().


void arrange_nodes() 🔗

Переупорядочивает выбранные узлы в макете, с минимальным количеством пересечений между соединениями и равномерным горизонтальным и вертикальным зазором между узлами.


void attach_graph_element_to_frame(element: StringName, frame: StringName) 🔗

Прикрепляет element GraphElement к frame GraphFrame.


void clear_connections() 🔗

Удаляет все соединения между узлами.


Error connect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int, keep_alive: bool = false) 🔗

Создайте соединение между from_port from_node GraphNode и to_port to_node GraphNode. Если соединение уже существует, соединение не создается.

Соединения с keep_alive, установленным на false, могут быть удалены автоматически, если они недействительны во время перерисовки.


void detach_graph_element_from_frame(element: StringName) 🔗

Отсоединяет element GraphElement от GraphFrame, к которому он в данный момент прикреплен.


void disconnect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗

Удаляет связь между from_port from_node GraphNode и to_port to_node GraphNode. Если связь не существует, то связь не удаляется.


void force_connection_drag_end() 🔗

Завершает создание текущего соединения. Другими словами, если вы перетаскиваете соединение, вы можете использовать этот метод, чтобы прервать процесс и удалить линию, которая следовала за вашим курсором.

Лучше всего использовать его вместе с connection_drag_started и connection_drag_ended для добавления пользовательского поведения, например добавления узла с помощью сочетаний клавиш.

Примечание: Этот метод подавляет любые другие сигналы запроса на соединение, кроме connection_drag_ended.


Array[StringName] get_attached_nodes_of_frame(frame: StringName) 🔗

Возвращает массив имен узлов, прикрепленных к GraphFrame с заданным именем.


Dictionary get_closest_connection_at_point(point: Vector2, max_distance: float = 4.0) const 🔗

Возвращает ближайшее соединение в заданной точке в пространстве экрана. Если соединение не найдено в пределах max_distance пикселей, возвращается пустой Dictionary.

Соединение представляется как Dictionary в виде:

{
    from_node: StringName,
    from_port: int,
    to_node: StringName,
    to_port: int,
    keep_alive: bool
}

Например, получение соединения в заданной позиции мыши может быть достигнуто следующим образом:

var connection = get_closest_connection_at_point(mouse_event.get_position())

int get_connection_count(from_node: StringName, from_port: int) 🔗

Возвращает количество соединений из from_port from_node.


PackedVector2Array get_connection_line(from_node: Vector2, to_node: Vector2) const 🔗

Возвращает точки, которые составят связь между from_node и to_node.


Array[Dictionary] get_connection_list_from_node(node: StringName) const 🔗

Возвращает Array, содержащий список всех соединений для node.

Соединение представлено как Dictionary в форме:

{
    from_node: StringName,
    from_port: int,
    to_node: StringName,
    to_port: int,
    keep_alive: bool
}

Пример: Получить все соединения на определенном порту:

func get_connection_list_from_port(node, port):
    var connections = get_connection_list_from_node(node)
    var result = []
    for connection in connections:
        var dict = {}
        if connection["from_node"] == node and connection["from_port"] == port:
            dict["node"] = connection["to_node"]
            dict["port"] = connection["to_port"]
            dict["type"] = "левый"
            result.push_back(dict)
        elif connection["to_node"] == node and connection["to_port"] == port:
            dict["node"] = connection["from_node"]
            dict["port"] = connection["from_port"]
            dict["type"] = "правый"
            result.push_back(dict)
    return result

Array[Dictionary] get_connections_intersecting_with_rect(rect: Rect2) const 🔗

Возвращает Array, содержащий список соединений, которые пересекаются с заданным Rect2.

Соединение представлено как Dictionary в форме:

{
    from_node: StringName,
    from_port: int,
    to_node: StringName,
    to_port: int,
    keep_alive: bool
}

GraphFrame get_element_frame(element: StringName) 🔗

Возвращает GraphFrame, содержащий GraphElement с указанным именем.


HBoxContainer get_menu_hbox() 🔗

Получает HBoxContainer, содержащий элементы управления масштабированием и привязкой к сетке в левом верхнем углу графика. Вы можете использовать этот метод для изменения положения панели инструментов или добавления к ней собственных элементов управления.

Предупреждение: Это обязательный внутренний узел, его удаление и освобождение может привести к сбою. Если вы хотите скрыть его или любой из его дочерних элементов, используйте их свойство CanvasItem.visible.


bool is_node_connected(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗

Возвращает true, если from_port узла from_node GraphNode подключен к to_port узла to_node GraphNode.


bool is_valid_connection_type(from_type: int, to_type: int) const 🔗

Возвращает, возможно ли установить соединение между двумя разными типами портов. Тип порта определяется индивидуально для левого и правого порта каждого слота с помощью метода GraphNode.set_slot().

См. также add_valid_connection_type() и remove_valid_connection_type().


void remove_valid_connection_type(from_type: int, to_type: int) 🔗

Запрещает соединение между двумя различными типами портов, ранее разрешенными add_valid_connection_type(). Тип порта определяется индивидуально для левого и правого порта каждого слота с помощью метода GraphNode.set_slot().

См. также is_valid_connection_type().


void remove_valid_left_disconnect_type(type: int) 🔗

Запрещает отключать узлы при перетаскивании из левого порта слота GraphNode, если он имеет указанный тип. Используйте это для запрета, отключений, ранее разрешенного с помощью add_valid_left_disconnect_type().


void remove_valid_right_disconnect_type(type: int) 🔗

Запрещает отключать узлы при перетаскивании из правого порта слота GraphNode, если он имеет указанный тип. Используйте это для запрета отключений, ранее разрешенного с помощью add_valid_right_disconnect_type().


void set_connection_activity(from_node: StringName, from_port: int, to_node: StringName, to_port: int, amount: float) 🔗

Устанавливает окраску соединения между from_node from_port и to_node to_port с цветом, предоставленным в свойстве темы activity. Цвет линейно интерполируется между цветом соединения и цветом активности с использованием amount в качестве веса.


void set_selected(node: Node) 🔗

Устанавливает указанный node как выбранный.


Описания свойств темы

Color activity = Color(1, 1, 1, 1) 🔗

Цвет линии соединения интерполируется на основе значения активности соединения (см. set_connection_activity()).


Color connection_hover_tint_color = Color(0, 0, 0, 0.3) 🔗

Цвет, который смешивается с соединительной линией при наведении на нее курсора мыши.


Color connection_rim_color = Color(0.1, 0.1, 0.1, 0.6) 🔗

Цвет ободка вокруг каждой соединительной линии используется для того, чтобы сделать пересекающиеся линии более различимыми.


Color connection_valid_target_tint_color = Color(1, 1, 1, 0.4) 🔗

Цвет, который смешивается с линией соединения, когда текущее перетаскиваемое соединение наводится на допустимый целевой порт.


Color grid_major = Color(1, 1, 1, 0.2) 🔗

Цвет основных линий/точек сетки.


Color grid_minor = Color(1, 1, 1, 0.05) 🔗

Цвет второстепенных линий/точек сетки.


Color selection_fill = Color(1, 1, 1, 0.3) 🔗

Цвет заливки прямоугольника выделения.


Color selection_stroke = Color(1, 1, 1, 0.8) 🔗

Цвет контура прямоугольника выделения.


int connection_hover_thickness = 0 🔗

Расширяет линию соединения при наведении курсора мыши на определенный процент. Значение 0 отключает подсветку. Значение 100 удваивает ширину линии.


int port_hotzone_inner_extent = 22 🔗

Горизонтальный диапазон, в пределах которого можно захватить порт (внутренняя сторона).


int port_hotzone_outer_extent = 26 🔗

Горизонтальный диапазон, в пределах которого можно захватить порт (внешняя сторона).


Texture2D grid_toggle 🔗

Значок кнопки переключения сетки.


Texture2D layout 🔗

Значок кнопки макета для автоматического размещения графика.


Texture2D minimap_toggle 🔗

Значок кнопки переключения мини-карты.


Texture2D snapping_toggle 🔗

Значок для кнопки-переключателя привязки.


Texture2D zoom_in 🔗

Значок кнопки увеличения масштаба.


Texture2D zoom_out 🔗

Значок кнопки уменьшения масштаба.


Texture2D zoom_reset 🔗

Значок кнопки сброса масштаба.


StyleBox menu_panel 🔗

There is currently no description for this theme property. Please help us by contributing one!


StyleBox panel 🔗

Фон, нарисованный под сеткой.


StyleBox panel_focus 🔗

StyleBox используется, когда фокус находится на GraphEdit (при использовании со вспомогательными приложениями).