Russian Qt Forum

Qt => Общие вопросы => Тема начата: Igors от Август 17, 2018, 12:13



Название: Выдрать глифы (решено)
Отправлено: Igors от Август 17, 2018, 12:13
Добрый день

При портировании на 64-bit отвалился здоровенный кусок кода. Был написан на ATSU API, ф-ции

ATSUGetTextLocation
ATSUBreakLine
ATSUGetSoftLineBreaks
ATSUGetNativeCurveType
и.т.д

Никогда этим не занимался, задачу знаю в общих чертах: ищутся все фонты установленные в системе. Юзер выбирает фонт и пишет им какой-то текст. Ну и с помощью этого API буквы переводятся в контуры (N-угольники на поскости), которые затем используются для построения 3D моделей этих букв. С построением проблем нет, но чем заменить старое API?

Что на эту тему есть в Qt ?

Спасибо


Название: Re: Выдрать глифы (?)
Отправлено: kambala от Август 17, 2018, 13:14
родная замена — Core Text, скорее всего


Название: Re: Выдрать глифы (?)
Отправлено: Igors от Август 17, 2018, 13:43
родная замена — Core Text, скорее всего
Да, так в хедерах и пишут (deprecated, use Core Text API). Но где найти эквиваленты для 2 десятков вызовов старого API? И есть ли они вообще? Пытался гуглить "<имя ф-ции> replacement" - ничего


Название: Re: Выдрать глифы (?)
Отправлено: kambala от Август 17, 2018, 14:04
видимо, придется читать документацию Core Text и самому определять что на что поменять :)


Название: Re: Выдрать глифы (?)
Отправлено: Igors от Август 20, 2018, 09:33
Углубился в старый код. Само извлечение сводится к ф-циям типа

ATSUGlyphGetCubicPaths
ATSUGlyphGetQuadraticPaths

Которые извлекают не сами "точки" (контура), а "сегменты" Безье сплайна. Поэтому правильно выглядит
построить QPainterPath для каждой буквы (глифа), и из него получить те же самые сегменты. Правда придется снести пачку старых файлов и написать новый код.



Название: Re: Выдрать глифы (?)
Отправлено: Igors от Август 23, 2018, 04:45
Наконец закончил резать старый код (чижело). А сама реализация на Qt - всего лишь страничка текста, все прекрасно работает без всякого нативняка