Bug 2889

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 883 [details]
Скрин в 1.0.8, 1.0.9

http://yoksel.net.ru/HomePage
Йоксель (Yoksel) – внешняя компонента к 1С для расширения функционала табличных документов с поддержкой открытия/сохранения файлов Excel и отдельное приложение (аналог 1С:Предприятие - Работа с файлами). 
Очень сильно помогает при обходе бага http://bugs.etersoft.ru/show_bug.cgi?id=86

Скачать как отдельное приложение можно отсюда: http://sourceforge.net/project/showfiles.php?group_id=198368&package_id=285212&release_id=635420

Проблема в отображении шрифтов. в wine 1.0.8 и WinXP отображение документов идеально соответствовало 1С 7.7 В wine 1.0.9(32,33,34) шрифты перестали корректно отображаться и в отдельном приложении и во внешней компоненте к 1С.
Comment 1 Ужас бухгалтера 2008-12-20 02:28:56 MSK
Created attachment 975 [details]
Минимальный проект для Visual C++ 6.0 вместе с собранным exe
Comment 2 Ужас бухгалтера 2008-12-20 02:29:40 MSK
Created attachment 976 [details]
Скрин работы тестового приложения под WINE
Comment 3 Ужас бухгалтера 2008-12-20 02:33:51 MSK
Являюсь автором Йокселя.
Подготовил минимальный код на C++, демонстрирующий проблему. Прилагаю небольшой тестовый проект для VC 6.0. При работе данного приложения обе выводимые строки должны быть идентичны. В WINE вторая строка искажается.

К сожалению, изменить алгоритм отрисовки для меня очень проблематично.

Готов предоставить дополнительные сведения, если потребуется. Могу переписать пример под голый C++, если требуется - сейчас там MFC.
Comment 4 Vitaly Lipatov 2008-12-20 12:46:53 MSK
Спасибо, обязательно постараемся что-то сделать.
Какой Linux вы используете?
Но первое предположение - такие шрифты могут появится либо потому, что они такие и есть, поэтому причину надо искать в вашей системе. Установлены ли у вас ms core fonts (наш пакет fonts-ttf-ms?)
Конечно, ещё есть вариант, что у вас система, на которой freetype собран без поддержки хинтинга.
Comment 5 Vitaly Lipatov 2008-12-20 12:47:42 MSK
Created attachment 977 [details]
Вид программы при запуске на ALT Linux
Comment 6 Антон Азанов (Djelf) 2008-12-20 14:49:15 MSK
Я проверял на Ubuntu 7.04 и Ubuntu 8.04 (одинаковые результаты).
wine 1.0.8 отрисовка совпадает попиксельно (при любом шрифте, размере и начертании).
wine 1.0.9 вся искажена.
ms core fonts установлены.
Comment 7 Ужас бухгалтера 2008-12-20 22:12:31 MSK
(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 все нормально.
Comment 8 Vitaly Lipatov 2008-12-21 04:15:15 MSK
А в чём принципиальное отличие в выводе этих строк?
Comment 9 Ужас бухгалтера 2008-12-21 07:00:20 MSK
(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 показать.
Comment 10 Денис Баранов 2009-01-03 17:31:12 MSK
Проверил на Ubuntu 8.10 с wine@etersoft 1.0.9 и со сборкой из eterhack.
В результате на 1.0.9 отрисовка идет не корректно, а со сборкой из eterhack все корректно.
См. скрины
Comment 11 Денис Баранов 2009-01-03 17:31:45 MSK
Created attachment 1002 [details]
1.0.9
Comment 12 Денис Баранов 2009-01-03 17:32:08 MSK
Created attachment 1003 [details]
eterhack
Comment 13 Денис Баранов 2009-01-03 17:34:30 MSK
Значит ждем выход версии 1.0.10, там исправлено.
Comment 14 Антон Азанов (Djelf) 2009-01-05 18:22:04 MSK
Created attachment 1009 [details]
По ошибке не та картинка

В 1.0.10-4 действительно значительно лучше, чем в 1.0.9, но не корректно отображаются шрифты 8го размера. Во первых они имеют по-виду 7й размер, во вторых жирное начертание не отображается (кстати если установить в 1С шрифт 7го размера то жирное начертание тоже не отображается).
Comment 15 Антон Азанов (Djelf) 2009-01-05 18:24:25 MSK
Created attachment 1010 [details]
Тестовый файл с начертанием шрифтов

Может быть открыт в 1С и yoksel-stand-alone (отдельное независимое приложение) отсюда: http://sourceforge.net/project/showfiles.php?group_id=198368
Comment 16 Денис Баранов 2009-01-05 18:27:23 MSK
(In reply to comment #15)
> Created an attachment (id=1010) [details]
> Тестовый файл с начертанием шрифтов
> 
> Может быть открыт в 1С и yoksel-stand-alone
> (отдельное независимое приложение) отсюда:
> http://sourceforge.net/project/showfiles.php?group_id=198368
> 

Проверю с новым тестовым файлом.
Comment 17 Антон Азанов (Djelf) 2009-01-05 18:27:53 MSK
Created attachment 1011 [details]
Скрин в WinXP, 1.0.8, 1.0.10-4 

Извиняюсь, не тот был скрин приложен.
Comment 18 Денис Баранов 2009-01-24 14:56:32 MSK
(In reply to comment #17)
> Created an attachment (id=1011) [details]
> Скрин в WinXP, 1.0.8, 1.0.10-4 
> 
> Извиняюсь, не тот был скрин приложен.
> 

В последней сборке eterhack снимок(ошибка) воспроизводится.
Comment 19 Marat Sharipov 2011-09-30 13:49:57 MSK
Created attachment 2293 [details]
скрин из 1.3.27 от 30.09.2011
Comment 20 Marat Sharipov 2011-09-30 13:50:45 MSK
WINE@Etersoft 1.0 SQL 1.3.27/1.7.1-eter1.15/3
Шрифты работают так как надо
багу закрываю
Comment 21 Marat Sharipov 2011-09-30 13:51:29 MSK
Закрываю
Comment 22 Andrey Vusik 2011-10-03 17:32:46 MSK
принято
Comment 23 Vitaly Lipatov 2014-09-12 02:48:31 MSK
Закрываем баги, принятые более года назад, и до сих пор не закрытые.