From dfcd7b3ca537ac8e2440460204298c071335dc71 Mon Sep 17 00:00:00 2001 From: MacDue Date: Sun, 2 Jul 2023 22:37:59 +0100 Subject: [PATCH] Ladybird: Replace forward/back/reload SVGs with TVGs Doing this removes the qt6-svg dependency and allows our rasterizer to be used for these little icons (and happens to be a fair bit smaller than the old SVGs). --- Documentation/BuildInstructionsLadybird.md | 6 +-- Ladybird/CMakeLists.txt | 4 +- Ladybird/Icons/back.svg | 44 ----------------- Ladybird/Icons/back.tvg | Bin 0 -> 134 bytes Ladybird/Icons/forward.svg | 53 --------------------- Ladybird/Icons/forward.tvg | Bin 0 -> 147 bytes Ladybird/Icons/reload.svg | 52 -------------------- Ladybird/Icons/reload.tvg | Bin 0 -> 371 bytes Ladybird/Tab.cpp | 38 ++++++++------- Ladybird/ladybird.qrc | 6 +-- 10 files changed, 28 insertions(+), 175 deletions(-) delete mode 100644 Ladybird/Icons/back.svg create mode 100644 Ladybird/Icons/back.tvg delete mode 100644 Ladybird/Icons/forward.svg create mode 100644 Ladybird/Icons/forward.tvg delete mode 100644 Ladybird/Icons/reload.svg create mode 100644 Ladybird/Icons/reload.tvg diff --git a/Documentation/BuildInstructionsLadybird.md b/Documentation/BuildInstructionsLadybird.md index 679e37d75b..928796f31b 100644 --- a/Documentation/BuildInstructionsLadybird.md +++ b/Documentation/BuildInstructionsLadybird.md @@ -7,7 +7,7 @@ Qt6 development packages and a C++20 capable compiler are required. gcc-12 or cl On Debian/Ubuntu required packages include, but are not limited to: ``` -sudo apt install build-essential cmake libgl1-mesa-dev ninja-build qt6-base-dev libqt6svg6-dev qt6-tools-dev-tools qt6-multimedia-dev +sudo apt install build-essential cmake libgl1-mesa-dev ninja-build qt6-base-dev qt6-tools-dev-tools qt6-multimedia-dev ``` For Ubuntu 20.04 and above, ensure that the Qt6 Wayland packages are available: @@ -19,12 +19,12 @@ sudo apt install qt6-wayland On Arch Linux/Manjaro: ``` -sudo pacman -S --needed base-devel cmake libgl ninja qt6-base qt6-svg qt6-tools qt6-wayland qt6-multimedia +sudo pacman -S --needed base-devel cmake libgl ninja qt6-base qt6-tools qt6-wayland qt6-multimedia ``` On Fedora or derivatives: ``` -sudo dnf install cmake libglvnd-devel ninja-build qt6-qtbase-devel qt6-qtsvg-devel qt6-qttools-devel qt6-qtwayland-devel qt6-qtmultimedia-devel +sudo dnf install cmake libglvnd-devel ninja-build qt6-qtbase-devel qt6-qttools-devel qt6-qtwayland-devel qt6-qtmultimedia-devel ``` On openSUSE: diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt index 98ad917395..edf618dfeb 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 Svg Multimedia) +find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network Multimedia) set(BROWSER_SOURCE_DIR ${SERENITY_SOURCE_DIR}/Userland/Applications/Browser/) @@ -100,7 +100,7 @@ set(SOURCES qt_add_executable(ladybird ${SOURCES} MANUAL_FINALIZATION ) -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_link_libraries(ladybird PRIVATE Qt::Core Qt::Gui Qt::Network Qt::Widgets 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/) diff --git a/Ladybird/Icons/back.svg b/Ladybird/Icons/back.svg deleted file mode 100644 index e7587f7ad3..0000000000 --- a/Ladybird/Icons/back.svg +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - diff --git a/Ladybird/Icons/back.tvg b/Ladybird/Icons/back.tvg new file mode 100644 index 0000000000000000000000000000000000000000..248e7a215b45ef53abb3aa8a5ebd2a63fc6ae246 GIT binary patch literal 134 zcmW;FF%AJ?7=+<>=G&6&5j6H3&L9$<-gY8-3Wab6H`vM - - - - - - - - - diff --git a/Ladybird/Icons/forward.tvg b/Ladybird/Icons/forward.tvg new file mode 100644 index 0000000000000000000000000000000000000000..4aa57252be58ba97346def7f1eb6f3709326efca GIT binary patch literal 147 zcmW;FF%H3S07mie|Guum4Gh>M5*Kg>X>1N)wd!D#Z~{YJ!PrSG7K2el!Y)`En*r73 zH@)PI2SJJy73yoLmhzA$RDw>7g1X)X^;FVCSt#hZg^o;d#)>5y5-vF5%7P~;AGD=z hy}0A55A;1}<`~_a2gM!+H{1?6?;_mGf7YB;&VS!oBP9R; literal 0 HcmV?d00001 diff --git a/Ladybird/Icons/reload.svg b/Ladybird/Icons/reload.svg deleted file mode 100644 index 07ee3f8642..0000000000 --- a/Ladybird/Icons/reload.svg +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - diff --git a/Ladybird/Icons/reload.tvg b/Ladybird/Icons/reload.tvg new file mode 100644 index 0000000000000000000000000000000000000000..bfd767498585b56f5d43c472e1b66c7e3707a8e6 GIT binary patch literal 371 zcmXBQO(??w9LDkI_dH8pYR>W!7cUobm2HhC+QC@HLF3}!;-KWhgoA_H#et?)S}2pT z+F_+A?Vyy4B}qAOTS_i2UiRnk{q&rl`G^57xXR*3K=YgVpiA>3Zb8i0B$U7r+OTR7 zj8Rdna1rN>&!&Hw_bg9HV>!k=M^k~zXw@#_jzIcHIGiamIs9+kemO;UkN6a43Yc*D7YPAvu z><+Vb1#Mau89PAH_MkUQqMb>2nSz#hf*h~$!guI{-*BtW+-fj6e6rD=%Hfzz4$FoP w#SDl4tO0}iA{zI0q0!&0+UNnHUIzs literal 0 HcmV?d00001 diff --git a/Ladybird/Tab.cpp b/Ladybird/Tab.cpp index 3cecf23373..687d39f22e 100644 --- a/Ladybird/Tab.cpp +++ b/Ladybird/Tab.cpp @@ -13,6 +13,7 @@ #include "Utilities.h" #include #include +#include #include #include #include @@ -27,30 +28,31 @@ #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) +static QIcon render_tvg_icon_with_theme_colors(QString name, QPalette const& palette) { - auto path = QString(":/Icons/%1.svg").arg(name); + auto path = QString(":/Icons/%1.tvg").arg(name); + Gfx::IntSize icon_size(16, 16); - QSize icon_size(16, 16); + QFile icon_resource(path); + VERIFY(icon_resource.open(QIODeviceBase::ReadOnly)); + auto icon_data = icon_resource.readAll(); + ReadonlyBytes icon_bytes { icon_data.data(), static_cast(icon_data.size()) }; + auto icon_raster = MUST(Gfx::Bitmap::load_from_bytes(icon_bytes, icon_size)); 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); + auto image = MUST(Gfx::Bitmap::create(Gfx::BitmapFormat::BGRA8888, icon_size)); + Gfx::Painter painter { image }; + auto icon_color = Color::from_argb(color.rgba64().toArgb32()); + painter.blit_filtered({ 0, 0 }, *icon_raster, icon_raster->rect(), [&](auto color) { + return icon_color.with_alpha((icon_color.alpha() * color.alpha()) / 255); + }); + QImage qimage { image->scanline_u8(0), image->width(), image->height(), QImage::Format::Format_ARGB32 }; + return QPixmap::fromImage(qimage); }; icon.addPixmap(render(palette.color(QPalette::ColorGroup::Normal, QPalette::ColorRole::ButtonText)), QIcon::Mode::Normal); @@ -622,9 +624,9 @@ bool Tab::event(QEvent* event) void Tab::rerender_toolbar_icons() { - m_window->go_back_action().setIcon(render_svg_icon_with_theme_colors("back", palette())); - m_window->go_forward_action().setIcon(render_svg_icon_with_theme_colors("forward", palette())); - m_window->reload_action().setIcon(render_svg_icon_with_theme_colors("reload", palette())); + m_window->go_back_action().setIcon(render_tvg_icon_with_theme_colors("back", palette())); + m_window->go_forward_action().setIcon(render_tvg_icon_with_theme_colors("forward", palette())); + m_window->reload_action().setIcon(render_tvg_icon_with_theme_colors("reload", palette())); } void Tab::show_inspector_window(InspectorTarget inspector_target) diff --git a/Ladybird/ladybird.qrc b/Ladybird/ladybird.qrc index 882e3ed796..ed6d80ccd2 100644 --- a/Ladybird/ladybird.qrc +++ b/Ladybird/ladybird.qrc @@ -1,8 +1,8 @@ Icons/ladybird.png - Icons/back.svg - Icons/forward.svg - Icons/reload.svg + Icons/back.tvg + Icons/forward.tvg + Icons/reload.tvg