############################################################################## ### CORE FRAMEWORK SOURCE FILE ### ### Copyright (c) 2024 The StarOpenSource Project & Contributors ### ### Licensed under the GNU General Public License v3 ### ### ### ### This program is free software: you can redistribute it and/or modify ### ### it under the terms of the GNU General Public License as published by ### ### the Free Software Foundation, either version 3 of the License, or ### ### (at your option) any later version. ### ### ### ### This program is distributed in the hope that it will be useful, ### ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### ### GNU General Public License for more details. ### ### ### ### You should have received a copy of the GNU General Public License ### ### along with this program. If not, see . ### ############################################################################## ### src/logui.gd (LogUI) ### ### ### ### Displays the log/console output graphically. ### ############################################################################## extends CoreBaseModule # Objects var background: ColorRect var logrtl: RichTextLabel # Resources var font_normal: Font var font_bold: Font func _initialize() -> void: # Load fonts into memory font_normal = ResourceLoader.load(core.basepath + "dist/FiraCode/Regular.ttf") font_bold = ResourceLoader.load(core.basepath + "dist/FiraCode/Bold.ttf") # Create LogUI background = ColorRect.new() background.name = "LogUI" # Create LogRTL logrtl = RichTextLabel.new() logrtl.name = "LogRTL" logrtl.bbcode_enabled = true ## Interaction logrtl.selection_enabled = false logrtl.deselect_on_focus_loss_enabled = true logrtl.drag_and_drop_selection_enabled = false logrtl.mouse_filter = Control.MOUSE_FILTER_IGNORE ## Scrolling logrtl.scroll_active = true logrtl.scroll_following = true ## Disable localization logrtl.auto_translate = false logrtl.localize_numeral_system = false ## Override fonts logrtl.add_theme_font_override("normal_font", font_normal) logrtl.add_theme_font_override("bold_font", font_bold) logrtl.add_theme_font_size_override("normal_font_size", 14) logrtl.add_theme_font_size_override("bold_font_size", 14) func _pull_config() -> void: background.visible = !core.config.headless if core.config.logui_background: background.self_modulate.a = 1 else: background.self_modulate.a = 0 background.color = core.config.logui_background_color logrtl.add_theme_font_size_override("normal_font_size", core.config.logui_font_size) logrtl.add_theme_font_size_override("bold_font_size", core.config.logui_font_size) func _ready() -> void: # Add to SceneTree add_child(background) background.add_child(logrtl) # Hide VScrollBar var vsbar: VScrollBar = logrtl.get_child(0, true) vsbar.set_deferred("size", Vector2i(1, 1)) vsbar.mouse_filter = Control.MOUSE_FILTER_IGNORE vsbar.add_theme_stylebox_override("scroll", StyleBoxEmpty.new()) vsbar.add_theme_stylebox_override("scroll_focus", StyleBoxEmpty.new()) vsbar.add_theme_stylebox_override("grabber", StyleBoxEmpty.new()) vsbar.add_theme_stylebox_override("grabber_highlight", StyleBoxEmpty.new()) vsbar.add_theme_stylebox_override("grabber_pressed", StyleBoxEmpty.new()) # Connect log_event logger.connect("log_event", func(allowed: bool, _level: CoreTypes.LoggerLevel, _origin: Dictionary, _message: String, format: String) -> void: if allowed: logrtl.text = logrtl.text + format + "\n") func _process(_delta: float) -> void: if !core.config.headless: var window_size: Vector2i = DisplayServer.window_get_size() background.size = window_size logrtl.size = window_size