Summary: | Неверный масштаб шрифта в банк-клиенте балтийского банка | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Vitaly Lipatov <lav> |
Component: | Шрифты | Assignee: | Илья Шпигорь <shpigor> |
Status: | CLOSED FIXED | QA Contact: | Andrey Vusik <night> |
Severity: | major | ||
Priority: | P3 | CC: | baraka, lav |
Version: | 1.0.12 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | 4409 | ||
Bug Blocks: | 5032, 7505 | ||
Attachments: |
Скриншот
Скриншот проблемы |
Description
Vitaly Lipatov
2010-03-10 18:19:55 MSK
В свежесозданной бутылке bank/baltbank-font то же самое. Возможно, проблема давняя. Илья увидел её и на 1.0.9. Так же неверный масштаб шрифта в IE. (In reply to comment #2) > Так же неверный масштаб шрифта в IE. > Замечено только в бутылке 1c81/1c81. wine --update не помогает. Плюс: бутылка office/mso/mso2003 -- excel.exe -- там внизу есть вкладки Лист1 Лист2 Лист3 -- у них шрифт великоват. (In reply to comment #4) > Плюс: бутылка office/mso/mso2003 -- excel.exe -- там внизу > есть вкладки Лист1 Лист2 Лист3 -- у них шрифт > великоват. В советах (открываются при первом запуске) свежеустановленной 1С шрифт больше в несколько раз. Предлагаю решать здесь только проблему выбора шрифта для печати в стандартном диалоге fontdlg. На все остальные проблемы в 1с и mso надо завести отдельные баги. Выложил патч. Проблема в стандартном диалоге выбора шрифта. Размер шрифта пересчитывается исходя из LOGPIXELSY устройства, для которого выбирается шрифт. Для монитора это значение равно 96, для принтера 600. Формула выглядит так: lpxx->lfHeight = - MulDiv( lpcf->iPointSize, GetDeviceCaps(hdc, LOGPIXELSY), 720); Судя по всему здесь считается logical size из point size. Очевидно что для принтера logical size считается неправльно (будет значительно больше). Проверил под windows - при выборе в этом диалоге одинакового размера шрифта в результате пересчета logical size для принтера и экрана одинаковые. Решение заключается в том, чтобы считать logical size для принтера по формуле: lpxx->lfHeight = - MulDiv( lpcf->iPointSize, GetDeviceCaps(hdc, LOGPIXELSY), 4500); Число 4500 подобрано из соображений, что 96/72 = 4/3 и 600/450=4/3. Лишний ноль в конце связан с тем, что выбранный размер зачем-то домножается на 10. В 1.0.12-eter4.1/3 воспроизводится. Или там ещё нет? Created attachment 1606 [details]
Скриншот
(In reply to comment #8) > В 1.0.12-eter4.1/3 воспроизводится. Или там ещё > нет? На 1.0.12-eter4.1/3 не удалось воспроизвести. См. скриншот. Бутылка bank/baltbank-new.
> Такой же эффект при предварительном
> просмотре.
>
Проблема в этой бутылке осталась.
Отправляемые документы -> Список отправляемых -> Предварительный просмотр
Created attachment 1607 [details]
Скриншот проблемы
Или это уже друга проблема? (In reply to comment #13) > Или это уже друга проблема? > Немного другая, но решать ее надо здесь. Переоткрываю багу. Выложил патч. Проблема связана с коммитом: 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) Там используется пересчет в логические координаты. В случае с принтером LOGPIXELSY устройства значительно больше чем у монитора. Поэтому считается неправильно. Решение заключается в добавлении проверки - является ли устройство монитором. Если нет - хак не работает. Плохое решение. Патч на багу #4409 сломал еще и #5346. Думаю лучше пересмотреть именно патч на #4409, т.к. слишком много чего портит. Выложил новое решение для баги #4409. Проблема должна решиться. См. http://bugs.etersoft.ru/show_bug.cgi?id=4409#c15 Принято. WINE@Etersoft 1.0.12 eter5/eter4 |