https://www.phoronix.com/scan.php?page=news_item&px=FreeType-2.12-Released
#freetype #fontconfig
У меня, короче, бамболейло.
Эти сумасшедшие добавили во freetype поддержку векторных шрифтов в формате svg.
Я, конечно, считаю, что это леденящий душу пиздец:
* Явное нарушение всех релевантных принципов дизайна - что за одну сущность должна отвечать одна библиотека. Нужно было для поддержки таких шрифтов сделать новую библиотеку - как google сделали с woff2. Цветной клипарт - это НЕ шрифт!
* Формально у нас получается неразрешимый цикл по зависимостям, потому что svg -> freetype, freetype -> svg теперь. Конечно, эту зависимость замели под ковер, с помощью https://en.wikipedia.org/wiki/Dependency_injection - типа, в библиотеку нужно передать хук, который умеет что-то сделать с распаршенным svg(я только не вчитался, вернуть outline, или осуществить полный рендеринг).
* Надо бы, конечно, посмотреть, что будет со всем этим говном, если в svg шрифта засунуть текст со ссылкой на этот же шрифт.
Это даже нельзя оправдать с "ну чтобы не впиливать поддержку в каждое приложение по отдельности", потому что хуки для рендеринга svg каждое приложение будет таки поставлять само.
Банальное нежелание нормально отрефачить код приводит вот к таким кадаврам, если мы хотим наслаждаться полноцветной какашечкой на наших экранах.
Ну и тот факт, что единственный работающий embedded растеризатор svg написан на Rust, доставляет. Я это, конечно, вертел на причинном месте, я там вставлю вызов по RPC в Inkscape(самый лучший растеризатор svg из доступных, но не в виде библиотеки), собственно, как и хотел сделать для качественного рендеринга иконок.
#freetype #fontconfig
У меня, короче, бамболейло.
Эти сумасшедшие добавили во freetype поддержку векторных шрифтов в формате svg.
Я, конечно, считаю, что это леденящий душу пиздец:
* Явное нарушение всех релевантных принципов дизайна - что за одну сущность должна отвечать одна библиотека. Нужно было для поддержки таких шрифтов сделать новую библиотеку - как google сделали с woff2. Цветной клипарт - это НЕ шрифт!
* Формально у нас получается неразрешимый цикл по зависимостям, потому что svg -> freetype, freetype -> svg теперь. Конечно, эту зависимость замели под ковер, с помощью https://en.wikipedia.org/wiki/Dependency_injection - типа, в библиотеку нужно передать хук, который умеет что-то сделать с распаршенным svg(я только не вчитался, вернуть outline, или осуществить полный рендеринг).
* Надо бы, конечно, посмотреть, что будет со всем этим говном, если в svg шрифта засунуть текст со ссылкой на этот же шрифт.
Это даже нельзя оправдать с "ну чтобы не впиливать поддержку в каждое приложение по отдельности", потому что хуки для рендеринга svg каждое приложение будет таки поставлять само.
Банальное нежелание нормально отрефачить код приводит вот к таким кадаврам, если мы хотим наслаждаться полноцветной какашечкой на наших экранах.
Ну и тот факт, что единственный работающий embedded растеризатор svg написан на Rust, доставляет. Я это, конечно, вертел на причинном месте, я там вставлю вызов по RPC в Inkscape(самый лучший растеризатор svg из доступных, но не в виде библиотеки), собственно, как и хотел сделать для качественного рендеринга иконок.
Phoronix
FreeType 2.12 Released With Support For OT-SVG Fonts
FreeType as the widely-used, open-source library for font rendering is out with FreeType 2.12 as its first big feature release since last summer.
🔥6😱4👍1
Читал тут, на ночь глядя, unixporn. Нет, это не pornhub, и не xvideos.
Я оттуда ничего не использую, потому что обычно, если сфотать не под тем углом, что фотал автор, оно все разваливается.
Глаз зацепился за https://www.reddit.com/r/unixporn/comments/ut0g7u/kde_catppucin_with_mac_fonts/
Там коллега, на голубом глазу, утверждал, что использует под Linux шрифты из macOS.
Я удивился, потому что думал, что эти шрифты не отчуждаемы.
Но нет, вот они, любой желающий может скачать - https://developer.apple.com/fonts/
Маленькая загвоздка - они в dmg формате, а это, по сути своей, образ HFS+, если я ничего не путаю.
Гугление подсказало, что с dmg умеет справляться 7z - https://askubuntu.com/questions/38112/how-can-i-open-a-dmg-file
Проблема в том, что с dmg умеет справляться только "большой" 7z, а 7za - не умеет. 7z у меня не был собран, потому что он в процессе работы использует две подгружаемые .so - 7z.so, и rar.so.
Когда я в первый раз подходил к снаряду, у меня не получилось это сделать, но сейчас я уже умею больше и сильнее.
Короче, TL;DR - по моей классификации, это "всратейшая" система с #plugin, потому что там экспортируются какие-то левые символы с данными, функциями, .so при загрузке выполняет конструкторы, которые себя где-то регистрируют, и так далее.
Так же, как у меня уже было в #quake 2, обе .so и main driver пересекаются по обжам и по символам. Я и поступил так же - переименовал все символы, написал mapping для моего загрузчика, и все! https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/p7zip/z/mix.sh#L29
Забавно, по мере роста пакетной базы и развития инструментария, все это становится все проще и проще. Правда, мой идеал - по compile database вывести все нужные правила для перелинковки, пока еще далеко.
А что шрифты? А шрифты я загрузил, там, внутри dmg лежит pkg, который тоже нужно разжать с помощью 7z. А внутре лежит какой-то файл, который можно разжать только с помощью bsdtar.
Вот такая вот смерть кащея. https://git.sr.ht/~pg/mix/tree/main/item/pkgs/aux/fonts/sf/pro/mix.sh
Шрифты мне не понравились, #freetype рендерит их не очень. Правовой статус мне не очень понятен, при закачке ничего сказано не было, при установке тоже.
Я оттуда ничего не использую, потому что обычно, если сфотать не под тем углом, что фотал автор, оно все разваливается.
Глаз зацепился за https://www.reddit.com/r/unixporn/comments/ut0g7u/kde_catppucin_with_mac_fonts/
Там коллега, на голубом глазу, утверждал, что использует под Linux шрифты из macOS.
Я удивился, потому что думал, что эти шрифты не отчуждаемы.
Но нет, вот они, любой желающий может скачать - https://developer.apple.com/fonts/
Маленькая загвоздка - они в dmg формате, а это, по сути своей, образ HFS+, если я ничего не путаю.
Гугление подсказало, что с dmg умеет справляться 7z - https://askubuntu.com/questions/38112/how-can-i-open-a-dmg-file
Проблема в том, что с dmg умеет справляться только "большой" 7z, а 7za - не умеет. 7z у меня не был собран, потому что он в процессе работы использует две подгружаемые .so - 7z.so, и rar.so.
Когда я в первый раз подходил к снаряду, у меня не получилось это сделать, но сейчас я уже умею больше и сильнее.
Короче, TL;DR - по моей классификации, это "всратейшая" система с #plugin, потому что там экспортируются какие-то левые символы с данными, функциями, .so при загрузке выполняет конструкторы, которые себя где-то регистрируют, и так далее.
Так же, как у меня уже было в #quake 2, обе .so и main driver пересекаются по обжам и по символам. Я и поступил так же - переименовал все символы, написал mapping для моего загрузчика, и все! https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/p7zip/z/mix.sh#L29
Забавно, по мере роста пакетной базы и развития инструментария, все это становится все проще и проще. Правда, мой идеал - по compile database вывести все нужные правила для перелинковки, пока еще далеко.
А что шрифты? А шрифты я загрузил, там, внутри dmg лежит pkg, который тоже нужно разжать с помощью 7z. А внутре лежит какой-то файл, который можно разжать только с помощью bsdtar.
Вот такая вот смерть кащея. https://git.sr.ht/~pg/mix/tree/main/item/pkgs/aux/fonts/sf/pro/mix.sh
Шрифты мне не понравились, #freetype рендерит их не очень. Правовой статус мне не очень понятен, при закачке ничего сказано не было, при установке тоже.
Reddit
From the unixporn community on Reddit: [KDE] Catppucin with Mac Fonts
Explore this post and more from the unixporn community
👍10💩1
Список зависимостей у библиотеки или программы - очень мощная вещь, по ним, например, можно понять, что cmake через curl лезет в сеть, а это очевидные ай-ай-ай.
Вот так, анализируя кольцевые зависимости freetype + harfbuzz + cairo + pango, я начал понимать, что мои представления о рендеринге шрифтов в Linux очень далеки от реальности.
#freetype #harfbuzz #fontconfig
Раньше я думал, что все очень просто: freetype загружает файл со шрифтом, рендерит его в буффер по заданным размерам, а дальше приложение битблитит эти буфера на канву, почем зря.
Потом в эту модель добавился harfbuzz, как загрузчик opentype шрифтов. Модель изменилась так - или freetype, или harfbuzz рендерят в буффер глифы, дальше приложение битблитает их на канву.
(битблитать недостаточно, https://github.com/revery-ui/revery/issues/108)
Эта стройная модель разбивается о:
* Настройки антиалиасинга живут во freetype. Всем известны infinality freetype, и патченый freetype в arch. Как это все соединяетсяс предыдущей моделью? Как антиалиасятся глифы от harfbuzz?
* subpixel rendering в freetype/harfbuzz? Один и тот же код, или разный, с разными настройками?
* Как мы рендерим цветные шрифты и шрифты под углом? Вряд ли мы поворачиваем глифы, кажется гораздо более естественным поворачивать outlines. Тогда пайплайн такой - freetype/harfbuzz готовят outlines, кто-то отдельный их рендерит. Но, если так, то конечным рендерингом должна заниматься какая-то отдельно стоящая векторная библиотека, типа cairo? А откуда она берет настройки антиалиасинга из freetype, и по каким алгоритмам вообще их имплементирует? А как мы рендерим/поворачиваем subhinted glyphs?
А как в обе этих модели вписываются хинты для взаиморасположения символов? В модель с outlines довольно понятно, а вот в bitmap модель не очень.
Причем, достаточно понятно, что есть приложения, которые берут готовые глифы от freetype, и есть те, которые используют outlines.
А если cairo для рисования outlines, то что в QT?
(Я попрошу заметить, что я еще даже не начал писать про подобные неоднозначности в text shape/layout, которыми занимаются harfbuzz и pango, и невесть кто еще)
Да, да, все это я начал понимать, раскапывая списки зависимостей разных там библиотек :) До этого мне правильные вопросы не приходили в голову.
Коллеги, помогите девочке Даше не сойти с ума, и скажите, как оно все на самом деле.
Ну и главный вопрос - чо круче-то, open type или true type шрифты? Как убедиться, что используется ot вариант, и что рендеринг идет правильным путем?
Вот так, анализируя кольцевые зависимости freetype + harfbuzz + cairo + pango, я начал понимать, что мои представления о рендеринге шрифтов в Linux очень далеки от реальности.
#freetype #harfbuzz #fontconfig
Раньше я думал, что все очень просто: freetype загружает файл со шрифтом, рендерит его в буффер по заданным размерам, а дальше приложение битблитит эти буфера на канву, почем зря.
Потом в эту модель добавился harfbuzz, как загрузчик opentype шрифтов. Модель изменилась так - или freetype, или harfbuzz рендерят в буффер глифы, дальше приложение битблитает их на канву.
(битблитать недостаточно, https://github.com/revery-ui/revery/issues/108)
Эта стройная модель разбивается о:
* Настройки антиалиасинга живут во freetype. Всем известны infinality freetype, и патченый freetype в arch. Как это все соединяетсяс предыдущей моделью? Как антиалиасятся глифы от harfbuzz?
* subpixel rendering в freetype/harfbuzz? Один и тот же код, или разный, с разными настройками?
* Как мы рендерим цветные шрифты и шрифты под углом? Вряд ли мы поворачиваем глифы, кажется гораздо более естественным поворачивать outlines. Тогда пайплайн такой - freetype/harfbuzz готовят outlines, кто-то отдельный их рендерит. Но, если так, то конечным рендерингом должна заниматься какая-то отдельно стоящая векторная библиотека, типа cairo? А откуда она берет настройки антиалиасинга из freetype, и по каким алгоритмам вообще их имплементирует? А как мы рендерим/поворачиваем subhinted glyphs?
А как в обе этих модели вписываются хинты для взаиморасположения символов? В модель с outlines довольно понятно, а вот в bitmap модель не очень.
Причем, достаточно понятно, что есть приложения, которые берут готовые глифы от freetype, и есть те, которые используют outlines.
А если cairo для рисования outlines, то что в QT?
(Я попрошу заметить, что я еще даже не начал писать про подобные неоднозначности в text shape/layout, которыми занимаются harfbuzz и pango, и невесть кто еще)
Да, да, все это я начал понимать, раскапывая списки зависимостей разных там библиотек :) До этого мне правильные вопросы не приходили в голову.
Коллеги, помогите девочке Даше не сойти с ума, и скажите, как оно все на самом деле.
Ну и главный вопрос - чо круче-то, open type или true type шрифты? Как убедиться, что используется ot вариант, и что рендеринг идет правильным путем?
GitHub
Text Rendering / Clarity: Implement correct gamma correction · Issue #108 · revery-ui/revery
Issue: The font rendering is not as clear as it could be on low-dpi displays. One contributing factor is that we are not appropriately handling gamma color space. When we render a glyph, freetype g...
🤯6👍2
commit -m "better"
В мой любимый тикет про #harfbuzz пришел ncopa, https://github.com/harfbuzz/harfbuzz/issues/2524#issuecomment-1514618751, пишет, что: "As a distro maintainer for Alpine Linux, ABI breaks are trivial to handle compared to circular dependencies. And we handle…
Короче, задолбался я вырезать лобзиком сборку цикла cairo -> #fontconfig -> #freetype -> #harfbuzz -> (cairo + freetype + fontconfig), и сделал по рабоче-крестьянски:
Сначала собираем все 4 цели в #bootstrap варианте, без зависимостей друг на друга.
Потом собираем все 4 либы, прописывая им зависимость времени сборки(это важно! зависимости будут доступны при сборке, но не при дальнейшем использовании!) от всех других 3 библиотек:
https://github.com/stal-ix/ix/blob/main/pkgs/lib/harfbuzz/unwrap/ix.sh#L3-L8
Потом собираем кадавра из 4 библиотек, lib/harfbuzz:
https://github.com/stal-ix/ix/blob/main/pkgs/lib/harfbuzz/ix.sh#L3-L8
Ну и все остальные библиотеки из цикла - это просто алиасы на lib/harfbuzz:
https://github.com/stal-ix/ix/blob/main/pkgs/lib/freetype/ix.sh#L4
Сборок чуть больше, но геморроя с вырезанием лобзиком сильно меньше.
А эти пусть как жили во грехе, так пусть и живут.
Сначала собираем все 4 цели в #bootstrap варианте, без зависимостей друг на друга.
Потом собираем все 4 либы, прописывая им зависимость времени сборки(это важно! зависимости будут доступны при сборке, но не при дальнейшем использовании!) от всех других 3 библиотек:
https://github.com/stal-ix/ix/blob/main/pkgs/lib/harfbuzz/unwrap/ix.sh#L3-L8
Потом собираем кадавра из 4 библиотек, lib/harfbuzz:
https://github.com/stal-ix/ix/blob/main/pkgs/lib/harfbuzz/ix.sh#L3-L8
Ну и все остальные библиотеки из цикла - это просто алиасы на lib/harfbuzz:
https://github.com/stal-ix/ix/blob/main/pkgs/lib/freetype/ix.sh#L4
Сборок чуть больше, но геморроя с вырезанием лобзиком сильно меньше.
А эти пусть как жили во грехе, так пусть и живут.
GitHub
ix/pkgs/lib/harfbuzz/unwrap/ix.sh at main · stal-ix/ix
ix package manager. Contribute to stal-ix/ix development by creating an account on GitHub.
😁13🔥11