OberonCore https://forum.oberoncore.ru/ |
|
Позиционирование и размеры документа StdDocuments https://forum.oberoncore.ru/viewtopic.php?f=134&t=6937 |
Страница 1 из 1 |
Автор: | arisu [ Пятница, 12 Май, 2023 18:01 ] |
Заголовок сообщения: | Позиционирование и размеры документа StdDocuments |
ещё мелкобаг: вчисления размера секций в StdDocuments не учитывает скроллбары. чтобы увидеть, почему это нужно, надо поставить в `StdDocuments.InitDefaults()` — `p.sbSide := left;` (т.е. скроллбары слева). и тут же внизу возникает горизонтальный скроллбар, который делает ничего. чтобы починить, надо в `PollSection` сделать так: к переменным добавить: Код: sbsize: INTEGER; m: StdModel; и заменить старый код: Код: IF msg.vertical THEN ps := h (* f.b - f.t *); vs := b + t; p := -v.y ELSE ps := w (* f.r - f.l *) ; vs := r + l; p := -v.x END; на новый: Код: IF v.model IS StdModel THEN m := v.model(AS StdModel); IF m.unit > 0 THEN sbsize := m.param.sbThickness * (Ports.point - Ports.point MOD m.unit) ELSE sbsize := 0 END ELSE m := NIL; sbsize := 0 END; IF msg.vertical THEN ps := h (*f.b - f.t*); vs := b + t; p := -v.y; IF (m # NIL) & ~m.showH THEN sbsize := 0 END ELSE ps := w (*f.r - f.l*); vs := r + l; p := -v.x; IF (m # NIL) & ~m.showV THEN sbsize := 0 END END; vs := MAX(0, vs - sbsize); каюсь: очень люблю вертикальные скроллбары слева. попробовал — а оно глючит! с фиксом — больше не глючит. я не очень уверен, что всё правильно, но вроде бы да. |
Автор: | Иван Денисов [ Пятница, 12 Май, 2023 18:43 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Решил попробовать. Но почему-то если менять размеры документа на разные опции, то документ всё время сдвигается вправо. |
Автор: | arisu [ Пятница, 12 Май, 2023 19:13 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
ага, вот я боялся, что что-то сломается. похоже, править надо не там, а в UpdateScrollbars. сейчас джинн снова думать будет. |
Автор: | arisu [ Пятница, 12 Май, 2023 19:16 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
а, нет. он сдвигается даже без моих правок. ладно, с наскоку не вышло, скроллбар слева глючит в принципе. возможно, Антон Александрович может что-то посоветовать — это, вроде бы, по большей части он писал — и StdDocuments, и скроллбары? |
Автор: | Иван Денисов [ Пятница, 12 Май, 2023 19:26 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): а, нет. он сдвигается даже без моих правок. ладно, с наскоку не вышло, скроллбар слева глючит в принципе. возможно, Антон Александрович может что-то посоветовать — это, вроде бы, по большей части он писал — и StdDocuments, и скроллбары? Да, верно. Я еще проверил ветку `blackbox20dev20dirty` там тоже двигается документ. Сегодня что-то я уже должен другим заняться. Но может на выходных поизучаю скроллы. Там ещё есть проблема сейчас в `blackbox20` что бегунок на полосе прокрутки раздваивается, если окно отсоединить. Не знаю, видели ли вы такое, и исправляли ли в вашей сборке? |
Автор: | arisu [ Пятница, 12 Май, 2023 19:49 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Иван Денисов писал(а): Там ещё есть проблема сейчас в `blackbox20` что бегунок на полосе прокрутки раздваивается, если окно отсоединить. Не знаю, видели ли вы такое, и исправляли ли в вашей сборке? нет, не видел, а то отрепортил бы. я, в принципе, никогда окна не отсоединяю, потому и не замечал.p.s.: ага, проверил. если изменить размер окна потом — то всё становится нормально. вообще загадка, гыг. как будто клип-регион где-то глючит. |
Автор: | arisu [ Пятница, 12 Май, 2023 21:45 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
в общем, там забавно с поехавшими документами. внутри документа хранятся координаты модельки документа без учёта обрамления и скроллбаров. при изменении размера документа делается так: 1. doc.PollRect 2. doc.SetRect и тут штука такая: `PollRect()` возвращает прямоугольник уже с учётом левого отступа для скроллбара. а потом точно те же координаты передаются в `SetRect()`, и к ним пришпандоривается ещё один отступ для скроллбара. пока этот отступ нулевой — всё в порядке. но как только он не нулевой… в общем, нарушена симметричность операций `PollRect()` и `SetRect()` для документа. проблема в том, что `PollRect()` — возможно, я не очень понимаю пока — должен возвращать реальный прямоугольник для документа, без бордюрчиков и прочего. а `SetRect()` совершенно не в курсе, сочинили ли ему координаты, или просто передали то, что раньше вернул `PollRect()`. поэтому восстановить симметричность сложновато. возвращать неправленое не вариант: тогда текст игнорирует левый скроллбар. |
Автор: | arisu [ Пятница, 12 Май, 2023 22:10 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
в общем, экспериментальный вариант фикса такой (все изменения в StdDocuments): 1. заменяем PollRect на: Код: PROCEDURE (d: Document) PollRect* (OUT l, t, r, b: INTEGER); BEGIN DoRecalc(d, 0, ~forceRecalc); l := (*d.clipper.l +*) d.model.l; t := (*d.clipper.t +*) d.model.t; r := (*d.clipper.l +*) d.model.r; b := (*d.clipper.t +*) d.model.b END END PollRect; 2. заменяем GetRect на: Код: PROCEDURE (d: Document) GetRect* (f_: Views.Frame; view: Views.View; OUT l, t, r, b: INTEGER); VAR c: Models.Context; BEGIN ASSERT(view # NIL, 20); c := view.context; ASSERT(c # NIL, 21); IF view = d.model.view THEN d.PollRect(l, t, r, b); INC(l, d.clipper.l); INC(t, d.clipper.t); INC(r, d.clipper.l); INC(b, d.clipper.t); INC(l, d.x); INC(t, d.y); INC(r, d.x); INC(b, d.y) ELSE HALT(126) END END GetRect; таким образом сохраняем симметричность операций, и возвращаем правильный прямоугольник для рисования. с первого взгляда это работает, что может нечаянно слететь — не знаю. ну, для случая «скроллбар справа» не поменялось вообще ничего, так что как работало — так и будет работать. скроллбар слева вроде бы тоже починился. и фикс в `PollSection()` тоже нужен, да. |
Автор: | Иван Денисов [ Пятница, 12 Май, 2023 23:38 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
Супер. Фикс похоже работает, документ больше не двигается при изменении параметра размеров документа. Полоса прокрутки слева выглядит весьма эстетично, если шириной 8 поставить. Вложение: Ещё хочу документы выделять не фоном потом, а рамочкой. Надо будет успеть до релиза доделать. |
Автор: | arisu [ Пятница, 12 Май, 2023 23:46 ] | ||
Заголовок сообщения: | Re: BlackBox 2.0 | ||
я себе вообще вот такую сделал.
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |