# CORE FRAMEWORK SOURCE FILE # Copyright (c) 2024 The StarOpenSource Project & Contributors # Licensed under the GNU Affero General Public License v3 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero 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 Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . ## Displays the log graphically. ## ## Displays the log output graphically in the background of the application. extends CoreBaseModule # Objects var background: ColorRect var logrtl: RichTextLabel # Resources var font_normal: Font var font_bold: Font # +++ module +++ func _pull_config() -> void: background.visible = !core.config.headless and core.config.logui_enabled 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 _cleanup() -> void: background.remove_child(logrtl) core.sms.remove_child(background) logrtl.queue_free() background.queue_free() # +++ initialization +++ func _initialize() -> void: # Load fonts into memory font_normal = load(core.basepath + "dist/FiraCode/Regular.ttf") font_bold = 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) # Mark as initialized initialized = true func _ready() -> void: # Add to SceneTree core.sms.add_child(background) core.sms.move_child(background, 0) 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: String, _message: String, format: String) -> void: if allowed: logrtl.text = logrtl.text + format + "\n") # +++ process +++ 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