Ver Fonte

LibHTML: Parse link, alink and vlink in <body> and pass to Document

This patch adds HTMLBodyElement::parse_attribute() where we extract the
link colors and stash them away on Document.
Andreas Kling há 5 anos atrás
pai
commit
83a6474d82

+ 16 - 1
Libraries/LibHTML/DOM/Document.cpp

@@ -99,7 +99,7 @@ Color Document::background_color() const
     if (!background_color.has_value() || !background_color.value()->is_color())
         return Color::White;
 
-    return background_color.value()->to_color();
+    return background_color.value()->to_color(*this);
 }
 
 URL Document::complete_url(const String& string) const
@@ -130,3 +130,18 @@ RefPtr<LayoutNode> Document::create_layout_node(const StyleResolver&, const Styl
 {
     return adopt(*new LayoutDocument(*this, StyleProperties::create()));
 }
+
+void Document::set_link_color(Color color)
+{
+    m_link_color = color;
+}
+
+void Document::set_active_link_color(Color color)
+{
+    m_active_link_color = color;
+}
+
+void Document::set_visited_link_color(Color color)
+{
+    m_visited_link_color = color;
+}

+ 13 - 0
Libraries/LibHTML/DOM/Document.h

@@ -54,6 +54,15 @@ public:
 
     Color background_color() const;
 
+    Color link_color() const { return m_link_color; }
+    void set_link_color(Color);
+
+    Color active_link_color() const { return m_active_link_color; }
+    void set_active_link_color(Color);
+
+    Color visited_link_color() const { return m_visited_link_color; }
+    void set_visited_link_color(Color);
+
 private:
     virtual RefPtr<LayoutNode> create_layout_node(const StyleResolver&, const StyleProperties* parent_properties) const override;
 
@@ -62,4 +71,8 @@ private:
     RefPtr<Node> m_hovered_node;
     WeakPtr<Frame> m_frame;
     URL m_url;
+
+    Color m_link_color { Color::Blue };
+    Color m_active_link_color { Color::Red };
+    Color m_visited_link_color { Color::Magenta };
 };

+ 18 - 0
Libraries/LibHTML/DOM/HTMLBodyElement.cpp

@@ -1,5 +1,6 @@
 #include <LibHTML/CSS/StyleProperties.h>
 #include <LibHTML/CSS/StyleValue.h>
+#include <LibHTML/DOM/Document.h>
 #include <LibHTML/DOM/HTMLBodyElement.h>
 
 HTMLBodyElement::HTMLBodyElement(Document& document, const String& tag_name)
@@ -25,3 +26,20 @@ void HTMLBodyElement::apply_presentational_hints(StyleProperties& style) const
         }
     });
 }
+
+void HTMLBodyElement::parse_attribute(const String& name, const String& value)
+{
+    if (name == "link") {
+        auto color = Color::from_string(value);
+        if (color.has_value())
+            document().set_link_color(color.value());
+    } else if (name == "alink") {
+        auto color = Color::from_string(value);
+        if (color.has_value())
+            document().set_active_link_color(color.value());
+    } else if (name == "vlink") {
+        auto color = Color::from_string(value);
+        if (color.has_value())
+            document().set_visited_link_color(color.value());
+    }
+}

+ 1 - 0
Libraries/LibHTML/DOM/HTMLBodyElement.h

@@ -7,5 +7,6 @@ public:
     HTMLBodyElement(Document&, const String& tag_name);
     virtual ~HTMLBodyElement() override;
 
+    virtual void parse_attribute(const String&, const String&) override;
     virtual void apply_presentational_hints(StyleProperties&) const override;
 };