90 lines
4.2 KiB
GDScript3
90 lines
4.2 KiB
GDScript3
|
##############################################################################
|
||
|
### 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 <https://www.gnu.org/licenses/>. ###
|
||
|
##############################################################################
|
||
|
### 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
|