diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt
index 3ba21e5361..abc669e233 100644
--- a/Ladybird/CMakeLists.txt
+++ b/Ladybird/CMakeLists.txt
@@ -73,7 +73,7 @@ add_compile_options(-Wno-user-defined-literals)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
-find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network)
+find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network Svg)
set(BROWSER_SOURCE_DIR ${SERENITY_SOURCE_DIR}/Userland/Applications/Browser/)
@@ -93,13 +93,14 @@ set(SOURCES
Tab.cpp
Utilities.cpp
WebContentView.cpp
+ ladybird.qrc
main.cpp
)
qt_add_executable(ladybird ${SOURCES}
MANUAL_FINALIZATION
)
-target_link_libraries(ladybird PRIVATE Qt::Core Qt::Gui Qt::Network Qt::Widgets LibCore LibFileSystem LibGfx LibGUI LibIPC LibJS LibMain LibWeb LibWebView LibSQL)
+target_link_libraries(ladybird PRIVATE Qt::Core Qt::Gui Qt::Network Qt::Widgets Qt::Svg LibCore LibFileSystem LibGfx LibGUI LibIPC LibJS LibMain LibWeb LibWebView LibSQL)
target_include_directories(ladybird PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(ladybird PRIVATE ${SERENITY_SOURCE_DIR}/Userland/Applications/)
diff --git a/Ladybird/Icons/back.svg b/Ladybird/Icons/back.svg
new file mode 100644
index 0000000000..e7587f7ad3
--- /dev/null
+++ b/Ladybird/Icons/back.svg
@@ -0,0 +1,44 @@
+
+
diff --git a/Ladybird/Icons/forward.svg b/Ladybird/Icons/forward.svg
new file mode 100644
index 0000000000..ebe17587da
--- /dev/null
+++ b/Ladybird/Icons/forward.svg
@@ -0,0 +1,53 @@
+
+
diff --git a/Ladybird/Icons/reload.svg b/Ladybird/Icons/reload.svg
new file mode 100644
index 0000000000..07ee3f8642
--- /dev/null
+++ b/Ladybird/Icons/reload.svg
@@ -0,0 +1,52 @@
+
+
diff --git a/Ladybird/Tab.cpp b/Ladybird/Tab.cpp
index 456fd416ca..a5b312267e 100644
--- a/Ladybird/Tab.cpp
+++ b/Ladybird/Tab.cpp
@@ -13,13 +13,42 @@
#include
#include
#include
+#include
#include
#include
#include
+#include
extern DeprecatedString s_serenity_resource_root;
extern Browser::Settings* s_settings;
+static QIcon render_svg_icon_with_theme_colors(QString name, QPalette const& palette)
+{
+ auto path = QString(":/Icons/%1.svg").arg(name);
+
+ QSize icon_size(16, 16);
+
+ QIcon icon;
+
+ auto render = [&](QColor color) -> QPixmap {
+ QImage image(icon_size, QImage::Format_ARGB32);
+ image.fill(Qt::transparent);
+
+ QPainter painter(&image);
+ QSvgRenderer renderer(path);
+ renderer.render(&painter);
+ painter.setBrush(color);
+ painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
+ painter.fillRect(image.rect(), color);
+ return QPixmap::fromImage(image);
+ };
+
+ icon.addPixmap(render(palette.color(QPalette::ColorGroup::Normal, QPalette::ColorRole::ButtonText)), QIcon::Mode::Normal);
+ icon.addPixmap(render(palette.color(QPalette::ColorGroup::Disabled, QPalette::ColorRole::ButtonText)), QIcon::Mode::Disabled);
+
+ return icon;
+}
+
Tab::Tab(BrowserWindow* window, StringView webdriver_content_ipc_path, WebView::EnableCallgrindProfiling enable_callgrind_profiling)
: QWidget(window)
, m_window(window)
@@ -45,18 +74,17 @@ Tab::Tab(BrowserWindow* window, StringView webdriver_content_ipc_path, WebView::
m_layout->addWidget(m_toolbar);
m_layout->addWidget(m_view);
- auto back_icon_path = QString("%1/res/icons/16x16/go-back.png").arg(s_serenity_resource_root.characters());
- auto forward_icon_path = QString("%1/res/icons/16x16/go-forward.png").arg(s_serenity_resource_root.characters());
- auto reload_icon_path = QString("%1/res/icons/16x16/reload.png").arg(s_serenity_resource_root.characters());
- m_back_action = make(QIcon(back_icon_path), "Back");
+ m_back_action = make("Back");
m_back_action->setEnabled(false);
m_back_action->setShortcuts(QKeySequence::keyBindings(QKeySequence::StandardKey::Back));
- m_forward_action = make(QIcon(forward_icon_path), "Forward");
+ m_forward_action = make("Forward");
m_forward_action->setEnabled(false);
m_forward_action->setShortcuts(QKeySequence::keyBindings(QKeySequence::StandardKey::Forward));
- m_reload_action = make(QIcon(reload_icon_path), "Reload");
+ m_reload_action = make("Reload");
m_reload_action->setShortcuts(QKeySequence::keyBindings(QKeySequence::StandardKey::Refresh));
+ rerender_toolbar_icons();
+
m_toolbar->addAction(m_back_action);
m_toolbar->addAction(m_forward_action);
m_toolbar->addAction(m_reload_action);
@@ -259,3 +287,20 @@ void Tab::update_hover_label()
m_hover_label->move(6, height() - m_hover_label->height() - 8);
m_hover_label->raise();
}
+
+bool Tab::event(QEvent* event)
+{
+ if (event->type() == QEvent::PaletteChange) {
+ rerender_toolbar_icons();
+ return QWidget::event(event);
+ }
+
+ return QWidget::event(event);
+}
+
+void Tab::rerender_toolbar_icons()
+{
+ m_back_action->setIcon(render_svg_icon_with_theme_colors("back", palette()));
+ m_forward_action->setIcon(render_svg_icon_with_theme_colors("forward", palette()));
+ m_reload_action->setIcon(render_svg_icon_with_theme_colors("reload", palette()));
+}
diff --git a/Ladybird/Tab.h b/Ladybird/Tab.h
index 527b2a6ba1..38066b954f 100644
--- a/Ladybird/Tab.h
+++ b/Ladybird/Tab.h
@@ -51,7 +51,9 @@ signals:
private:
virtual void resizeEvent(QResizeEvent*) override;
+ virtual bool event(QEvent*) override;
+ void rerender_toolbar_icons();
void update_hover_label();
QBoxLayout* m_layout;
diff --git a/Ladybird/ladybird.qrc b/Ladybird/ladybird.qrc
new file mode 100644
index 0000000000..c3e8907822
--- /dev/null
+++ b/Ladybird/ladybird.qrc
@@ -0,0 +1,7 @@
+
+
+ Icons/back.svg
+ Icons/forward.svg
+ Icons/reload.svg
+
+
diff --git a/Meta/Azure/Setup.yml b/Meta/Azure/Setup.yml
index 4886e3175d..6422a99f76 100644
--- a/Meta/Azure/Setup.yml
+++ b/Meta/Azure/Setup.yml
@@ -21,7 +21,7 @@ steps:
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main'
sudo apt-get update
- sudo apt-get install ccache gcc-12 g++-12 clang-15 libstdc++-12-dev ninja-build unzip qt6-base-dev qt6-tools-dev-tools libgl1-mesa-dev
+ sudo apt-get install ccache gcc-12 g++-12 clang-15 libstdc++-12-dev ninja-build unzip qt6-base-dev qt6-tools-dev-tools libqt6svg6-dev libgl1-mesa-dev
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-15 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-15 100