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 zcmXR4V`N}pVPIioU|{&q%)r2ZnIV>u!JgqGBf}Mj4km^SMtNq2F2;XM%ySvvFs)&{ z%e02^4ihtoXkpyM6wKJb#PE|rm5HH%Nrj2w1v8j9!pQKI;Rqu`AY&#Y!x~0jMuu+2 c*9^?{j1L$}7_Ts7FrH*!1`(=^Jd9xb01#mxl>h($ literal 0 HcmV?d00001 diff --git a/Ladybird/Icons/forward.svg b/Ladybird/Icons/forward.svg deleted file mode 100644 index ebe17587da..0000000000 --- a/Ladybird/Icons/forward.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - diff --git a/Ladybird/Icons/forward.tvg b/Ladybird/Icons/forward.tvg new file mode 100644 index 0000000000000000000000000000000000000000..4aa57252be58ba97346def7f1eb6f3709326efca GIT binary patch literal 147 zcmXR4V`N}pVPIioU|{&q%)lTpm+3VFLp2jGBg1v3OhyJH<|B*@_6%S`g^6K1qY4v) zKC>zl!&RmRCg$x-^O$Bb?PaQAy2Hd=!*rLao9PYHT&90a4EvennHfGay<%eKXFkgm t#N5Ty&K$zT@PhdxBSQ#tEF-frvkv1&re6&EnNBh=gNXG^HyOZ|0|4JyBP9R; 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 zcmXR4V`N}pVPIioU|{&q%)p@Vj?tch`2eFMLm#6zLn>no1M@6~RSfD3jf`Oop-jwi z4E0Rq411XR7#=V&Uu6hn_GX;Te4cSNGxI;jjm-K?>zU)2mNGN5FgG)|GqW&nV2)>E z-ozZvw23*8X%lk*6Z2$dPo`34XQnV_TP9`@5zOq$6u|7y#B9a9n2Ck?4bx60X=dgy zrU>TSj0wy|jC#z>9E^XN_A|_4TF;=)#Jrk;jcGN*Q^xfSM;V!SGSo5NWUyi6X5?gK zR%3j_;Kq1`A(Qbi19LayCWiHl%NVXQE@WVS$2gBcgJ~Xv9n)e4<{GAT3|pB_GCX1W z$iV!W=^q0hvm_%QvkW6Mi1@)I%XpVbmXTo%lN^YsWn|D~u480a4k4Nt7(AH4#Bvbp z3 #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