[vlc-commits] [Git][videolan/vlc][master] 3 commits: qt: make svg colorizer public in `color_svg_image_provider.hpp`
Steve Lhomme (@robUx4)
gitlab at videolan.org
Mon Jan 27 08:46:01 UTC 2025
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
5f1aaf7b by Fatih Uzunoglu at 2025-01-27T08:20:29+00:00
qt: make svg colorizer public in `color_svg_image_provider.hpp`
- - - - -
2d1412df by Fatih Uzunoglu at 2025-01-27T08:20:29+00:00
qt: introduce `ColorizedSvgIcon`
- - - - -
ec9c87d2 by Fatih Uzunoglu at 2025-01-27T08:20:29+00:00
qt: colorize black icons that can not be seen within black menus
- - - - -
26 changed files:
- modules/gui/qt/Makefile.am
- modules/gui/qt/dialogs/vlm/vlm.cpp
- modules/gui/qt/menus/menus.cpp
- modules/gui/qt/menus/qml_menu_wrapper.cpp
- modules/gui/qt/meson.build
- modules/gui/qt/pixmaps/menu/add.svg
- modules/gui/qt/pixmaps/menu/download.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_arrow_eject.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_arrow_repeat_1.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_arrow_repeat_all.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_arrow_shuffle.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_fast_forward.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_next.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_options.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_play_filled.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_previous.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_rewind.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_skip_back_10.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_skip_forward_10.svg
- modules/gui/qt/pixmaps/menu/ic_fluent_stop.svg
- modules/gui/qt/pixmaps/menu/ic_pause_filled.svg
- modules/gui/qt/pixmaps/menu/ic_playlist.svg
- modules/gui/qt/util/color_svg_image_provider.cpp
- modules/gui/qt/util/color_svg_image_provider.hpp
- + modules/gui/qt/util/colorizedsvgicon.cpp
- + modules/gui/qt/util/colorizedsvgicon.hpp
Changes:
=====================================
modules/gui/qt/Makefile.am
=====================================
@@ -332,6 +332,8 @@ libqt_plugin_la_SOURCES = \
util/model_recovery_agent.hpp \
util/vlcqtmessagehandler.cpp \
util/vlcqtmessagehandler.hpp \
+ util/colorizedsvgicon.cpp \
+ util/colorizedsvgicon.hpp \
widgets/native/animators.cpp \
widgets/native/animators.hpp \
widgets/native/customwidgets.cpp widgets/native/customwidgets.hpp \
=====================================
modules/gui/qt/dialogs/vlm/vlm.cpp
=====================================
@@ -31,6 +31,7 @@
#include "dialogs/open/open.hpp"
#include "dialogs/sout/sout.hpp"
#include "util/qt_dirs.hpp"
+#include "util/colorizedsvgicon.hpp"
#include <QString>
#include <QVBoxLayout>
@@ -461,7 +462,7 @@ VLMAWidget::VLMAWidget( VLMWrapper *_vlm, const QString& _name,
objLayout->addWidget( time, 1, 3, 1, 2 );*/
QToolButton *modifyButton = new QToolButton;
- modifyButton->setIcon( QIcon( ":/menu/ic_fluent_options.svg" ) );
+ modifyButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( QStringLiteral(":/menu/ic_fluent_options.svg"), modifyButton ) );
modifyButton->setToolTip( qtr("Change") );
objLayout->addWidget( modifyButton, 0, 5 );
@@ -507,13 +508,13 @@ VLMBroadcast::VLMBroadcast( VLMWrapper *vlm, const QString& _name,
b_looped = _looped;
playButton = new QToolButton;
- playButton->setIcon( QIcon( ":/menu/ic_fluent_play_filled.svg" ) );
+ playButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( QStringLiteral(":/menu/ic_fluent_play_filled.svg"), playButton ) );
playButton->setToolTip( qtr("Play") );
objLayout->addWidget( playButton, 1, 0 );
b_playing = true;
QToolButton *stopButton = new QToolButton;
- stopButton->setIcon( QIcon( ":/menu/ic_fluent_stop.svg" ) );
+ stopButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_stop.svg", stopButton ) );
stopButton->setToolTip( qtr("Stop") );
objLayout->addWidget( stopButton, 1, 1 );
@@ -532,9 +533,9 @@ void VLMBroadcast::update()
{
vlm->EditBroadcast( name, input, inputOptions, output, b_enabled, b_looped );
if( b_looped )
- loopButton->setIcon( QIcon( ":/menu/ic_fluent_arrow_repeat_all.svg" ) );
+ loopButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_arrow_repeat_all.svg", loopButton ) );
else
- loopButton->setIcon( QIcon( ":/menu/repeat_off.svg" ) );
+ loopButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/repeat_off.svg", loopButton ) );
}
void VLMBroadcast::togglePlayPause()
@@ -542,12 +543,12 @@ void VLMBroadcast::togglePlayPause()
if( b_playing )
{
vlm->ControlBroadcast( name, ControlBroadcastPause );
- playButton->setIcon( QIcon( ":/menu/ic_pause_filled.svg" ) );
+ playButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_pause_filled.svg", playButton ) );
}
else
{
vlm->ControlBroadcast( name, ControlBroadcastPlay );
- playButton->setIcon( QIcon( ":/menu/ic_fluent_play_filled.svg" ) );
+ playButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( QStringLiteral(":/menu/ic_fluent_play_filled.svg"), playButton ) );
}
b_playing = !b_playing;
}
@@ -561,7 +562,7 @@ void VLMBroadcast::toggleLoop()
void VLMBroadcast::stop()
{
vlm->ControlBroadcast( name, ControlBroadcastStop );
- playButton->setIcon( QIcon( ":/menu/ic_fluent_play_filled.svg" ) );
+ playButton->setIcon( ColorizedSvgIcon::colorizedIconForWidget( QStringLiteral(":/menu/ic_fluent_play_filled.svg"), playButton ) );
}
/****************
=====================================
modules/gui/qt/menus/menus.cpp
=====================================
@@ -46,6 +46,7 @@
#include "dialogs/systray/systray.hpp"
#include "util/varchoicemodel.hpp"
#include "util/color_scheme_model.hpp"
+#include "util/colorizedsvgicon.hpp"
#include "medialibrary/medialib.hpp"
#include "medialibrary/mlrecentsmodel.hpp"
#include "medialibrary/mlbookmarkmodel.hpp"
@@ -87,7 +88,7 @@ QAction *addDPStaticEntry( QMenu *menu,
#ifndef __APPLE__ /* We don't set icons in menus in MacOS X */
if( !EMPTY_STR( icon ) )
{
- action = menu->addAction( QIcon( icon ), text, THEDP, member );
+ action = menu->addAction( ColorizedSvgIcon::colorizedIconForWidget( icon, menu ), text, THEDP, member );
}
else
#endif
@@ -119,7 +120,7 @@ static QAction* addMIMStaticEntry( qt_intf_t *p_intf,
if( !EMPTY_STR( icon ) )
{
action = menu->addAction( text, THEMIM, member );
- action->setIcon( QIcon( icon ) );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( icon, menu ) );
}
else
#endif
@@ -141,7 +142,7 @@ static QAction* addMPLStaticEntry( qt_intf_t *p_intf,
if( !EMPTY_STR( icon ) )
{
action = menu->addAction( text, THEMPL, member );
- action->setIcon( QIcon( icon ) );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( icon, menu ) );
}
else
#endif
@@ -313,7 +314,7 @@ void VLCMenuBar::ViewMenu(qt_intf_t *p_intf, QMenu *menu, std::optional<bool> pl
action = menu->addAction(
#ifndef __APPLE__
- QIcon( ":/menu/ic_playlist.svg" ),
+ ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_playlist.svg", menu ),
#endif
qtr( "Play&list" ));
action->setShortcut(QString( "Ctrl+L" ));
@@ -586,7 +587,7 @@ void VLCMenuBar::PopupMenuPlaylistEntries( QMenu *menu, qt_intf_t *p_intf )
THEMPL->togglePlayPause();
});
#ifndef __APPLE__ /* No icons in menus in Mac */
- action->setIcon( QIcon( ":/menu/ic_fluent_play_filled.svg" ) );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( QStringLiteral(":/menu/ic_fluent_play_filled.svg"), menu ) );
#endif
}
else
@@ -633,17 +634,17 @@ void VLCMenuBar::PopupMenuControlEntries( QMenu *menu, qt_intf_t *p_intf,
action = rateMenu->addAction( qtr( "&Faster" ), THEMIM,
&PlayerController::faster );
#ifndef __APPLE__ /* No icons in menus in Mac */
- action->setIcon( QIcon( ":/menu/ic_fluent_fast_forward.svg") );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_fast_forward.svg", rateMenu ) );
#endif
}
- action = rateMenu->addAction( QIcon( ":/menu/ic_fluent_fast_forward.svg" ), qtr( "Faster (fine)" ), THEMIM,
+ action = rateMenu->addAction( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_fast_forward.svg", rateMenu ), qtr( "Faster (fine)" ), THEMIM,
&PlayerController::littlefaster );
action = rateMenu->addAction( qtr( "N&ormal Speed" ), THEMIM,
&PlayerController::normalRate );
- action = rateMenu->addAction( QIcon( ":/menu/ic_fluent_rewind.svg" ), qtr( "Slower (fine)" ), THEMIM,
+ action = rateMenu->addAction( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_rewind.svg", rateMenu ), qtr( "Slower (fine)" ), THEMIM,
&PlayerController::littleslower );
if( b_normal )
@@ -651,7 +652,7 @@ void VLCMenuBar::PopupMenuControlEntries( QMenu *menu, qt_intf_t *p_intf,
action = rateMenu->addAction( qtr( "Slo&wer" ), THEMIM,
&PlayerController::slower );
#ifndef __APPLE__ /* No icons in menus in Mac */
- action->setIcon( QIcon( ":/menu/ic_fluent_rewind.svg") );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_rewind.svg", rateMenu ) );
#endif
}
@@ -664,13 +665,13 @@ void VLCMenuBar::PopupMenuControlEntries( QMenu *menu, qt_intf_t *p_intf,
action = menu->addAction( qtr( "&Jump Forward" ), THEMIM,
&PlayerController::jumpFwd );
#ifndef __APPLE__ /* No icons in menus in Mac */
- action->setIcon( QIcon( ":/menu/ic_fluent_skip_forward_10.svg") );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_skip_forward_10.svg", menu ) );
#endif
action = menu->addAction( qtr( "Jump Bac&kward" ), THEMIM,
&PlayerController::jumpBwd );
#ifndef __APPLE__ /* No icons in menus in Mac */
- action->setIcon( QIcon( ":/menu/ic_fluent_skip_back_10.svg") );
+ action->setIcon( ColorizedSvgIcon::colorizedIconForWidget( ":/menu/ic_fluent_skip_back_10.svg", menu ) );
#endif
action = menu->addAction( qfut( I_MENU_GOTOTIME ), THEDP, &DialogsProvider::gotoTimeDialog );
=====================================
modules/gui/qt/menus/qml_menu_wrapper.cpp
=====================================
@@ -27,6 +27,7 @@
#include "playlist/playlist_controller.hpp"
#include "playlist/playlist_model.hpp"
#include "dialogs/dialogs_provider.hpp"
+#include "util/colorizedsvgicon.hpp"
// Qt includes
#include <QPainter>
@@ -708,7 +709,7 @@ void QmlSubtitleMenu::beforePopup(QMenu * menu) /* override */
emit triggered(Synchronize);
});
- menu->addAction(QIcon(":/menu/download.svg"), qtr("Search online"), this, [this]()
+ menu->addAction(ColorizedSvgIcon::colorizedIconForWidget(":/menu/download.svg", menu), qtr("Search online"), this, [this]()
{
emit triggered(Download);
});
@@ -1051,19 +1052,20 @@ void PlaylistContextMenu::popup(int selectedIndex, QPoint pos )
}
action = m_menu->addAction( qtr("Add File...") );
- action->setIcon(QIcon(":/menu/add.svg"));
+
+ action->setIcon(ColorizedSvgIcon::colorizedIconForWidget(":/menu/add.svg", m_menu.get()));
connect(action, &QAction::triggered, []( ) {
DialogsProvider::getInstance()->simpleOpenDialog(false);
});
action = m_menu->addAction( qtr("Add Directory...") );
- action->setIcon(QIcon(":/menu/add.svg"));
+ action->setIcon(ColorizedSvgIcon::colorizedIconForWidget(":/menu/add.svg", m_menu.get()));
connect(action, &QAction::triggered, []( ) {
DialogsProvider::getInstance()->PLAppendDir();
});
action = m_menu->addAction( qtr("Advanced Open...") );
- action->setIcon(QIcon(":/menu/add.svg"));
+ action->setIcon(ColorizedSvgIcon::colorizedIconForWidget(":/menu/add.svg", m_menu.get()));
connect(action, &QAction::triggered, []( ) {
DialogsProvider::getInstance()->PLAppendDialog();
});
@@ -1127,7 +1129,7 @@ void PlaylistContextMenu::popup(int selectedIndex, QPoint pos )
}
action = m_menu->addAction( qtr("Shuffle the playlist") );
- action->setIcon(QIcon(":/menu/ic_fluent_arrow_shuffle_on.svg"));
+ action->setIcon(ColorizedSvgIcon::colorizedIconForWidget(":/menu/ic_fluent_arrow_shuffle_on.svg", m_menu.get()));
connect(action, &QAction::triggered, this, [this]( ) {
m_controler->shuffle();
});
=====================================
modules/gui/qt/meson.build
=====================================
@@ -481,6 +481,8 @@ some_sources = files(
'util/model_recovery_agent.hpp',
'util/vlcqtmessagehandler.cpp',
'util/vlcqtmessagehandler.hpp',
+ 'util/colorizedsvgicon.cpp',
+ 'util/colorizedsvgicon.hpp',
'widgets/native/animators.cpp',
'widgets/native/animators.hpp',
'widgets/native/customwidgets.cpp',
=====================================
modules/gui/qt/pixmaps/menu/add.svg
=====================================
@@ -1,4 +1,4 @@
<svg viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
- <path d="M22.9 8v14.9H8v2.2h14.9V40h2.2V25.1H40v-2.2H25.1V8z" clip-rule="evenodd" fill-rule="evenodd"/>
+ <path d="M22.9 8v14.9H8v2.2h14.9V40h2.2V25.1H40v-2.2H25.1V8z" clip-rule="evenodd" fill="#FF00FF" fill-rule="evenodd"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/download.svg
=====================================
@@ -1,4 +1,4 @@
<svg data-name="Calque 1" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
- <path d="M22.76 12v12.11l-3.13-3.05-1.73 1.68 6.1 5.94 6.09-5.94-1.73-1.68-3.13 3.05V12Zm4.92 0v2.41h9.84v19.17h-27V14.41h9.84V12H8v24h32V12Z" fill-rule="evenodd"/>
+ <path d="M22.76 12v12.11l-3.13-3.05-1.73 1.68 6.1 5.94 6.09-5.94-1.73-1.68-3.13 3.05V12Zm4.92 0v2.41h9.84v19.17h-27V14.41h9.84V12H8v24h32V12Z" fill="#FF00FF" fill-rule="evenodd"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_arrow_eject.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m11.598 7.2002c0.19996-0.26692 0.6002-0.26697 0.8003-1e-4l4.4982 6.0013c0.247 0.3296 0.0118 0.7999-0.4001 0.7999h-8.994c-0.41189 0-0.64712-0.4702-0.40016-0.7998zm1.6004-0.59987c-0.6001-0.8006-1.8009-0.80044-2.4007 3.2e-4l-4.4958 6.0012c-0.74086 0.989-0.03518 2.3994 1.2005 2.3994h8.994c1.2358 0 1.9415-1.4108 1.2002-2.3997zm-7.1987 10.4c-0.27614 0-0.5 0.2239-0.5 0.5s0.22386 0.5 0.5 0.5h12c0.2761 0 0.5-0.2239 0.5-0.5s-0.2239-0.5-0.5-0.5z" fill="#212121"/>
+ <path id="path2" d="m11.598 7.2002c0.19996-0.26692 0.6002-0.26697 0.8003-1e-4l4.4982 6.0013c0.247 0.3296 0.0118 0.7999-0.4001 0.7999h-8.994c-0.41189 0-0.64712-0.4702-0.40016-0.7998zm1.6004-0.59987c-0.6001-0.8006-1.8009-0.80044-2.4007 3.2e-4l-4.4958 6.0012c-0.74086 0.989-0.03518 2.3994 1.2005 2.3994h8.994c1.2358 0 1.9415-1.4108 1.2002-2.3997zm-7.1987 10.4c-0.27614 0-0.5 0.2239-0.5 0.5s0.22386 0.5 0.5 0.5h12c0.2761 0 0.5-0.2239 0.5-0.5s-0.2239-0.5-0.5-0.5z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_arrow_repeat_1.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2-224" d="m18.5 8.6712c0.1163 0 0.22329 0.039685 0.30822 0.1062l0.06731 0.063118 0.01625 0.018898c0.6931 0.85822 1.1082 1.9504 1.1082 3.1394 0 0.19691-0.01134 0.39152-0.03364 0.58273-0.30841-0.15496-0.6334-0.28195-0.9716-0.3772 0.0035-0.06803 0.0053-0.13682 0.0053-0.20561 0-0.95346-0.33358-1.829-0.8905-2.5163-0.06811-0.084661-0.10949-0.19351-0.10949-0.31257 0-0.27628 0.2239-0.50003 0.5-0.50003zm-6.293 7.3288c-0.09109 0.32239-0.1536 0.65658-0.18459 0.99999h-3.0224c-0.10174 0-0.20276-3e-3 -0.303-0.0076l1.6565 1.6554c0.17356 0.17348 0.19283 0.443 0.05787 0.63791l-0.05787 0.06916c-0.17356 0.17348-0.44299 0.19276-0.63786 0.05783l-0.06924-0.05783-2.5-2.5c-0.17357-0.17348-0.19285-0.44304-0.05786-0.63791l0.05786-0.06916 2.5-2.5c0.19526-0.19502 0.51184-0.19502 0.7071 0 0.17356 0.17348 0.19283 0.443 0.05787 0.63791l-0.05787 0.06916-1.6366 1.6365 0.14088 0.0076 0.14213 0.0025zm1.4394-11.354c0.17359-0.17348 0.443-0.19276 0.6379-0.057827l0.06932 0.057827 2.5 2.5 0.05779 0.069165c0.11811 0.17046 0.11811 0.39814 0 0.56863l-0.05779 0.069165-2.5 2.5-0.06932 0.05783c-0.17049 0.11792-0.3981 0.11792-0.5686 0l-0.06932-0.05783-0.05779-0.06916c-0.11811-0.17046-0.11811-0.3981 0-0.56863l0.05779-0.069165 1.6366-1.6366-0.1409-0.00756-0.14211-0.00249h-6c-2.2091 0-4 1.7909-4 4 0 0.9563 0.33557 1.8342 0.89537 2.5224 0.06417 0.08353 0.10463 0.19162 0.10463 0.30879 0 0.2759-0.22386 0.49999-0.5 0.49999-0.167 0-0.31488-0.08202-0.40568-0.2075-0.68439-0.85603-1.0943-1.9419-1.0943-3.1236 0-2.6888 2.1223-4.8818 4.7831-4.9954l0.21689-0.00378h6c0.10171 0 0.20281 0.00302 0.303 0.00756l-1.6566-1.6555-0.057789-0.069165c-0.13501-0.19502-0.11569-0.46428 0.057789-0.63783zm8.3536 12.854c0 2.4853-2.0147 4.5-4.5 4.5s-4.5-2.0147-4.5-4.5 2.0147-4.5 4.5-4.5 4.5 2.0147 4.5 4.5zm-3.9523-2.6614c-0.1844-0.05216-0.4905-0.03402-0.6794 0.2332-0.2132 0.30312-0.5812 0.72559-1.0919 0.9809-0.24699 0.12359-0.34711 0.4238-0.2236 0.67079 0.12352 0.24718 0.4238 0.34696 0.6708 0.22375 0.2993-0.14967 0.5578-0.33562 0.7764-0.52898v3.0818c0 0.27628 0.2239 0.49999 0.5 0.49999 0.27609 0 0.5-0.22375 0.5-0.49999v-4.0764c0-0.34847-0.26729-0.53261-0.4523-0.585z" fill="#212121"/>
+ <path id="path2-224" d="m18.5 8.6712c0.1163 0 0.22329 0.039685 0.30822 0.1062l0.06731 0.063118 0.01625 0.018898c0.6931 0.85822 1.1082 1.9504 1.1082 3.1394 0 0.19691-0.01134 0.39152-0.03364 0.58273-0.30841-0.15496-0.6334-0.28195-0.9716-0.3772 0.0035-0.06803 0.0053-0.13682 0.0053-0.20561 0-0.95346-0.33358-1.829-0.8905-2.5163-0.06811-0.084661-0.10949-0.19351-0.10949-0.31257 0-0.27628 0.2239-0.50003 0.5-0.50003zm-6.293 7.3288c-0.09109 0.32239-0.1536 0.65658-0.18459 0.99999h-3.0224c-0.10174 0-0.20276-3e-3 -0.303-0.0076l1.6565 1.6554c0.17356 0.17348 0.19283 0.443 0.05787 0.63791l-0.05787 0.06916c-0.17356 0.17348-0.44299 0.19276-0.63786 0.05783l-0.06924-0.05783-2.5-2.5c-0.17357-0.17348-0.19285-0.44304-0.05786-0.63791l0.05786-0.06916 2.5-2.5c0.19526-0.19502 0.51184-0.19502 0.7071 0 0.17356 0.17348 0.19283 0.443 0.05787 0.63791l-0.05787 0.06916-1.6366 1.6365 0.14088 0.0076 0.14213 0.0025zm1.4394-11.354c0.17359-0.17348 0.443-0.19276 0.6379-0.057827l0.06932 0.057827 2.5 2.5 0.05779 0.069165c0.11811 0.17046 0.11811 0.39814 0 0.56863l-0.05779 0.069165-2.5 2.5-0.06932 0.05783c-0.17049 0.11792-0.3981 0.11792-0.5686 0l-0.06932-0.05783-0.05779-0.06916c-0.11811-0.17046-0.11811-0.3981 0-0.56863l0.05779-0.069165 1.6366-1.6366-0.1409-0.00756-0.14211-0.00249h-6c-2.2091 0-4 1.7909-4 4 0 0.9563 0.33557 1.8342 0.89537 2.5224 0.06417 0.08353 0.10463 0.19162 0.10463 0.30879 0 0.2759-0.22386 0.49999-0.5 0.49999-0.167 0-0.31488-0.08202-0.40568-0.2075-0.68439-0.85603-1.0943-1.9419-1.0943-3.1236 0-2.6888 2.1223-4.8818 4.7831-4.9954l0.21689-0.00378h6c0.10171 0 0.20281 0.00302 0.303 0.00756l-1.6566-1.6555-0.057789-0.069165c-0.13501-0.19502-0.11569-0.46428 0.057789-0.63783zm8.3536 12.854c0 2.4853-2.0147 4.5-4.5 4.5s-4.5-2.0147-4.5-4.5 2.0147-4.5 4.5-4.5 4.5 2.0147 4.5 4.5zm-3.9523-2.6614c-0.1844-0.05216-0.4905-0.03402-0.6794 0.2332-0.2132 0.30312-0.5812 0.72559-1.0919 0.9809-0.24699 0.12359-0.34711 0.4238-0.2236 0.67079 0.12352 0.24718 0.4238 0.34696 0.6708 0.22375 0.2993-0.14967 0.5578-0.33562 0.7764-0.52898v3.0818c0 0.27628 0.2239 0.49999 0.5 0.49999 0.27609 0 0.5-0.22375 0.5-0.49999v-4.0764c0-0.34847-0.26729-0.53261-0.4523-0.585z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_arrow_repeat_all.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m18.5 8.6712c0.1163 0 0.2233 0.0397 0.3082 0.10629l0.0673 0.06306 0.0163 0.02c0.6931 0.8582 1.1082 1.9503 1.1082 3.1394 0 2.6888-2.1223 4.8818-4.7831 4.9954l-0.2169 0.0046h-6c-0.10174 0-0.20276-3e-3 -0.303-9e-3l1.6566 1.6554c0.17357 0.1736 0.19285 0.443 0.05786 0.6379l-0.05786 0.0693c-0.17356 0.1735-0.44299 0.1928-0.63786 0.0578l-0.06924-0.0578-2.5-2.5c-0.17357-0.1736-0.19285-0.443-0.05786-0.6379l0.05786-0.0693 2.5-2.5c0.19526-0.1952 0.51184-0.1952 0.7071 0 0.17357 0.1736 0.19285 0.443 0.05786 0.6379l-0.05786 0.0693-1.6366 1.6365 0.14088 0.0074 0.14213 0.0025h6c2.2091 0 4-1.7909 4-4 0-0.95348-0.3336-1.829-0.8905-2.5163-0.0681-0.08456-0.1095-0.19367-0.1095-0.31245 0-0.27614 0.2239-0.5 0.5-0.5zm-4.8536-4.0248c0.1736-0.17357 0.443-0.19285 0.6379-0.05786l0.0693 0.05786 2.5 2.5 0.0578 0.06924c0.1181 0.17051 0.1181 0.39811 0 0.56862l-0.0578 0.06924-2.5 2.5-0.0693 0.05786c-0.1705 0.11812-0.3981 0.11812-0.5686 0l-0.0693-0.05786-0.0578-0.06924c-0.1181-0.17051-0.1181-0.39811 0-0.56862l0.0578-0.06924 1.6366-1.6366-0.1409-0.00738-0.1421-0.00248h-6c-2.2091 0-4 1.7909-4 4 0 0.9563 0.33557 1.8342 0.89537 2.5224 0.06417 0.0836 0.10463 0.1915 0.10463 0.3089 0 0.2761-0.22386 0.5-0.5 0.5-0.167 0-0.31488-0.0819-0.40568-0.2077-0.68439-0.856-1.0943-1.9419-1.0943-3.1236 0-2.6888 2.1223-4.8818 4.7831-4.9954l0.21689-0.00462h6c0.1017 0 0.2028 0.00304 0.303 0.00903l-1.6566-1.6555-0.0578-0.06924c-0.135-0.19487-0.1157-0.4643 0.0578-0.63786z" fill="#212121"/>
+ <path id="path2" d="m18.5 8.6712c0.1163 0 0.2233 0.0397 0.3082 0.10629l0.0673 0.06306 0.0163 0.02c0.6931 0.8582 1.1082 1.9503 1.1082 3.1394 0 2.6888-2.1223 4.8818-4.7831 4.9954l-0.2169 0.0046h-6c-0.10174 0-0.20276-3e-3 -0.303-9e-3l1.6566 1.6554c0.17357 0.1736 0.19285 0.443 0.05786 0.6379l-0.05786 0.0693c-0.17356 0.1735-0.44299 0.1928-0.63786 0.0578l-0.06924-0.0578-2.5-2.5c-0.17357-0.1736-0.19285-0.443-0.05786-0.6379l0.05786-0.0693 2.5-2.5c0.19526-0.1952 0.51184-0.1952 0.7071 0 0.17357 0.1736 0.19285 0.443 0.05786 0.6379l-0.05786 0.0693-1.6366 1.6365 0.14088 0.0074 0.14213 0.0025h6c2.2091 0 4-1.7909 4-4 0-0.95348-0.3336-1.829-0.8905-2.5163-0.0681-0.08456-0.1095-0.19367-0.1095-0.31245 0-0.27614 0.2239-0.5 0.5-0.5zm-4.8536-4.0248c0.1736-0.17357 0.443-0.19285 0.6379-0.05786l0.0693 0.05786 2.5 2.5 0.0578 0.06924c0.1181 0.17051 0.1181 0.39811 0 0.56862l-0.0578 0.06924-2.5 2.5-0.0693 0.05786c-0.1705 0.11812-0.3981 0.11812-0.5686 0l-0.0693-0.05786-0.0578-0.06924c-0.1181-0.17051-0.1181-0.39811 0-0.56862l0.0578-0.06924 1.6366-1.6366-0.1409-0.00738-0.1421-0.00248h-6c-2.2091 0-4 1.7909-4 4 0 0.9563 0.33557 1.8342 0.89537 2.5224 0.06417 0.0836 0.10463 0.1915 0.10463 0.3089 0 0.2761-0.22386 0.5-0.5 0.5-0.167 0-0.31488-0.0819-0.40568-0.2077-0.68439-0.856-1.0943-1.9419-1.0943-3.1236 0-2.6888 2.1223-4.8818 4.7831-4.9954l0.21689-0.00462h6c0.1017 0 0.2028 0.00304 0.303 0.00903l-1.6566-1.6555-0.0578-0.06924c-0.135-0.19487-0.1157-0.4643 0.0578-0.63786z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_arrow_shuffle.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m17.854 6.1464c-0.1953-0.19527-0.5119-0.19527-0.7072 0-0.1952 0.19526-0.1952 0.51184 0 0.7071l1.1488 1.1487c-3.3225 0.07241-5.2825 1.9019-7.1044 3.6025l-0.03192 0.02979c-1.8819 1.7565-3.6259 3.3655-6.6588 3.3655-0.27614 0-0.5 0.2239-0.5 0.5 0 0.2762 0.22386 0.5 0.5 0.5 3.4473 0 5.4502-1.8694 7.3092-3.6046l0.03192-0.0298c1.8381-1.7156 3.5446-3.2906 6.4491-3.363l-1.1439 1.1439c-0.1952 0.19526-0.1952 0.51184 0 0.70711 0.1953 0.19526 0.5119 0.19526 0.7072 0l2-2c0.1953-0.19526 0.1953-0.51184 0-0.7071zm-13.354 1.8536c2.8107 0 4.6612 1.2428 6.2564 2.6423l-0.27993 0.26122c-0.15483 0.14451-0.3069 0.28607-0.45704 0.42419-1.5026-1.3049-3.1014-2.3277-5.5195-2.3277-0.27614 0-0.5-0.22386-0.5-0.5s0.22386-0.5 0.5-0.5zm13.795 7.9978c-2.6964-0.0588-4.4954-1.2748-6.0516-2.64l0.2799-0.2611c0.1548-0.1446 0.3069-0.2862 0.4571-0.4243 1.4587 1.2667 3.0081 2.2677 5.3097 2.325l-1.1439-1.1439c-0.1952-0.1952-0.1952-0.5118 0-0.7071 0.1953-0.1953 0.5119-0.1953 0.7072 0l2 2c0.1953 0.1953 0.1953 0.5119 0 0.7072l-2 2c-0.1953 0.1953-0.5119 0.1953-0.7072 0-0.1952-0.1953-0.1952-0.5118 0-0.7071z" fill="#212121"/>
+ <path id="path2" d="m17.854 6.1464c-0.1953-0.19527-0.5119-0.19527-0.7072 0-0.1952 0.19526-0.1952 0.51184 0 0.7071l1.1488 1.1487c-3.3225 0.07241-5.2825 1.9019-7.1044 3.6025l-0.03192 0.02979c-1.8819 1.7565-3.6259 3.3655-6.6588 3.3655-0.27614 0-0.5 0.2239-0.5 0.5 0 0.2762 0.22386 0.5 0.5 0.5 3.4473 0 5.4502-1.8694 7.3092-3.6046l0.03192-0.0298c1.8381-1.7156 3.5446-3.2906 6.4491-3.363l-1.1439 1.1439c-0.1952 0.19526-0.1952 0.51184 0 0.70711 0.1953 0.19526 0.5119 0.19526 0.7072 0l2-2c0.1953-0.19526 0.1953-0.51184 0-0.7071zm-13.354 1.8536c2.8107 0 4.6612 1.2428 6.2564 2.6423l-0.27993 0.26122c-0.15483 0.14451-0.3069 0.28607-0.45704 0.42419-1.5026-1.3049-3.1014-2.3277-5.5195-2.3277-0.27614 0-0.5-0.22386-0.5-0.5s0.22386-0.5 0.5-0.5zm13.795 7.9978c-2.6964-0.0588-4.4954-1.2748-6.0516-2.64l0.2799-0.2611c0.1548-0.1446 0.3069-0.2862 0.4571-0.4243 1.4587 1.2667 3.0081 2.2677 5.3097 2.325l-1.1439-1.1439c-0.1952-0.1952-0.1952-0.5118 0-0.7071 0.1953-0.1953 0.5119-0.1953 0.7072 0l2 2c0.1953 0.1953 0.1953 0.5119 0 0.7072l-2 2c-0.1953 0.1953-0.5119 0.1953-0.7072 0-0.1952-0.1953-0.1952-0.5118 0-0.7071z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_fast_forward.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m12.018 7.4862c0-0.8191 0.9308-1.2908 1.5914-0.80641l5.8796 4.3117c0.681 0.49944 0.681 1.5165 0 2.016l-5.8796 4.3117c-0.6606 0.4844-1.5914 0.0127-1.5914-0.8064v-3.16l-5.4086 3.9664c-0.66052 0.4844-1.5914 0.0127-1.5914-0.8064v-9.0266c0-0.8191 0.93084-1.2908 1.5914-0.80641l5.4086 3.9663zm6.8796 4.3117-5.8796-4.3117v9.0266l5.8796-4.3117c0.1362-0.0999 0.1362-0.30335 0-0.40324zm-7 0-5.8796-4.3117v9.0266l5.8796-4.3117c0.1362-0.0999 0.1362-0.30335 0-0.40324z" fill="#212121"/>
+ <path id="path2" d="m12.018 7.4862c0-0.8191 0.9308-1.2908 1.5914-0.80641l5.8796 4.3117c0.681 0.49944 0.681 1.5165 0 2.016l-5.8796 4.3117c-0.6606 0.4844-1.5914 0.0127-1.5914-0.8064v-3.16l-5.4086 3.9664c-0.66052 0.4844-1.5914 0.0127-1.5914-0.8064v-9.0266c0-0.8191 0.93084-1.2908 1.5914-0.80641l5.4086 3.9663zm6.8796 4.3117-5.8796-4.3117v9.0266l5.8796-4.3117c0.1362-0.0999 0.1362-0.30335 0-0.40324zm-7 0-5.8796-4.3117v9.0266l5.8796-4.3117c0.1362-0.0999 0.1362-0.30335 0-0.40324z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_next.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m19 5.5c0-0.27614-0.2239-0.5-0.5-0.5-0.2762 0-0.5 0.22386-0.5 0.5v13c0 0.2761 0.2238 0.5 0.5 0.5 0.2761 0 0.5-0.2239 0.5-0.5zm-14 0.75211c0-1.0002 1.1164-1.5954 1.9468-1.0378l8.4992 5.7071c0.7345 0.4932 0.7383 1.5724 0.0072 2.0707l-8.4993 5.7929c-0.82977 0.5655-1.954-0.0288-1.954-1.0329zm1.3894-0.20755c-0.16608-0.11152-0.38937 0.0075-0.38937 0.20755v11.5c0 0.2008 0.22485 0.3196 0.3908 0.2065l8.4993-5.7928c0.1462-0.0997 0.1455-0.31552-0.0014-0.41415z" fill="#212121"/>
+ <path id="path2" d="m19 5.5c0-0.27614-0.2239-0.5-0.5-0.5-0.2762 0-0.5 0.22386-0.5 0.5v13c0 0.2761 0.2238 0.5 0.5 0.5 0.2761 0 0.5-0.2239 0.5-0.5zm-14 0.75211c0-1.0002 1.1164-1.5954 1.9468-1.0378l8.4992 5.7071c0.7345 0.4932 0.7383 1.5724 0.0072 2.0707l-8.4993 5.7929c-0.82977 0.5655-1.954-0.0288-1.954-1.0329zm1.3894-0.20755c-0.16608-0.11152-0.38937 0.0075-0.38937 0.20755v11.5c0 0.2008 0.22485 0.3196 0.3908 0.2065l8.4993-5.7928c0.1462-0.0997 0.1455-0.31552-0.0014-0.41415z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_options.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m16.95 7c-0.2316-1.1411-1.2405-2-2.45-2s-2.2184 0.85888-2.45 2h-7.55c-0.27614 0-0.5 0.22386-0.5 0.5s0.22386 0.5 0.5 0.5h7.55c0.2316 1.1411 1.2405 2 2.45 2 1.2297 0 2.252-0.88783 2.461-2.0575-0.0035 0.01923-0.0071 0.03839-0.011 0.05746h2.55c0.2761 0 0.5-0.22386 0.5-0.5s-0.2239-0.5-0.5-0.5zm-2.45 2c-0.8284 0-1.5-0.67157-1.5-1.5s0.6716-1.5 1.5-1.5 1.5 0.67157 1.5 1.5-0.6716 1.5-1.5 1.5zm-2.55 7c-0.23163-1.1411-1.2405-2-2.45-2s-2.2184 0.8589-2.45 2h-2.55c-0.27614 0-0.5 0.2239-0.5 0.5s0.22386 0.5 0.5 0.5h2.55c0.23163 1.1411 1.2405 2 2.45 2s2.2184-0.8589 2.45-2h7.55c0.2761 0 0.5-0.2239 0.5-0.5s-0.2239-0.5-0.5-0.5zm-2.45 2c-0.82843 0-1.5-0.6716-1.5-1.5s0.67157-1.5 1.5-1.5 1.5 0.6716 1.5 1.5-0.67157 1.5-1.5 1.5z" fill="#212121"/>
+ <path id="path2" d="m16.95 7c-0.2316-1.1411-1.2405-2-2.45-2s-2.2184 0.85888-2.45 2h-7.55c-0.27614 0-0.5 0.22386-0.5 0.5s0.22386 0.5 0.5 0.5h7.55c0.2316 1.1411 1.2405 2 2.45 2 1.2297 0 2.252-0.88783 2.461-2.0575-0.0035 0.01923-0.0071 0.03839-0.011 0.05746h2.55c0.2761 0 0.5-0.22386 0.5-0.5s-0.2239-0.5-0.5-0.5zm-2.45 2c-0.8284 0-1.5-0.67157-1.5-1.5s0.6716-1.5 1.5-1.5 1.5 0.67157 1.5 1.5-0.6716 1.5-1.5 1.5zm-2.55 7c-0.23163-1.1411-1.2405-2-2.45-2s-2.2184 0.8589-2.45 2h-2.55c-0.27614 0-0.5 0.2239-0.5 0.5s0.22386 0.5 0.5 0.5h2.55c0.23163 1.1411 1.2405 2 2.45 2s2.2184-0.8589 2.45-2h7.55c0.2761 0 0.5-0.2239 0.5-0.5s-0.2239-0.5-0.5-0.5zm-2.45 2c-0.82843 0-1.5-0.6716-1.5-1.5s0.67157-1.5 1.5-1.5 1.5 0.6716 1.5 1.5-0.67157 1.5-1.5 1.5z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_play_filled.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m19.222 10.685c1.0365 0.5698 1.0365 2.0591 0 2.6289l-9.9995 5.497c-0.99967 0.5495-2.2226-0.1738-2.2226-1.3145v-10.994c0-1.1408 1.2229-1.864 2.2226-1.3145z" fill="#212121"/>
+ <path id="path2" d="m19.222 10.685c1.0365 0.5698 1.0365 2.0591 0 2.6289l-9.9995 5.497c-0.99967 0.5495-2.2226-0.1738-2.2226-1.3145v-10.994c0-1.1408 1.2229-1.864 2.2226-1.3145z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_previous.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m5 5.5c0-0.27614 0.22386-0.5 0.5-0.5s0.5 0.22386 0.5 0.5v13c0 0.2761-0.22386 0.5-0.5 0.5s-0.5-0.2239-0.5-0.5zm14 0.75211c0-1.0002-1.1164-1.5954-1.9468-1.0378l-8.4992 5.7071c-0.73449 0.4932-0.73822 1.5724-0.00717 2.0707l8.4992 5.7929c0.8298 0.5655 1.954-0.0288 1.954-1.0329zm-1.3893-0.20755c0.1661-0.11152 0.3893 0.0075 0.3893 0.20755v11.5c0 0.2008-0.2248 0.3196-0.3908 0.2065l-8.4992-5.7928c-0.14621-0.0997-0.14547-0.31552 0.00143-0.41415z" fill="#212121"/>
+ <path id="path2" d="m5 5.5c0-0.27614 0.22386-0.5 0.5-0.5s0.5 0.22386 0.5 0.5v13c0 0.2761-0.22386 0.5-0.5 0.5s-0.5-0.2239-0.5-0.5zm14 0.75211c0-1.0002-1.1164-1.5954-1.9468-1.0378l-8.4992 5.7071c-0.73449 0.4932-0.73822 1.5724-0.00717 2.0707l8.4992 5.7929c0.8298 0.5655 1.954-0.0288 1.954-1.0329zm-1.3893-0.20755c0.1661-0.11152 0.3893 0.0075 0.3893 0.20755v11.5c0 0.2008-0.2248 0.3196-0.3908 0.2065l-8.4992-5.7928c-0.14621-0.0997-0.14547-0.31552 0.00143-0.41415z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_rewind.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m12 7.4871c0-0.8191-0.93084-1.2908-1.5914-0.8064l-5.8796 4.3117c-0.68106 0.49945-0.68106 1.5166 0 2.016l5.8796 4.3117c0.66052 0.4844 1.5914 0.0127 1.5914-0.8064v-3.1599l5.4086 3.9663c0.6606 0.4844 1.5914 0.0127 1.5914-0.8064v-9.0266c0-0.8191-0.9308-1.2908-1.5914-0.8064l-5.4086 3.9663zm-6.8796 4.3117 5.8796-4.3117v9.0266l-5.8796-4.3117c-0.13621-0.0998-0.13621-0.30327 0-0.40316zm7 0 5.8796-4.3117v9.0266l-5.8796-4.3117c-0.1362-0.0998-0.1362-0.30327 0-0.40316z" fill="#212121"/>
+ <path id="path2" d="m12 7.4871c0-0.8191-0.93084-1.2908-1.5914-0.8064l-5.8796 4.3117c-0.68106 0.49945-0.68106 1.5166 0 2.016l5.8796 4.3117c0.66052 0.4844 1.5914 0.0127 1.5914-0.8064v-3.1599l5.4086 3.9663c0.6606 0.4844 1.5914 0.0127 1.5914-0.8064v-9.0266c0-0.8191-0.9308-1.2908-1.5914-0.8064l-5.4086 3.9663zm-6.8796 4.3117 5.8796-4.3117v9.0266l-5.8796-4.3117c-0.13621-0.0998-0.13621-0.30327 0-0.40316zm7 0 5.8796-4.3117v9.0266l-5.8796-4.3117c-0.1362-0.0998-0.1362-0.30327 0-0.40316z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_skip_back_10.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m4.998 5.5c0-0.27614 0.22385-0.5 0.5-0.5 0.27614 0 0.5 0.22386 0.5 0.5v2.2063c0.91262-1.0345 2.0839-1.8225 3.4064-2.2752 1.8362-0.62864 3.8384-0.56798 5.6332 0.17064s3.2597 2.1048 4.1216 3.8438c0.1226 0.24742 0.0215 0.54741-0.226 0.67003-0.2474 0.12263-0.5474 0.02146-0.67-0.22596-0.7541-1.5215-2.0358-2.7168-3.6062-3.3631-1.5703-0.64625-3.3221-0.69932-4.9287-0.1493-1.4133 0.48384-2.6293 1.4053-3.4765 2.6228h3.2462c0.27614 0 0.5 0.22386 0.5 0.5s-0.22386 0.5-0.5 0.5h-4c-0.27615 0-0.5-0.22386-0.5-0.5zm5.002 7c0-0.1844-0.10149-0.3538-0.26407-0.4408-0.16258-0.08705-0.35985-0.07751-0.51328 0.0248l-1.5 1c-0.22976 0.1532-0.29185 0.4636-0.13867 0.6934 0.15317 0.2297 0.46361 0.2918 0.69337 0.1386l0.72265-0.4817v5.0657c0 0.2761 0.22386 0.5 0.5 0.5 0.27615 0 0.5-0.2239 0.5-0.5zm4.5028-0.5c-0.9349 0-1.5971 0.4367-1.9958 1.1292-0.3765 0.6541-0.5042 1.5074-0.5042 2.3708s0.1277 1.7167 0.5042 2.3708c0.3987 0.6925 1.0609 1.1292 1.9958 1.1292 0.935 0 1.5972-0.4367 1.9959-1.1292 0.3765-0.6541 0.5041-1.5074 0.5041-2.3708s-0.1276-1.7167-0.5041-2.3708c-0.3987-0.6925-1.0609-1.1292-1.9959-1.1292zm-1.5 3.5c0-0.7935 0.1224-1.4402 0.3709-1.8719 0.2263-0.3932 0.5641-0.6281 1.1291-0.6281 0.5651 0 0.9029 0.2349 1.1292 0.6281 0.2485 0.4317 0.3708 1.0784 0.3708 1.8719s-0.1223 1.4402-0.3708 1.8719c-0.2263 0.3932-0.5641 0.6281-1.1292 0.6281-0.565 0-0.9028-0.2349-1.1291-0.6281-0.2485-0.4317-0.3709-1.0784-0.3709-1.8719z" fill="#212121"/>
+ <path id="path2" d="m4.998 5.5c0-0.27614 0.22385-0.5 0.5-0.5 0.27614 0 0.5 0.22386 0.5 0.5v2.2063c0.91262-1.0345 2.0839-1.8225 3.4064-2.2752 1.8362-0.62864 3.8384-0.56798 5.6332 0.17064s3.2597 2.1048 4.1216 3.8438c0.1226 0.24742 0.0215 0.54741-0.226 0.67003-0.2474 0.12263-0.5474 0.02146-0.67-0.22596-0.7541-1.5215-2.0358-2.7168-3.6062-3.3631-1.5703-0.64625-3.3221-0.69932-4.9287-0.1493-1.4133 0.48384-2.6293 1.4053-3.4765 2.6228h3.2462c0.27614 0 0.5 0.22386 0.5 0.5s-0.22386 0.5-0.5 0.5h-4c-0.27615 0-0.5-0.22386-0.5-0.5zm5.002 7c0-0.1844-0.10149-0.3538-0.26407-0.4408-0.16258-0.08705-0.35985-0.07751-0.51328 0.0248l-1.5 1c-0.22976 0.1532-0.29185 0.4636-0.13867 0.6934 0.15317 0.2297 0.46361 0.2918 0.69337 0.1386l0.72265-0.4817v5.0657c0 0.2761 0.22386 0.5 0.5 0.5 0.27615 0 0.5-0.2239 0.5-0.5zm4.5028-0.5c-0.9349 0-1.5971 0.4367-1.9958 1.1292-0.3765 0.6541-0.5042 1.5074-0.5042 2.3708s0.1277 1.7167 0.5042 2.3708c0.3987 0.6925 1.0609 1.1292 1.9958 1.1292 0.935 0 1.5972-0.4367 1.9959-1.1292 0.3765-0.6541 0.5041-1.5074 0.5041-2.3708s-0.1276-1.7167-0.5041-2.3708c-0.3987-0.6925-1.0609-1.1292-1.9959-1.1292zm-1.5 3.5c0-0.7935 0.1224-1.4402 0.3709-1.8719 0.2263-0.3932 0.5641-0.6281 1.1291-0.6281 0.5651 0 0.9029 0.2349 1.1292 0.6281 0.2485 0.4317 0.3708 1.0784 0.3708 1.8719s-0.1223 1.4402-0.3708 1.8719c-0.2263 0.3932-0.5641 0.6281-1.1292 0.6281-0.565 0-0.9028-0.2349-1.1291-0.6281-0.2485-0.4317-0.3709-1.0784-0.3709-1.8719z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_skip_forward_10.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m18.999 5.5c0-0.27614-0.2238-0.5-0.5-0.5-0.2761 0-0.5 0.22386-0.5 0.5v2.2024c-0.9121-1.0326-2.0822-1.8192-3.403-2.2714-1.8362-0.62864-3.8384-0.56798-5.6332 0.17064s-3.2597 2.1048-4.1216 3.8438c-0.12263 0.24742-0.02146 0.54741 0.22596 0.67003 0.24742 0.12263 0.5474 0.02146 0.67003-0.22596 0.75409-1.5215 2.0358-2.7168 3.6062-3.3631 1.5704-0.64625 3.3222-0.69932 4.9288-0.1493 1.4133 0.48384 2.6293 1.4053 3.4766 2.6228h-3.2497c-0.2761 0-0.5 0.22386-0.5 0.5s0.2239 0.5 0.5 0.5h4c0.2762 0 0.5-0.22386 0.5-0.5zm-6.4929 7.6292c0.3987-0.6925 1.0609-1.1292 1.9959-1.1292 0.9349 0 1.5971 0.4367 1.9958 1.1292 0.3765 0.6541 0.5042 1.5074 0.5042 2.3708s-0.1277 1.7167-0.5042 2.3708c-0.3987 0.6925-1.0609 1.1292-1.9958 1.1292-0.935 0-1.5972-0.4367-1.9959-1.1292-0.3765-0.6541-0.5041-1.5074-0.5041-2.3708s0.1276-1.7167 0.5041-2.3708zm0.8667 0.4989c-0.2485 0.4317-0.3708 1.0784-0.3708 1.8719s0.1223 1.4402 0.3708 1.8719c0.2263 0.3932 0.5641 0.6281 1.1292 0.6281 0.565 0 0.9028-0.2349 1.1291-0.6281 0.2485-0.4317 0.3709-1.0784 0.3709-1.8719s-0.1224-1.4402-0.3709-1.8719c-0.2263-0.3932-0.5641-0.6281-1.1291-0.6281-0.5651 0-0.9029 0.2349-1.1292 0.6281zm-3.3737-1.1281c0-0.1844-0.1015-0.3538-0.26407-0.4408-0.16258-0.08705-0.35986-0.07751-0.51328 0.0248l-1.5 1c-0.22977 0.1532-0.29185 0.4636-0.13868 0.6934 0.15318 0.2297 0.46361 0.2918 0.69338 0.1386l0.72265-0.4817v5.0657c0 0.2761 0.22385 0.5 0.5 0.5 0.27614 0 0.5-0.2239 0.5-0.5z" fill="#212121"/>
+ <path id="path2" d="m18.999 5.5c0-0.27614-0.2238-0.5-0.5-0.5-0.2761 0-0.5 0.22386-0.5 0.5v2.2024c-0.9121-1.0326-2.0822-1.8192-3.403-2.2714-1.8362-0.62864-3.8384-0.56798-5.6332 0.17064s-3.2597 2.1048-4.1216 3.8438c-0.12263 0.24742-0.02146 0.54741 0.22596 0.67003 0.24742 0.12263 0.5474 0.02146 0.67003-0.22596 0.75409-1.5215 2.0358-2.7168 3.6062-3.3631 1.5704-0.64625 3.3222-0.69932 4.9288-0.1493 1.4133 0.48384 2.6293 1.4053 3.4766 2.6228h-3.2497c-0.2761 0-0.5 0.22386-0.5 0.5s0.2239 0.5 0.5 0.5h4c0.2762 0 0.5-0.22386 0.5-0.5zm-6.4929 7.6292c0.3987-0.6925 1.0609-1.1292 1.9959-1.1292 0.9349 0 1.5971 0.4367 1.9958 1.1292 0.3765 0.6541 0.5042 1.5074 0.5042 2.3708s-0.1277 1.7167-0.5042 2.3708c-0.3987 0.6925-1.0609 1.1292-1.9958 1.1292-0.935 0-1.5972-0.4367-1.9959-1.1292-0.3765-0.6541-0.5041-1.5074-0.5041-2.3708s0.1276-1.7167 0.5041-2.3708zm0.8667 0.4989c-0.2485 0.4317-0.3708 1.0784-0.3708 1.8719s0.1223 1.4402 0.3708 1.8719c0.2263 0.3932 0.5641 0.6281 1.1292 0.6281 0.565 0 0.9028-0.2349 1.1291-0.6281 0.2485-0.4317 0.3709-1.0784 0.3709-1.8719s-0.1224-1.4402-0.3709-1.8719c-0.2263-0.3932-0.5641-0.6281-1.1291-0.6281-0.5651 0-0.9029 0.2349-1.1292 0.6281zm-3.3737-1.1281c0-0.1844-0.1015-0.3538-0.26407-0.4408-0.16258-0.08705-0.35986-0.07751-0.51328 0.0248l-1.5 1c-0.22977 0.1532-0.29185 0.4636-0.13868 0.6934 0.15318 0.2297 0.46361 0.2918 0.69338 0.1386l0.72265-0.4817v5.0657c0 0.2761 0.22385 0.5 0.5 0.5 0.27614 0 0.5-0.2239 0.5-0.5z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_fluent_stop.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2" d="m17.5 6c0.2761 0 0.5 0.22386 0.5 0.5v11c0 0.2761-0.2239 0.5-0.5 0.5h-11c-0.27614 0-0.5-0.2239-0.5-0.5v-11c0-0.27614 0.22386-0.5 0.5-0.5zm-11-1c-0.82843 0-1.5 0.67157-1.5 1.5v11c0 0.8284 0.67157 1.5 1.5 1.5h11c0.8284 0 1.5-0.6716 1.5-1.5v-11c0-0.82843-0.6716-1.5-1.5-1.5z" fill="#212121"/>
+ <path id="path2" d="m17.5 6c0.2761 0 0.5 0.22386 0.5 0.5v11c0 0.2761-0.2239 0.5-0.5 0.5h-11c-0.27614 0-0.5-0.2239-0.5-0.5v-11c0-0.27614 0.22386-0.5 0.5-0.5zm-11-1c-0.82843 0-1.5 0.67157-1.5 1.5v11c0 0.8284 0.67157 1.5 1.5 1.5h11c0.8284 0 1.5-0.6716 1.5-1.5v-11c0-0.82843-0.6716-1.5-1.5-1.5z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_pause_filled.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="rect1029" d="m8.5 5c-0.831 0-1.5 0.669-1.5 1.5v11c0 0.831 0.669 1.5 1.5 1.5s1.5-0.669 1.5-1.5v-11c0-0.831-0.669-1.5-1.5-1.5zm7 0c-0.831 0-1.5 0.669-1.5 1.5v11c0 0.831 0.669 1.5 1.5 1.5s1.5-0.669 1.5-1.5v-11c0-0.831-0.669-1.5-1.5-1.5z" fill="#000"/>
+ <path id="rect1029" d="m8.5 5c-0.831 0-1.5 0.669-1.5 1.5v11c0 0.831 0.669 1.5 1.5 1.5s1.5-0.669 1.5-1.5v-11c0-0.831-0.669-1.5-1.5-1.5zm7 0c-0.831 0-1.5 0.669-1.5 1.5v11c0 0.831 0.669 1.5 1.5 1.5s1.5-0.669 1.5-1.5v-11c0-0.831-0.669-1.5-1.5-1.5z" fill="#FF00FF"/>
</svg>
=====================================
modules/gui/qt/pixmaps/menu/ic_playlist.svg
=====================================
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg4" width="24" height="24" fill="none" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
- <path id="path2158" d="m4.5 6a0.5 0.5 0 0 0-0.5 0.5 0.5 0.5 0 0 0 0.5 0.5h9a0.5 0.5 0 0 0 0.5-0.5 0.5 0.5 0 0 0-0.5-0.5h-9zm0 4a0.5 0.5 0 0 0-0.5 0.5 0.5 0.5 0 0 0 0.5 0.5h9a0.5 0.5 0 0 0 0.5-0.5 0.5 0.5 0 0 0-0.5-0.5h-9zm9.7188 3.002c-0.63441 0.02776-1.2188 0.5487-1.2188 1.2441v5.5078c0 0.92717 1.0373 1.5446 1.8496 1.0957l4.9883-2.7539c0.8396-0.46365 0.83939-1.7274 0-2.1914l-4.9883-2.7539c-0.20304-0.11215-0.41939-0.15769-0.63086-0.14844zm0.013672 0.98438c0.043094 9.6e-4 0.088524 0.013522 0.13477 0.039063l4.9863 2.7539c0.19449 0.1075 0.19428 0.33412 0 0.44141l-4.9863 2.7539c-0.18484 0.10215-0.36719-0.005178-0.36719-0.2207v-5.5078c0-0.16187 0.10314-0.26264 0.23242-0.25977zm-9.7324 0.013672a0.5 0.5 0 0 0-0.5 0.5 0.5 0.5 0 0 0 0.5 0.5h5a0.5 0.5 0 0 0 0.5-0.5 0.5 0.5 0 0 0-0.5-0.5h-5z" color="#000000" fill="#000" fill-rule="evenodd"/>
+ <path id="path2158" d="m4.5 6a0.5 0.5 0 0 0-0.5 0.5 0.5 0.5 0 0 0 0.5 0.5h9a0.5 0.5 0 0 0 0.5-0.5 0.5 0.5 0 0 0-0.5-0.5h-9zm0 4a0.5 0.5 0 0 0-0.5 0.5 0.5 0.5 0 0 0 0.5 0.5h9a0.5 0.5 0 0 0 0.5-0.5 0.5 0.5 0 0 0-0.5-0.5h-9zm9.7188 3.002c-0.63441 0.02776-1.2188 0.5487-1.2188 1.2441v5.5078c0 0.92717 1.0373 1.5446 1.8496 1.0957l4.9883-2.7539c0.8396-0.46365 0.83939-1.7274 0-2.1914l-4.9883-2.7539c-0.20304-0.11215-0.41939-0.15769-0.63086-0.14844zm0.013672 0.98438c0.043094 9.6e-4 0.088524 0.013522 0.13477 0.039063l4.9863 2.7539c0.19449 0.1075 0.19428 0.33412 0 0.44141l-4.9863 2.7539c-0.18484 0.10215-0.36719-0.005178-0.36719-0.2207v-5.5078c0-0.16187 0.10314-0.26264 0.23242-0.25977zm-9.7324 0.013672a0.5 0.5 0 0 0-0.5 0.5 0.5 0.5 0 0 0 0.5 0.5h5a0.5 0.5 0 0 0 0.5-0.5 0.5 0.5 0 0 0-0.5-0.5h-5z" color="#FF00FF" fill="#FF00FF" fill-rule="evenodd"/>
</svg>
=====================================
modules/gui/qt/util/color_svg_image_provider.cpp
=====================================
@@ -28,29 +28,60 @@
#include <QQmlFile>
#include <QDebug>
-#define PATH_KEY "_res_PATH"
-#define BACKGROUND_KEY "_res_BG"
-#define COLOR1_KEY "_res_C1"
-#define COLOR2_KEY "_res_C2"
-#define COLOR_ACCENT_KEY "_res_ACCENT"
-
-namespace {
-
static const QMap<QString, QString> predefinedSubst = {
{COLOR1_KEY, "#FF00FF"},
{COLOR2_KEY, "#00FFFF"},
{COLOR_ACCENT_KEY, "#FF8800"},
};
+QPair<QByteArray, std::optional<QColor>> colorizeSvg(const QString &filename, const QList<QPair<QString, QString> > &replacements)
+{
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly))
+ {
+ qWarning() << "SVGColorizer: can not open file " << filename << " for read.";
+ return {};
+ }
+
+ QByteArray data = file.readAll();
+ //we pass by QString because we want to perform case incensite replacements
+ QString dataStr = QString::fromUtf8(data);
+
+ std::optional<QColor> backgroundColor;
+
+ for (const auto& replacePair: replacements)
+ {
+ if (replacePair.first == PATH_KEY)
+ continue;
+ else if (replacePair.first == BACKGROUND_KEY)
+ {
+ backgroundColor = QColor(replacePair.second);
+ }
+ else if (predefinedSubst.contains(replacePair.first))
+ {
+ dataStr = dataStr.replace(predefinedSubst[replacePair.first],
+ replacePair.second, Qt::CaseInsensitive);
+ }
+ else
+ {
+ dataStr = dataStr.replace(replacePair.first, replacePair.second, Qt::CaseInsensitive);
+ }
+ }
+
+ return {dataStr.toUtf8(), backgroundColor};
+}
+
+namespace {
+
class SVGColorImageReader: public AsyncTask<QImage>
{
public:
SVGColorImageReader(const QString& filename, const QList<QPair<QString, QString>>& replacements, QSize requestedSize)
: AsyncTask<QImage>()
+ , m_fileName(filename)
, m_requestedSize(requestedSize)
, m_replacements(replacements)
{
- m_file = new QFile(filename, this);
if (!m_requestedSize.isValid())
m_requestedSize = QSize{256, 256};
}
@@ -63,7 +94,9 @@ public:
return {};
}
- if (!m_file->open(QIODevice::ReadOnly))
+ const auto data = colorizeSvg(m_fileName, m_replacements);
+
+ if (data.first.isEmpty())
{
m_error = "file can't be opened";
return {};
@@ -71,29 +104,10 @@ public:
QColor backgroundColor{Qt::transparent};
- QByteArray data = m_file->readAll();
- //we pass by QString because we want to perform case incensite replacements
- QString dataStr = QString::fromUtf8(data);
- for (const auto& replacePair: m_replacements)
- {
- if (replacePair.first == PATH_KEY)
- continue;
- else if (replacePair.first == BACKGROUND_KEY)
- {
- backgroundColor = QColor(replacePair.second);
- }
- else if (predefinedSubst.contains(replacePair.first))
- {
- dataStr = dataStr.replace(predefinedSubst[replacePair.first],
- replacePair.second, Qt::CaseInsensitive);
- }
- else
- {
- dataStr = dataStr.replace(replacePair.first, replacePair.second, Qt::CaseInsensitive);
- }
- }
+ if (data.second.has_value())
+ backgroundColor = *data.second;
- QSvgRenderer renderer(dataStr.toUtf8());
+ QSvgRenderer renderer(data.first);
if (!renderer.isValid())
{
m_error = "can't parse SVG content";
@@ -139,7 +153,7 @@ public:
}
private:
- QFile* m_file = nullptr;
+ QString m_fileName;
QString m_error;
QSize m_requestedSize;
QList<QPair<QString, QString>> m_replacements;
=====================================
modules/gui/qt/util/color_svg_image_provider.hpp
=====================================
@@ -24,6 +24,14 @@
#include <QString>
#include <QUrlQuery>
+#define PATH_KEY "_res_PATH"
+#define BACKGROUND_KEY "_res_BG"
+#define COLOR1_KEY "_res_C1"
+#define COLOR2_KEY "_res_C2"
+#define COLOR_ACCENT_KEY "_res_ACCENT"
+
+QPair<QByteArray, std::optional<QColor>> colorizeSvg(const QString& filename, const QList<QPair<QString, QString>>& replacements);
+
class SVGColorImageImageProvider: public QQuickAsyncImageProvider
{
public:
=====================================
modules/gui/qt/util/colorizedsvgicon.cpp
=====================================
@@ -0,0 +1,123 @@
+/*****************************************************************************
+ * Copyright (C) 2025 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#include "colorizedsvgicon.hpp"
+
+#include <QPluginLoader>
+#include <QIconEnginePlugin>
+#include <QIconEngine>
+#include <QPointer>
+#include <QWidget>
+#include <QFileInfo>
+
+ColorizedSvgIcon::ColorizedSvgIcon(QString filename, std::optional<QColor> color1, std::optional<QColor> color2, std::optional<QColor> accentColor, const QList<QPair<QString, QString> > &otherReplacements)
+ : QIcon(newEngine()) // QIcon takes the ownership of the icon engine
+{
+ captureEngine();
+
+ if (!m_engine)
+ {
+ qWarning() << "ColorizedSvgIcon: could not create svg icon engine, icon " << filename << " will not be colorized.";
+ addFile(filename);
+ return;
+ }
+
+ QList<QPair<QString, QString>> replacements;
+ {
+ if (color1.has_value())
+ replacements.push_back({QStringLiteral(COLOR1_KEY), color1->name(QColor::HexRgb)});
+
+ if (color2.has_value())
+ replacements.push_back({QStringLiteral(COLOR2_KEY), color2->name(QColor::HexRgb)});
+
+ if (accentColor.has_value())
+ replacements.push_back({QStringLiteral(COLOR_ACCENT_KEY), accentColor->name(QColor::HexRgb)});
+
+ replacements.append(otherReplacements.begin(), otherReplacements.end());
+ }
+
+ QByteArray data;
+ {
+ // Serialization (akin to `QSvgIconEngine::write()`):
+ int isCompressed = 0;
+
+ QHash<int, QString> svgFiles;
+ QHash<int, QByteArray> svgBuffers;
+
+ const QByteArray& buf = colorizeSvg(filename, replacements).first;
+
+ const auto key = hashKey(Normal, Off); // QIcon(QString) uses these settings
+
+ // Different colored svgs should have different file names assigned,
+ // for now it is not relevant, so don't provide the file name to the
+ // engine:
+ // svgFiles.insert(key, filename);
+ svgBuffers.insert(key, buf);
+
+ QDataStream out(&data, QDataStream::OpenModeFlag::WriteOnly);
+
+ out << svgFiles << isCompressed << svgBuffers;
+ out << 0; // no additional added pixmaps
+ }
+
+ {
+ // Feed the engine with the colorized svg content:
+ QDataStream in(std::as_const(data)); // read-only
+ if (!m_engine->read(in))
+ {
+ qWarning() << "ColorizedSvgIcon: svg icon engine can not read contents, icon " << filename << " will not be colorized.";
+ addFile(filename);
+ return;
+ }
+ }
+}
+
+ColorizedSvgIcon ColorizedSvgIcon::colorizedIconForWidget(const QString &fileName, const QWidget *widget)
+{
+ assert(widget);
+ return ColorizedSvgIcon(fileName, widget->palette().text().color());
+}
+
+QIconEngine *ColorizedSvgIcon::svgIconEngine()
+{
+ static const auto plugin = []() -> QPointer<QIconEnginePlugin> {
+#ifdef QT_STATIC
+ const auto& staticPlugins = QPluginLoader::staticInstances();
+ const auto it = std::find_if(staticPlugins.begin(), staticPlugins.end(), [](QObject *obj) -> bool {
+ return obj->inherits("QSvgIconPlugin");
+ });
+
+ if (it != staticPlugins.end())
+ return qobject_cast<QIconEnginePlugin*>(*it);
+ else
+ return nullptr;
+#else
+ QPluginLoader loader(QStringLiteral("iconengines/qsvgicon")); // Official Qt plugin
+ // No need to check the metadata (or inherits `QSvgIconPlugin`), a plugin named "qsvgicon" should already support svg.
+ return qobject_cast<QIconEnginePlugin*>(loader.instance());
+#endif
+ }();
+
+ if (!plugin)
+ {
+ qWarning() << "ColorizedSvgIcon: svg icon plugin is not found.";
+ return nullptr;
+ }
+
+ return plugin->create();
+}
=====================================
modules/gui/qt/util/colorizedsvgicon.hpp
=====================================
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ * Copyright (C) 2025 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * ( at your option ) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+#ifndef COLORIZEDSVGICON_HPP
+#define COLORIZEDSVGICON_HPP
+
+#include <QIcon>
+
+#include "util/color_svg_image_provider.hpp"
+
+#include <QMutex>
+
+#include <optional>
+
+class ColorizedSvgIcon : public QIcon
+{
+ QIconEngine *m_engine = nullptr;
+
+ inline static QMutex engineLock;
+ inline static QIconEngine *lastEngine; // static variables are initialized by default
+
+ static QIconEngine *newEngine()
+ {
+ engineLock.lock();
+ assert(!lastEngine);
+ lastEngine = svgIconEngine();
+ return lastEngine;
+ }
+
+ void captureEngine()
+ {
+ assert(!m_engine);
+ assert(lastEngine);
+ m_engine = lastEngine;
+ lastEngine = nullptr;
+ engineLock.unlock();
+ }
+
+ static int hashKey(QIcon::Mode mode, QIcon::State state)
+ {
+ // From QSvgIconEnginePrivate:
+ return ((mode << 4) | state);
+ }
+
+public:
+ explicit ColorizedSvgIcon(QString filename,
+ std::optional<QColor> color1 = std::nullopt,
+ std::optional<QColor> color2 = std::nullopt,
+ std::optional<QColor> accentColor = std::nullopt,
+ const QList<QPair<QString, QString>>& otherReplacements = {});
+
+ [[nodiscard]] static ColorizedSvgIcon colorizedIconForWidget(const QString& fileName, const QWidget *widget);
+
+ [[nodiscard]] static QIconEngine *svgIconEngine();
+};
+
+#endif // COLORIZEDSVGICON_HPP
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6a711f527956ba8f56157aeadd1bcab976d3751d...ec9c87d20f110e2583b81c8d49054eb72cf2058e
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6a711f527956ba8f56157aeadd1bcab976d3751d...ec9c87d20f110e2583b81c8d49054eb72cf2058e
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list