Bug 1819

Summary: Wine не может поворачивать растровые шрифты
Product: WINE@Etersoft Reporter: Анатолий Лютин <vostok>
Component: ШрифтыAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P5 CC: amorozov, lav
Version: 1.0.10   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 1636    
Bug Blocks: 620, 777, 1988    
Attachments: Поддержка флага OUT_TT_ONLY_PRECIS
Нормальный вид теста
Сломанный новыеми патчами на gdi32/freetype

Description Анатолий Лютин 2008-05-15 19:40:47 MSD
В Windows растровые шрифты крутятся на любые углы, а в wine во freetype.c при отображении растровых шрифтов поворот ставиться равным 0. Если убрать это, то строчка будет позиционироваться правильно, но буквы не будут повёрнуты под нужным углом.

Похоже системный freetype не умеет это делать.
Comment 1 Vitaly Lipatov 2008-05-15 19:47:08 MSD
Саша, предлагаю когда будет пауза в других задачах, посмотреть на libfreetype,
и выяснить в чём проблема с поворотом растровых (.fon) шрифтов.
Comment 2 Александр Морозов 2008-05-16 19:27:00 MSD
Насколько я понял из документации, fon-шрифты нельзя повернуть с помощью FT_Set_Transform. Если нет какой-нибудь другой функции, поворачивающей немасштабируемые шрифты, то остаётся разве что поворачивать руками.

Написал тестовую программу, которая выводит с помощью freetype изображение одного символа. С ttf-шрифтами она работает нормально, а с fon выводит какую-то ерунду.
Comment 3 Александр Морозов 2008-05-19 17:53:21 MSD
Разобрался, почему тестовая программа неправильно показывала fon-шрифты. Для них создавалась картинка в другом формате (1 бит на пиксел), а программа пыталась её показывать как будто там 8 бит на пиксел.

FT_Set_Transform немасштабируемые шрифты не поворачивает. Каких-то функций для преобразования немасштабируемых шрифтов во freetype вроде как не предусмотрено.
Comment 4 Александр Морозов 2008-05-22 19:38:20 MSD
Оказывается, растровые шрифты не поворачиваются в Windows. В Windows CreateFontIndirect при использовании флага OUT_TT_ONLY_PRECIS делает выбор только из TrueType-шрифтов. Данный флаг используется в KMSchool, поэтому текст там поворачивается. В Wine данный флаг, видимо, правильно не обрабатывается и загружается растровый шрифт.
Comment 5 Александр Морозов 2008-05-23 14:29:10 MSD
Created attachment 457 [details]
Поддержка флага OUT_TT_ONLY_PRECIS

Надписи в KMSchool теперь поворачиваются.

Вайновские тесты у меня не работают и без патча, поэтому определить, ломает ли мой  патч их или нет, не получается.
Comment 6 Vitaly Lipatov 2008-06-25 21:31:20 MSD
Патчи Дмитрия от 24.06.08 ломают масштаб повёрнутых шрифтов, поэтому для школьного вайна 0.9 я их отменил.

Старый хак убрал
commit 742759aa892db62c91cf2f637142dbd2758233c6
Author: Vitaly Lipatov <lav@etersoft.ru>
Date:   Wed Jun 25 21:30:32 2008 +0400

    Revert "Replace MS Sans Serif with Tahoma, because freetype can not rotate bimap fonts (bug #1819)"

    This reverts commit 75f0e38d17d9959c927676767c804c79ab471427.
Comment 7 Vitaly Lipatov 2008-06-25 21:55:26 MSD
Created attachment 518 [details]
Нормальный вид теста

Исходники теста в 
wine-etersoft-devel/fonts/rotlet/
Comment 8 Vitaly Lipatov 2008-06-25 21:55:55 MSD
Created attachment 519 [details]
Сломанный новыеми патчами на gdi32/freetype
Comment 9 Vitaly Lipatov 2008-06-27 11:15:18 MSD
Нужно создать тест, проверяющий неизменность размера региона, вмещающего текст, при повороте.
Comment 10 Vitaly Lipatov 2008-06-27 11:50:11 MSD
> Проблема с вращением битмап шрифтов та же, что и с вращением битмап
> изображений (DIB/DDB) - gdi32 в Wine не поддерживает World Transforms
> в полном объеме, а делает только масштабирование (и то не всегда верно).
Comment 11 Александр Морозов 2008-07-14 18:51:07 MSD
Для строк, повёрнутых на 900 и 2700 градусов, GetTextExtentPoint32 возвращает ширину 0. Чем ближе наклон строки к этим углам, тем меньше её ширина.
Comment 12 Александр Морозов 2008-07-15 14:01:32 MSD
Написал тест
Comment 13 Vitaly Lipatov 2008-08-05 21:33:07 MSD
Проверено, что исправлено к 1.1.2
Я убрал отмену патчей и проверил последние исходники (школьного и нашего) вайна тестом.