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 0000000000..248e7a215b Binary files /dev/null and b/Ladybird/Icons/back.tvg differ 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 0000000000..4aa57252be Binary files /dev/null and b/Ladybird/Icons/forward.tvg differ 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 0000000000..bfd7674985 Binary files /dev/null and b/Ladybird/Icons/reload.tvg differ 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