В Gnome у приложений есть ярлычки, а у ярлычков может быть иконка.
Но в 99% случаев в настройках ярлыка путь к ионке не указан, только название.
Мне в моем приложении надо воссоздать это поведение, а биндинги GTK к ноде весят в трое больше всей приложухи, так что я решил эту логику воссоздать самостоятельно.
Там же все просто должно быть, подумал я в 12 часов дня. Спустя 4 часа я понял как я ошибался.
Алгоритм следующий:
1. Найти в переменных окружения тему иконок и список папок где могут хранится файлы темы.
2. Темы могут быть определены в разных папках одновременно, надо следовать логике спецификации чтобы определить какая имеет больший вес.
3. Когда мы определили тему надо просканивароть еще один список вохможных директорий, где могут быть файлы темы.
4. Когда мы определили где лежат файлы темы, надо найти ее index файл. В нем описано иконки на какие темы (контексты) лежат в каких подпапках, и в диапазоне каких размеров (min-max), и в каком коофиценте скейлинга
5. Тема может наследоваться от других тем, причем наследование множественное, так что для всех тем от которых она наследуется нужно повторить все пункты выше, и в случае если чего-то не будет в этой теме, брать ее из родительских тем
6. Так как все это куча логики для резолва одной иконки, а показывать их надо много и быстро, в оригинале еще реализован бинарный кэш который пишется на диск, чтобы не делать всю эту работу повторно
я остановился на пункте 4 и думаю - может и хрен с ним с этими 16 лишними мегабайтами биндингов
Post #137
1.06K
- 👍 4