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")
|
var icon_element = find_first("icon")
|
||||||
return icon_element.get_attribute("src") if icon_element != null else ""
|
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")
|
var font_elements = find_all("font")
|
||||||
|
|
||||||
for font_element in font_elements:
|
for font_element in font_elements:
|
||||||
@@ -413,7 +413,8 @@ func process_fonts() -> void:
|
|||||||
var weight = font_element.get_attribute("weight", "400")
|
var weight = font_element.get_attribute("weight", "400")
|
||||||
|
|
||||||
if name_str and src:
|
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:
|
func get_meta_content(name_: String) -> String:
|
||||||
var meta_elements = find_all("meta", "name")
|
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:
|
if margin_val != null:
|
||||||
margin_container.add_theme_constant_override(theme_key, margin_val)
|
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:
|
if label is Button:
|
||||||
apply_font_to_button(label, styles)
|
apply_font_to_button(label, styles)
|
||||||
return
|
return
|
||||||
@@ -415,6 +415,10 @@ static func apply_styles_to_label(label: Control, styles: Dictionary, element: H
|
|||||||
if not label is RichTextLabel:
|
if not label is RichTextLabel:
|
||||||
return
|
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 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
|
var font_size = 24 # default
|
||||||
|
|||||||
@@ -388,7 +388,7 @@ func render_content(html_bytes: PackedByteArray) -> void:
|
|||||||
await parser.process_external_styles(current_domain)
|
await parser.process_external_styles(current_domain)
|
||||||
|
|
||||||
# Process and load all custom fonts defined in <font> tags
|
# Process and load all custom fonts defined in <font> tags
|
||||||
parser.process_fonts()
|
parser.process_fonts(current_domain)
|
||||||
FontManager.load_all_fonts()
|
FontManager.load_all_fonts()
|
||||||
|
|
||||||
if parse_result.errors.size() > 0:
|
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 styles.has("font-family") and styles["font-family"] == font_name:
|
||||||
if is_instance_valid(label):
|
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:
|
func get_current_url() -> String:
|
||||||
return current_domain if not current_domain.is_empty() else ""
|
return current_domain if not current_domain.is_empty() else ""
|
||||||
|
|||||||
Reference in New Issue
Block a user