11var panel_name:String =
"PerformanceOverlayPanel"
12var label_name:String =
"PerformanceOverlayLabel"
15func render(parent:Control, monitor:Object, options:Dictionary = {}) -> Control:
16 if parent == null
or monitor == null:
18 var panel:PanelContainer = _get_or_create_panel(parent, options)
19 var label:Label = _get_or_create_label(panel, options)
20 label.text = _summary_text(monitor, options)
21 panel.visible = bool(options.get(
"visible", true))
22 _apply_panel_rect(panel, parent, options)
26func hide(parent:Control) -> void:
29 var panel = parent.get_node_or_null(panel_name)
30 if panel
is CanvasItem:
34func clear(parent:Control) -> void:
37 var panel = parent.get_node_or_null(panel_name)
42func _get_or_create_panel(parent:Control, options:Dictionary) -> PanelContainer:
43 var name_value:String = str(options.get(
"panel_name", panel_name))
44 var panel = parent.get_node_or_null(name_value)
45 if panel
is PanelContainer:
47 var created = PanelContainer.new()
48 created.name = name_value
49 created.mouse_filter = Control.MOUSE_FILTER_IGNORE
50 var style = StyleBoxFlat.new()
51 style.bg_color = Color(str(options.get(
"background_color",
"#06111ccc")))
52 style.border_color = Color(str(options.get(
"border_color",
"#5cc8ff")))
53 style.set_border_width_all(
int(options.get(
"border_width", 1)))
54 style.set_corner_radius_all(
int(options.get(
"corner_radius", 6)))
55 created.add_theme_stylebox_override(
"panel", style)
56 parent.add_child(created)
60func _get_or_create_label(panel:PanelContainer, options:Dictionary) -> Label:
61 var name_value:String = str(options.get(
"label_name", label_name))
62 var label = panel.get_node_or_null(name_value)
65 var created = Label.new()
66 created.name = name_value
67 created.mouse_filter = Control.MOUSE_FILTER_IGNORE
68 created.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
69 created.clip_text = true
70 created.max_lines_visible =
int(options.get(
"max_lines", 8))
71 created.add_theme_font_size_override(
"font_size",
int(options.get(
"font_size", 11)))
72 created.add_theme_color_override(
"font_color", Color(str(options.get(
"font_color",
"#eef3f8"))))
73 panel.add_child(created)
77func _summary_text(monitor:Object, options:Dictionary) -> String:
78 var max_lines:int = max(1,
int(options.get(
"max_lines", 8)))
80 if monitor.has_method(
"format_summary_lines"):
81 lines = monitor.call(
"format_summary_lines")
82 elif monitor.has_method(
"get_summary"):
83 lines = [JSON.stringify(monitor.call(
"get_summary"))]
85 for index
in range(min(max_lines, lines.size())):
86 text_lines.append(str(lines[index]))
87 return "\n".join(text_lines)
90func _apply_panel_rect(panel:PanelContainer, parent:Control, options:Dictionary) -> void:
91 var width:float =
float(options.get(
"width", min(360.0, parent.size.x - 16.0)))
92 var height:float =
float(options.get(
"height", 150.0))
93 var margin:float =
float(options.get(
"margin", 8.0))
94 panel.position = Vector2(margin, margin)
95 panel.size = Vector2(max(120.0, width), max(48.0, height))