cairo + librsvg: рисовать иконки SVG, заставляя цвет во время выполнения
Я использую набор иконок SVG в своих приложениях, и я рисую их с помощью librsvg. Все эти значки являются одноцветными черными рисунками, и я могу нарисовать их только черным, потому что это цвет, записанный в файле SVG.
Есть способ, которым я могу выбрать во время выполнения цвет (и, возможно, альфа-канал) иконки непосредственно перед их рисованием, не создавая отдельный файл SVG для любого нужного мне цвета? Могу ли я сделать librsvg, чтобы игнорировать цвета, записанные в файле svg, и использовать только тот, который я выбрал? Или любой другой обходной путь, чтобы иметь тот же эффект?
Я думаю о загрузке содержимого файла SVG и изменении в памяти объявлений цветов, это должно работать, но я ищу более чистый способ.
Благодарю.
0 ответов
Вы можете отслеживать https://gitlab.gnome.org/GNOME/librsvg/issues/379, чтобы получить чистый способ сделать это. Таким образом, librsvg необходим API, позволяющий передавать дополнительную таблицу стилей CSS; таким образом ваши формы могут получить свои цвета из этого CSS.
https://gitlab.gnome.org/GNOME/gtk/issues/1471 упоминает способ, которым GTK пытается обойти это, и вы можете использовать что-то подобное. Короче говоря, он создает обертку SVG следующим образом:
<svg ...>
<style type="text/css">
... extra styling here ...
</style>
<xi:include href="... original SVG encoded as a data:URL ..."/>
</svg>
(но проверьте фактический исходный код в комментариях для правильного синтаксиса!)