Summary: | Регресс отображения шрифтов в Йоксель (Yoksel) | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Антон Азанов (Djelf) <aae> |
Component: | Шрифты | Assignee: | Marat Sharipov <regan> |
Status: | CLOSED FIXED | QA Contact: | Andrey Vusik <night> |
Severity: | minor | ||
Priority: | P4 | CC: | baraka, horracc, lav |
Version: | 1.0.9 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 2000 | ||
Deadline: | 2010-09-20 | ||
Attachments: |
Скрин в 1.0.8, 1.0.9
Минимальный проект для Visual C++ 6.0 вместе с собранным exe Скрин работы тестового приложения под WINE Вид программы при запуске на ALT Linux 1.0.9 eterhack По ошибке не та картинка Тестовый файл с начертанием шрифтов Скрин в WinXP, 1.0.8, 1.0.10-4 скрин из 1.3.27 от 30.09.2011 |
Description
Антон Азанов (Djelf)
2008-11-11 22:14:45 MSK
Created attachment 975 [details]
Минимальный проект для Visual C++ 6.0 вместе с собранным exe
Created attachment 976 [details]
Скрин работы тестового приложения под WINE
Являюсь автором Йокселя. Подготовил минимальный код на C++, демонстрирующий проблему. Прилагаю небольшой тестовый проект для VC 6.0. При работе данного приложения обе выводимые строки должны быть идентичны. В WINE вторая строка искажается. К сожалению, изменить алгоритм отрисовки для меня очень проблематично. Готов предоставить дополнительные сведения, если потребуется. Могу переписать пример под голый C++, если требуется - сейчас там MFC. Спасибо, обязательно постараемся что-то сделать. Какой Linux вы используете? Но первое предположение - такие шрифты могут появится либо потому, что они такие и есть, поэтому причину надо искать в вашей системе. Установлены ли у вас ms core fonts (наш пакет fonts-ttf-ms?) Конечно, ещё есть вариант, что у вас система, на которой freetype собран без поддержки хинтинга. Created attachment 977 [details]
Вид программы при запуске на ALT Linux
Я проверял на Ubuntu 7.04 и Ubuntu 8.04 (одинаковые результаты). wine 1.0.8 отрисовка совпадает попиксельно (при любом шрифте, размере и начертании). wine 1.0.9 вся искажена. ms core fonts установлены. (In reply to comment #4) > Какой Linux вы используете? Ubuntu 8.10. WINE 1.0.9 с апдейтом от 17 декабря. > Но первое предположение - такие шрифты > могут появится либо потому, что они такие и > есть, поэтому причину надо искать в вашей > системе. Установлены ли у вас ms core fonts (наш > пакет fonts-ttf-ms?) Установлен. Делал все по инструкции к Wine@Etersoft. > Конечно, ещё есть вариант, что у вас > система, на которой freetype собран без > поддержки хинтинга. В Ubuntu все ставил и настраивал по умолчанию. Может быть там что-то и не так. Но в любом случае при запуске тестового приложения первая строка отрисовывается так, как в MS. Значит, со шрифтами и хинтингом, мне кажется, все нормально. Ну и в приложениях, которые отрисовывают текст исключительно в режиме MM_TEXT все нормально. А в чём принципиальное отличие в выводе этих строк? (In reply to comment #8) > А в чём принципиальное отличие в выводе > этих строк? > Принципиальное отличие, ИМХО, это другой map mode контекста устройства и система координат. Первая строка выводится в исходном map mode DC - в MM_TEXT. Шрифтом Arial, 10 пунктов, нормальным. Font.CreateFont (-MulDiv (10, GetDeviceCaps (*pDC, LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, "Arial"); Перед выводом второй строки DC переключается в режим MM_ANISOTROPIC (SetMapMode) и через функции SetWindowExt и SetViewportExt устанавливается система координат, когда на дюйм приходится 1440 точек: pDC->SetMapMode (MM_ANISOTROPIC); int const UNITS_PER_INCH = 1440; pDC->SetWindowExt (UNITS_PER_INCH, UNITS_PER_INCH); pDC->SetViewportExt (pDC->GetDeviceCaps (LOGPIXELSX), pDC->GetDeviceCaps (LOGPIXELSY)); Т.е. единицей становится твип (1/20 пункта). Далее просто создается тот же шрифт, что для первой строки ("Arial", 10 пунктов, нормальный), но размер шрифта уже указывается с учетом того, что теперь в контексте устройства на дюйм приходится 1440 точек: Font.CreateFont ( -(int)200 * UNITS_PER_INCH / 72 / 20, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, "Arial"); У меня немного замороченно написано - выдирал из проекта и заменял переменные на константы. Если проще, то выглядеть оно должно так: Font.CreateFont ( -(10 * UNITS_PER_INCH / 72), 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DRAFT_QUALITY, DEFAULT_PITCH, "Arial"); Обе строки выводятся одной и той же функцией - TextOut: pDC->TextOut (20, 20, "Тестовая строка"); Для второй просто координаты меняются на "800, 800". У меня тут везде MFC, но это в данном случае здесь очень легкая обертка над WinAPI и на голом WinAPI выглядеть код должен практически так же. Но, если надо, могу и на WinAPI показать. Проверил на Ubuntu 8.10 с wine@etersoft 1.0.9 и со сборкой из eterhack. В результате на 1.0.9 отрисовка идет не корректно, а со сборкой из eterhack все корректно. См. скрины Created attachment 1002 [details]
1.0.9
Created attachment 1003 [details]
eterhack
Значит ждем выход версии 1.0.10, там исправлено. Created attachment 1009 [details]
По ошибке не та картинка
В 1.0.10-4 действительно значительно лучше, чем в 1.0.9, но не корректно отображаются шрифты 8го размера. Во первых они имеют по-виду 7й размер, во вторых жирное начертание не отображается (кстати если установить в 1С шрифт 7го размера то жирное начертание тоже не отображается).
Created attachment 1010 [details] Тестовый файл с начертанием шрифтов Может быть открыт в 1С и yoksel-stand-alone (отдельное независимое приложение) отсюда: http://sourceforge.net/project/showfiles.php?group_id=198368 (In reply to comment #15) > Created an attachment (id=1010) [details] > Тестовый файл с начертанием шрифтов > > Может быть открыт в 1С и yoksel-stand-alone > (отдельное независимое приложение) отсюда: > http://sourceforge.net/project/showfiles.php?group_id=198368 > Проверю с новым тестовым файлом. Created attachment 1011 [details]
Скрин в WinXP, 1.0.8, 1.0.10-4
Извиняюсь, не тот был скрин приложен.
(In reply to comment #17) > Created an attachment (id=1011) [details] > Скрин в WinXP, 1.0.8, 1.0.10-4 > > Извиняюсь, не тот был скрин приложен. > В последней сборке eterhack снимок(ошибка) воспроизводится. Created attachment 2293 [details]
скрин из 1.3.27 от 30.09.2011
WINE@Etersoft 1.0 SQL 1.3.27/1.7.1-eter1.15/3 Шрифты работают так как надо багу закрываю Закрываю принято Закрываем баги, принятые более года назад, и до сих пор не закрытые. |