OberonCore
https://forum.oberoncore.ru/

#031 масштабирование Scroll+Ctrl и странности рисования букв
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6586
Страница 1 из 1

Автор:  Иван Денисов [ Воскресенье, 15 Март, 2020 18:05 ]
Заголовок сообщения:  #031 масштабирование Scroll+Ctrl и странности рисования букв

В кросс-платформенной сборке пока только в версии для Windows внедрено нашим боевым товарищем Adimetrius такое достаточно полезное для современных мониторов и слабовидящих людей свойство документов как масштабирование колесом мыши при зажатой клавише Ctrl.

Я уже успел оценить это. Очень удобно при разработке в Wine или Windows, когда открываешь документы с исходным кодом и шрифт там мелковат. По умолчанию он 9 пунктов для исходников ББ. Также это полезно для отладки масштабирования Windows. Сумел отловить многие недочёты масштабирования в подсистемах Tabs и Dia.

Что мешает для Linux сделать это. Скопировал отсюда viewtopic.php?f=24&t=5253&p=111420#p111223
adimetrius писал(а):
Zoom для Linux спотыкается о две вещи:

1) хост-контролы. Они, канешн, не уважают f.unit, вообще не знают о нем. Поэтому ЗумЛин ожидает полной "герметизации": если все будет отрисовываться в ББ, то с зумом нет проблем.

2) Еще есть загвоздка со шрифтами из Pango. ВинББ получает от Винапи таблицу ширин и потом ею пользуется - ессно, учитывая f.unit. В ЛинББ эту часть кода закомментили, а расчет ширин поручили полностью Pango. Он про f.unit Не знает.

Обе проблемы разрешимы, и, как и все, требуют воли и ресурсов.


Хост контролы уже моими усилями убраны. Получается только проблема со шрифтами.

А вот про шрифты я хочу сказать, что и в Windows версии наблюдается какая-то пляска букв во время набора. И это сильно отвлекает.
Почему такое возможно? Почему при изменённом f.unit уже набранные буквы до положения каретки могут шевелиться, когда набираешь текст?

Автор:  adimetrius [ Воскресенье, 15 Март, 2020 19:24 ]
Заголовок сообщения:  Re: #031 масштабирование скроллером с Ctrl (Zoom)

Иван Денисов писал(а):
А вот про шрифты я хочу сказать, что и в Windows версии наблюдается какая-то пляска букв во время набора. И это сильно отвлекает.
Почему такое возможно? Почему при изменённом f.unit уже набранные буквы до положения каретки могут шевелиться, когда набираешь текст?


Расчет и отрисовка строки обеспечиваются процедурами TextViews.DrawLine и TextSetters.GetLine. Они прекрасны, длинны, и вот в них-то где-то что-то и напутано. Т.е. связано это не с f.unit.

Между прочим, когда в строке одно слово, и оно не влезает в ширину зрителя, эти процедуры реализуют "атипичное" поведение: просто обрезают "не влезшую" строку. Мол, не влезает? Ваши проблемы! Я у себя это поправил, привел к "типичному": невлезающее слово бьется на части и выводится на несколько строк, и видно целиком. См прил.

Исправляя, я то ли добавил, то ли выявил еще один глюк: на некоторых строках > 64символов положение каретки слегка не совпадает с положением букаф. Но он редко вылезает, поэтому пока терплю.

Вложения:
Комментарий к файлу: Атипичное
Снимок экрана от 2020-03-15 19-08-56.png
Снимок экрана от 2020-03-15 19-08-56.png [ 11.41 КБ | Просмотров: 5702 ]
Комментарий к файлу: Типичное (поправленное)
Снимок экрана от 2020-03-15 19-09-47.png
Снимок экрана от 2020-03-15 19-09-47.png [ 20.47 КБ | Просмотров: 5700 ]

Автор:  Иван Денисов [ Среда, 02 Декабрь, 2020 19:42 ]
Заголовок сообщения:  Re: #031 масштабирование скроллером с Ctrl (Zoom)

Сделал гифку
Вложение:
test.gif
test.gif [ 90.55 КБ | Просмотров: 4208 ]

почему буквы при зуме пляшут?

Сборка для тестирования
https://blackbox.oberon.org/unstable/de ... a1.048.zip

Выскажите догадки, пожалуйста.

Автор:  adimetrius [ Суббота, 05 Декабрь, 2020 00:49 ]
Заголовок сообщения:  Re: #031 масштабирование скроллером с Ctrl (Zoom)

Вот еще полюбуйтесь, что в Линуксе творится:

Изображение
Здесь на границе цвета TextSetters.Reader.Read разрывает строку, возвращает ее в TextViews.View.DrawLine, а та вызывает Views.Frame.DrawString. Следовательно, когда цвет один, и разрыва нет - хост-система рисует сплошную строку, а когда разрыв есть - сначала рассчитывается координата, с которой начинается h. И потом с этой координаты рисует Views.Frame.DrawString.

Вероятно, чудо-панга производит кернинг пар, из-за чего координаты не сходятся: при включенном кернинге, напр, ширина строки "VA." не равна сумме ширин строк "V" и "A".

Изображение
А здесь не иначе как сочетание f f заменяется на лигатуру ff (один кодупойнт юникода), опять же пангой; меняется не только ширина, но и рисунок букв.

Но как объяснить ваш рисунок - ума не приложу. Я проверил версию, что TextSetters.Reader.Read возвращает русские литеры по одной (тогда можно было бы опять на кернинг свалить) - оказалось нет, слитно возвращает.

Автор:  Trurl [ Воскресенье, 06 Декабрь, 2020 21:25 ]
Заголовок сообщения:  Re: #031 масштабирование скроллером с Ctrl (Zoom)

Иван Денисов писал(а):
почему буквы при зуме пляшут?

Выключите "Use true type metrics" и больше не включайте.

Автор:  Иван Денисов [ Понедельник, 07 Декабрь, 2020 04:11 ]
Заголовок сообщения:  Re: #031 масштабирование скроллером с Ctrl (Zoom)

Trurl писал(а):
Иван Денисов писал(а):
почему буквы при зуме пляшут?

Выключите "Use true type metrics" и больше не включайте.

Не помогает, к сожалению.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/