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символов положение каретки слегка не совпадает с положением букаф. Но он редко вылезает, поэтому пока терплю.
|
Автор: | Иван Денисов [ Среда, 02 Декабрь, 2020 19:42 ] |
Заголовок сообщения: | Re: #031 масштабирование скроллером с Ctrl (Zoom) |
Сделал гифку Вложение: почему буквы при зуме пляшут? Сборка для тестирования 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/ |