fix font loading, and support for relative URLs in fonts
This commit is contained in:
@@ -404,7 +404,7 @@ func get_icon() -> String:
|
||||
var icon_element = find_first("icon")
|
||||
return icon_element.get_attribute("src") if icon_element != null else ""
|
||||
|
||||
func process_fonts() -> void:
|
||||
func process_fonts(base_url: String = "") -> void:
|
||||
var font_elements = find_all("font")
|
||||
|
||||
for font_element in font_elements:
|
||||
@@ -413,7 +413,8 @@ func process_fonts() -> void:
|
||||
var weight = font_element.get_attribute("weight", "400")
|
||||
|
||||
if name_str and src:
|
||||
FontManager.register_font(name_str, src, weight)
|
||||
var resolved_src = URLUtils.resolve_url(base_url, src)
|
||||
FontManager.register_font(name_str, resolved_src, weight)
|
||||
|
||||
func get_meta_content(name_: String) -> String:
|
||||
var meta_elements = find_all("meta", "name")
|
||||
|
||||
@@ -407,7 +407,7 @@ static func apply_margin_styles_to_container(margin_container: MarginContainer,
|
||||
if margin_val != null:
|
||||
margin_container.add_theme_constant_override(theme_key, margin_val)
|
||||
|
||||
static func apply_styles_to_label(label: Control, styles: Dictionary, element: HTMLParser.HTMLElement, parser, text_override: String = "") -> void:
|
||||
static func apply_styles_to_label(label: Control, styles: Dictionary, element: HTMLParser.HTMLElement, parser, text_override: String = "", is_refresh: bool = false) -> void:
|
||||
if label is Button:
|
||||
apply_font_to_button(label, styles)
|
||||
return
|
||||
@@ -415,6 +415,10 @@ static func apply_styles_to_label(label: Control, styles: Dictionary, element: H
|
||||
if not label is RichTextLabel:
|
||||
return
|
||||
|
||||
if not is_refresh and styles.has("font-family") and styles["font-family"] not in ["sans-serif", "serif", "monospace"]:
|
||||
var main_node = Engine.get_main_loop().current_scene
|
||||
main_node.register_font_dependent_element(label, styles, element, parser)
|
||||
|
||||
var text = text_override if text_override != "" else (element.get_preserved_text() if element.tag_name == "pre" else element.get_bbcode_formatted_text(parser))
|
||||
|
||||
var font_size = 24 # default
|
||||
|
||||
@@ -388,7 +388,7 @@ func render_content(html_bytes: PackedByteArray) -> void:
|
||||
await parser.process_external_styles(current_domain)
|
||||
|
||||
# Process and load all custom fonts defined in <font> tags
|
||||
parser.process_fonts()
|
||||
parser.process_fonts(current_domain)
|
||||
FontManager.load_all_fonts()
|
||||
|
||||
if parse_result.errors.size() > 0:
|
||||
@@ -819,7 +819,7 @@ func refresh_fonts(font_name: String) -> void:
|
||||
|
||||
if styles.has("font-family") and styles["font-family"] == font_name:
|
||||
if is_instance_valid(label):
|
||||
StyleManager.apply_styles_to_label(label, styles, element, parser)
|
||||
StyleManager.apply_styles_to_label(label, styles, element, parser, "", true)
|
||||
|
||||
func get_current_url() -> String:
|
||||
return current_domain if not current_domain.is_empty() else ""
|
||||
|
||||
Reference in New Issue
Block a user