diff --git a/Scenes/Tags/button.tscn b/Scenes/Tags/button.tscn index bc1656d..008c96f 100644 --- a/Scenes/Tags/button.tscn +++ b/Scenes/Tags/button.tscn @@ -11,8 +11,9 @@ script = ExtResource("1_button") [node name="ButtonNode" type="Button" parent="."] layout_mode = 1 -offset_right = 100.0 -offset_bottom = 30.0 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 mouse_default_cursor_shape = 2 diff --git a/Scenes/Tags/input.tscn b/Scenes/Tags/input.tscn index f8bdbd1..8e9f4ba 100644 --- a/Scenes/Tags/input.tscn +++ b/Scenes/Tags/input.tscn @@ -71,10 +71,8 @@ layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 -offset_left = -102.0 -offset_top = -24.0 -offset_right = -1893.0 -offset_bottom = -1020.0 +offset_right = -1791.0 +offset_bottom = -996.0 grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 3 @@ -84,7 +82,7 @@ script = ExtResource("1_input") [node name="LineEdit" type="LineEdit" parent="."] visible = false layout_mode = 1 -offset_right = 400.0 +offset_right = 200.0 offset_bottom = 35.0 theme = ExtResource("2_theme") text = "test" @@ -110,7 +108,6 @@ button_group = SubResource("ButtonGroup_06us3") flat = true [node name="ColorPickerButton" type="ColorPickerButton" parent="."] -visible = false layout_mode = 0 offset_right = 83.0 offset_bottom = 35.0 @@ -121,6 +118,7 @@ visible = false layout_mode = 0 [node name="HSlider" type="HSlider" parent="."] +visible = false layout_mode = 0 offset_right = 200.0 offset_bottom = 35.0 diff --git a/Scripts/B9/HTMLParser.gd b/Scripts/B9/HTMLParser.gd index c6a0889..b744ecb 100644 --- a/Scripts/B9/HTMLParser.gd +++ b/Scripts/B9/HTMLParser.gd @@ -123,18 +123,50 @@ func process_styles() -> void: for child: CSSParser.CSSRule in parse_result.css_parser.stylesheet.rules: print("INFO: for selector \"%s\" we have props: %s" % [child.selector, child.properties]) -func get_element_styles(element: HTMLElement, event: String = "") -> Dictionary: +func get_element_styles_with_inheritance(element: HTMLElement, event: String = "", visited_elements: Array = []) -> Dictionary: + # Prevent infinite recursion + if element in visited_elements: + return {} + + visited_elements.append(element) + + var styles = {} + + styles.merge(parse_result.css_parser.stylesheet.get_styles_for_element(element.tag_name, event)) + + # Apply inline styles (higher priority) - force override CSS rules + var inline_style = element.get_attribute("style") + if inline_style.length() > 0: + var inline_parsed = CSSParser.parse_inline_style(inline_style) + for property in inline_parsed: + styles[property] = inline_parsed[property] + + # Inherit certain properties from parent elements + var inheritable_properties = ["width", "height", "font-size", "color", "font-family"] + var parent_element = element.parent + while parent_element and parent_element.tag_name != "body": + var parent_styles = get_element_styles_internal(parent_element, event) + for property in inheritable_properties: + # Only inherit if child doesn't already have this property + if not styles.has(property) and parent_styles.has(property): + styles[property] = parent_styles[property] + parent_element = parent_element.parent + + return styles + +func get_element_styles_internal(element: HTMLElement, event: String = "") -> Dictionary: var styles = {} # Apply CSS rules if parse_result.css_parser: styles.merge(parse_result.css_parser.stylesheet.get_styles_for_element(element.tag_name, event)) - # Apply inline styles (higher priority) + # Apply inline styles (higher priority) - force override CSS rules var inline_style = element.get_attribute("style") if inline_style.length() > 0: var inline_parsed = CSSParser.parse_inline_style(inline_style) - styles.merge(inline_parsed) + for property in inline_parsed: + styles[property] = inline_parsed[property] # Force override return styles @@ -241,7 +273,7 @@ func get_all_stylesheets() -> Array[String]: return get_attribute_values("style", "src") func apply_element_styles(node: Control, element: HTMLElement, parser: HTMLParser) -> void: - var styles = parser.get_element_styles(element) + var styles = parser.get_element_styles_with_inheritance(element, "", []) if node.get("rich_text_label"): var label = node.rich_text_label var text = HTMLParser.get_bbcode_with_styles(element, styles, parser) @@ -255,7 +287,7 @@ static func get_bbcode_with_styles(element: HTMLElement, styles: Dictionary, par for child in element.children: var child_styles = styles if parser != null: - child_styles = parser.get_element_styles(child) + child_styles = parser.get_element_styles_with_inheritance(child, "", []) var child_content = HTMLParser.get_bbcode_with_styles(child, child_styles, parser) match child.tag_name: "b": diff --git a/Scripts/Constants.gd b/Scripts/Constants.gd index 73bc4eb..13f4660 100644 --- a/Scripts/Constants.gd +++ b/Scripts/Constants.gd @@ -21,7 +21,7 @@ a { text-[#1a0dab] } pre { text-xl font-mono } """ -var HTML_CONTENT = " +var HTML_CONTENT2 = " My cool web @@ -230,3 +230,68 @@ So Stretch ".to_utf8_buffer() + +var HTML_CONTENT = """ + Task Manager + + + + + + +