diff --git a/Base/res/themes/Dark.ini b/Base/res/themes/Dark.ini index 2130d03681b..c74193e9a3d 100644 --- a/Base/res/themes/Dark.ini +++ b/Base/res/themes/Dark.ini @@ -31,3 +31,6 @@ Selection=#14141a SelectionText=white RubberBandFill=#8080803c RubberBandBorder=black +Link=#88c +ActiveLink=#c88 +VisitedLink=#c8c diff --git a/Base/res/themes/Default.ini b/Base/res/themes/Default.ini index da38dec0e1c..fff9f012cc2 100644 --- a/Base/res/themes/Default.ini +++ b/Base/res/themes/Default.ini @@ -31,3 +31,6 @@ Selection=#84351a SelectionText=white RubberBandFill=#f4ca9e3c RubberBandBorder=#6e2209 +Link=blue +ActiveLink=red +VisitedLink=magenta diff --git a/Base/res/themes/Hotdog Stand.ini b/Base/res/themes/Hotdog Stand.ini index 65856c18230..7d879456b70 100644 --- a/Base/res/themes/Hotdog Stand.ini +++ b/Base/res/themes/Hotdog Stand.ini @@ -31,3 +31,6 @@ Selection=black SelectionText=white RubberBandFill=#fad7653c RubberBandBorder=#f4ca9e +Link=blue +ActiveLink=red +VisitedLink=magenta diff --git a/Base/res/themes/Xmas.ini b/Base/res/themes/Xmas.ini index 7f19071cfc4..20b27985b38 100644 --- a/Base/res/themes/Xmas.ini +++ b/Base/res/themes/Xmas.ini @@ -31,3 +31,6 @@ Selection=#84351a SelectionText=white RubberBandFill=#0466033c RubberBandBorder=#76943c +Link=blue +ActiveLink=red +VisitedLink=magenta diff --git a/Libraries/LibDraw/Palette.h b/Libraries/LibDraw/Palette.h index 52d375fdec2..501e59e82d3 100644 --- a/Libraries/LibDraw/Palette.h +++ b/Libraries/LibDraw/Palette.h @@ -63,6 +63,10 @@ public: Color rubber_band_fill() const { return color(ColorRole::RubberBandFill); } Color rubber_band_border() const { return color(ColorRole::RubberBandBorder); } + Color link() const { return color(ColorRole::Link); } + Color active_link() const { return color(ColorRole::ActiveLink); } + Color visited_link() const { return color(ColorRole::VisitedLink); } + Color color(ColorRole role) const { return m_impl->color(role); } void set_color(ColorRole, Color); diff --git a/Libraries/LibDraw/SystemTheme.cpp b/Libraries/LibDraw/SystemTheme.cpp index f6a0ba508be..e352841baad 100644 --- a/Libraries/LibDraw/SystemTheme.cpp +++ b/Libraries/LibDraw/SystemTheme.cpp @@ -74,6 +74,9 @@ RefPtr load_system_theme(const String& path) DO_COLOR(MenuSelectionText); DO_COLOR(RubberBandFill); DO_COLOR(RubberBandBorder); + DO_COLOR(Link); + DO_COLOR(ActiveLink); + DO_COLOR(VisitedLink); buffer->seal(); buffer->share_globally(); diff --git a/Libraries/LibDraw/SystemTheme.h b/Libraries/LibDraw/SystemTheme.h index 74d3d90c448..d1528dfd373 100644 --- a/Libraries/LibDraw/SystemTheme.h +++ b/Libraries/LibDraw/SystemTheme.h @@ -38,6 +38,9 @@ enum class ColorRole { SelectionText, RubberBandFill, RubberBandBorder, + Link, + ActiveLink, + VisitedLink, __Count, diff --git a/Libraries/LibHTML/DOM/Document.cpp b/Libraries/LibHTML/DOM/Document.cpp index 80acf9713a5..dbaed1013da 100644 --- a/Libraries/LibHTML/DOM/Document.cpp +++ b/Libraries/LibHTML/DOM/Document.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -275,3 +276,30 @@ Vector Document::get_elements_by_name(const String& name) const }); return elements; } + +Color Document::link_color() const +{ + if (m_link_color.has_value()) + return m_link_color.value(); + if (!frame()) + return Color::Blue; + return frame()->html_view()->palette().link(); +} + +Color Document::active_link_color() const +{ + if (m_active_link_color.has_value()) + return m_active_link_color.value(); + if (!frame()) + return Color::Red; + return frame()->html_view()->palette().active_link(); +} + +Color Document::visited_link_color() const +{ + if (m_visited_link_color.has_value()) + return m_visited_link_color.value(); + if (!frame()) + return Color::Magenta; + return frame()->html_view()->palette().visited_link(); +} diff --git a/Libraries/LibHTML/DOM/Document.h b/Libraries/LibHTML/DOM/Document.h index 022be5ab065..c47ecf583c9 100644 --- a/Libraries/LibHTML/DOM/Document.h +++ b/Libraries/LibHTML/DOM/Document.h @@ -64,13 +64,13 @@ public: Color background_color(const Palette&) const; RefPtr background_image() const; - Color link_color() const { return m_link_color; } + Color link_color() const; void set_link_color(Color); - Color active_link_color() const { return m_active_link_color; } + Color active_link_color() const; void set_active_link_color(Color); - Color visited_link_color() const { return m_visited_link_color; } + Color visited_link_color() const; void set_visited_link_color(Color); void layout(); @@ -105,9 +105,9 @@ private: RefPtr m_layout_root; - Color m_link_color { Color::Blue }; - Color m_active_link_color { Color::Red }; - Color m_visited_link_color { Color::Magenta }; + Optional m_link_color; + Optional m_active_link_color; + Optional m_visited_link_color; RefPtr m_style_update_timer;