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