OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 01:24

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 12 Май, 2023 18:01 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ещё мелкобаг: вчисления размера секций в 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);

каюсь: очень люблю вертикальные скроллбары слева. попробовал — а оно глючит! с фиксом — больше не глючит. я не очень уверен, что всё правильно, но вроде бы да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 18:43 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Решил попробовать. Но почему-то если менять размеры документа на разные опции, то документ всё время сдвигается вправо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 19:13 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
ага, вот я боялся, что что-то сломается. похоже, править надо не там, а в UpdateScrollbars. сейчас джинн снова думать будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 19:16 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
а, нет. он сдвигается даже без моих правок. ладно, с наскоку не вышло, скроллбар слева глючит в принципе. возможно, Антон Александрович может что-то посоветовать — это, вроде бы, по большей части он писал — и StdDocuments, и скроллбары?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 19:26 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
а, нет. он сдвигается даже без моих правок. ладно, с наскоку не вышло, скроллбар слева глючит в принципе. возможно, Антон Александрович может что-то посоветовать — это, вроде бы, по большей части он писал — и StdDocuments, и скроллбары?

Да, верно. Я еще проверил ветку `blackbox20dev20dirty` там тоже двигается документ. Сегодня что-то я уже должен другим заняться. Но может на выходных поизучаю скроллы. Там ещё есть проблема сейчас в `blackbox20` что бегунок на полосе прокрутки раздваивается, если окно отсоединить. Не знаю, видели ли вы такое, и исправляли ли в вашей сборке?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 19:49 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
Иван Денисов писал(а):
Там ещё есть проблема сейчас в `blackbox20` что бегунок на полосе прокрутки раздваивается, если окно отсоединить. Не знаю, видели ли вы такое, и исправляли ли в вашей сборке?
нет, не видел, а то отрепортил бы. я, в принципе, никогда окна не отсоединяю, потому и не замечал.

p.s.: ага, проверил. если изменить размер окна потом — то всё становится нормально. вообще загадка, гыг. как будто клип-регион где-то глючит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 21:45 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
в общем, там забавно с поехавшими документами.

внутри документа хранятся координаты модельки документа без учёта обрамления и скроллбаров. при изменении размера документа делается так:
1. doc.PollRect
2. doc.SetRect

и тут штука такая: `PollRect()` возвращает прямоугольник уже с учётом левого отступа для скроллбара. а потом точно те же координаты передаются в `SetRect()`, и к ним пришпандоривается ещё один отступ для скроллбара.

пока этот отступ нулевой — всё в порядке. но как только он не нулевой… в общем, нарушена симметричность операций `PollRect()` и `SetRect()` для документа.

проблема в том, что `PollRect()` — возможно, я не очень понимаю пока — должен возвращать реальный прямоугольник для документа, без бордюрчиков и прочего. а `SetRect()` совершенно не в курсе, сочинили ли ему координаты, или просто передали то, что раньше вернул `PollRect()`. поэтому восстановить симметричность сложновато. возвращать неправленое не вариант: тогда текст игнорирует левый скроллбар.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 22:10 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
в общем, экспериментальный вариант фикса такой (все изменения в 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()` тоже нужен, да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 23:38 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Супер. Фикс похоже работает, документ больше не двигается при изменении параметра размеров документа.
Полоса прокрутки слева выглядит весьма эстетично, если шириной 8 поставить.
Вложение:
scrollLeft.png
scrollLeft.png [ 72.57 КБ | Просмотров: 5531 ]


Ещё хочу документы выделять не фоном потом, а рамочкой. Надо будет успеть до релиза доделать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Пятница, 12 Май, 2023 23:46 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
я себе вообще вот такую сделал.


Вложения:
2023_05_12_23_45_32_33x79.png
2023_05_12_23_45_32_33x79.png [ 490 байт | Просмотров: 5528 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB