Bug 4619

Summary: Неправильные размеры у окон инсталляторов и элементов на них
Product: WINE@Etersoft Reporter: Александр Морозов <amorozov>
Component: Окна / фокус / перерисовкаAssignee: Svetlana Zhukova <svzhu>
Status: CLOSED FIXED QA Contact: Marat Sharipov <regan>
Severity: normal    
Priority: P4 CC: lav, night
Version: 2.0   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 788, 4284, 5563    
Attachments: Скриншот
Инсталлятор 1С 8.1
Установка Компас

Description Александр Морозов 2009-12-08 19:43:19 MSK
Created attachment 1413 [details]
Скриншот

В 1.0.12 как-то странно изменились размеры у окна инсталлятора MS Office XP Pro. В 1.0.11 всё было меньше.

Дистрибутив:
/var/ftp/pvt/Windows/MS/MSO/MSOXPPro

$ rpm -qa | grep wine
wine-etersoft-sql-1.0.12-alt1
wine-etersoft-1.0.12-alt1.1
Comment 1 Александр Морозов 2009-12-11 13:57:52 MSK
Created attachment 1422 [details]
Инсталлятор 1С 8.1
Comment 2 Илья Шпигорь 2009-12-11 15:58:01 MSK
Сломалось коммитом:

commit 77eb0e0097d153158a27decbbfb0f39b69c28bb7
Author: Ilya Shpigor <shpigor@etersoft.ru>
Date:   Tue Nov 10 14:25:52 2009 +0300

    gdi32: Use the logical device coordinates for scalable text faces (eterbug #4409)

К новому шрифту Microsoft Sans Serif не имеет никакого отношения.
Comment 3 Илья Шпигорь 2009-12-15 15:38:48 MSK
Выложил патч.

Проблема в том, что в функции msi_dialog_get_sans_serif_height неправильно считается размер шрифта в point'ах, который затем используется для масштабирования контролов.
Используется такая формула:

lf.lfHeight = MulDiv(10, GetDeviceCaps(hdc, LOGPIXELSY), 72);

Это похоже на формулу для расчета размера в логических координатах устройства:

int logheight = -MulDiv(pointsize, GetDeviceCaps(hdc, LOGPIXELSY), 72);

Только здесь нет минуса. Это означает, что рассчитывается высота ячейки для символа определенного шрифта, а не высота самого символа.

При этом исходя из комментария к этой функции, она должна считать высоту 10 point для шрифта MS Sans Serif. Но подсчитанный по формуле размер соответствует не point'ам, а логическим координатам.

Чтобы функция работала корректно (согласно комментарию) необходимо изменить формулу:

lf.lfHeight = MulDiv(10, 72, GetDeviceCaps(hdc, LOGPIXELSY));

Для более подробной информации см:
http://support.microsoft.com/kb/74299
http://www.catch22.net/tuts/tips 
Comment 4 Илья Шпигорь 2009-12-15 16:21:02 MSK
В оригинальном wine такое изменение не пройдет, т.к. у них по-другому работает WineEngCreateFontInstance. Поэтому из-за этого патча все контролы и шрифт в msi диалогах становятся очень маленькими.

В текущем релизе оригинального wine 1.1.34 бага #4409 решена. Поэтому при merge eterhack'а с оригинальным wine необходимо отктатить этот патч и на #4409.
Comment 5 Andrey Vusik 2009-12-16 18:35:57 MSK
Принято.
1.0.12-eter1.2/1
Comment 6 Александр Морозов 2010-05-20 16:56:11 MSD
Аналогичная проблема проявляется при установке Компаса в WINE@Etersoft CAD 1.1.0-eter9/5.
Comment 7 Александр Морозов 2010-05-20 16:57:34 MSD
Created attachment 1704 [details]
Установка Компас
Comment 8 Илья Шпигорь 2010-05-20 17:45:39 MSD
Выложил реверт на коммит #4409 и новое решение для etercad.
См. http://bugs.etersoft.ru/show_bug.cgi?id=5563#c1
Comment 9 Денис Баранов 2010-12-02 22:05:43 MSK
Проверить на последней версии WINE@Etersoft CAD
Comment 10 Marat Sharipov 2011-01-11 17:14:53 MSK
WINE@Etersoft CAD 1.0.12-eter7.40/15
Принято.
Comment 11 Александр Морозов 2011-08-02 16:14:50 MSK
wine-etersoft-1.3.15-alt1.2                                                                                                                                  
wine-etersoft-sql-1.7.1-alt2

Проблема снова присутствует
Comment 12 Виталий Перов 2011-08-03 16:23:58 MSK
Да, на последнем eterhack воспроизводится.
На school тоже воспроизводится.
На cad воспроизводится.
Comment 13 Виталий Перов 2011-08-03 17:16:13 MSK
Нашёл патч, создающий проблему:

commit 7d7783abb4e8d61e0712d72753888d0a33b6031d
Author: Ilya Shpigor <shpigor@etersoft.ru>
Date:   Tue Nov 10 14:25:52 2009 +0300

    gdi32: Use the logical device coordinates for scalable text faces (eterbug #4409)

Надо проверить багу 4409.

Откатил патч для etercad. Там всё-равно 1с77 не работает.
Comment 14 Виталий Перов 2011-08-03 17:51:03 MSK
В school и eterhack это уже 2 патча:

commit bfba4c56123fba17f512b49694c8b1fa291211bf
Author: Ilya Shpigor <shpigor@etersoft.ru>
Date:   Wed Mar 31 14:35:58 2010 +0400

    gdi32: Fix patch for scalable text faces (eterbug #5226 #4409)

commit 35d4410359246de7a79dfa45bdb217a8681269d1
Author: Ilya Shpigor <shpigor@etersoft.ru>
Date:   Tue Nov 10 14:25:52 2009 +0300

    gdi32: Use the logical device coordinates for scalable text faces (eterbug #4409)

Откатил патчи. Теперь появилась проблема из баги 5226. Багу 4409 пока не проверял
Comment 15 Виталий Перов 2011-08-03 18:17:27 MSK
Света, не могла бы ты проверить все эти проблемы в eter-1.0.12?

Нужно проверить:
1) Инсталляторы из текущей баги (думаю, что достаточно одного)
2) Размер шрифта в поле поиска 1с77 (бага 5226)
3) Проблема в клиенте Балтийского банка (бага 4409)
Comment 16 Svetlana Zhukova 2011-08-12 13:24:15 MSK
1. MS Office из 
  /var/ftp/pvt/Windows/MS/MSO/MSOXPPro
  WINE@Etersoft 1.0 SQL 1.0.12-eter12/22  и в 1.0.11 - одинаковый размер окна.

при установке Компаса тоже не вижу разницы в размере окон.

Что касается BBClient - на eterhack сегодня проверила -нормально, а на 1.0.12 - шрифт больше похож на крокозябру.
В exel- внизу на листах, 1с8.1, 1с77 - в окне поиска шрифт нормальный.
Comment 17 Svetlana Zhukova 2011-08-12 13:30:58 MSK
пока закрою.