cairo + librsvg: рисовать иконки SVG, заставляя цвет во время выполнения - PullRequest
0 голосов
/ 03 февраля 2019

Я использую набор иконок svg в своих приложениях и рисую их с помощью librsvg.Все эти значки являются одноцветными черными рисунками, и я могу нарисовать их только черным, потому что это цвет, записанный в файле svg.

Есть способ выбрать цвет во время выполнения (ивозможно, альфа-канал) иконки непосредственно перед их рисованием, без создания специального файла SVG для любого цвета, который мне нужен?Могу ли я сделать librsvg, чтобы игнорировать цвета, записанные в файле svg, и использовать только тот, который я выбрал?Или любой другой обходной путь, чтобы иметь тот же эффект?

Я думаю о загрузке содержимого файла SVG и изменить в памяти цветовые объявления, это должно работать, но я ищу более чистый способ.

Спасибо.

1 Ответ

0 голосов
/ 21 июня 2019

Возможно, вы захотите контролировать 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>

(но проверьте фактический исходный код в комментариях там для правильного синтаксиса!)

...