OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 11:17

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




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Суббота, 13 Май, 2023 21:39 

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

кстати, скроллбары в mainline работают немного неверно, если их мышью таскать. попробуйте: он очень быстро уходит в десинк, если схватить за ползунок и тащить его вниз. если хотите — можете взять у меня в LC StdScrollbars и адаптировать вычисления. там, в принципе, просто можно взять весь код кроме рисовалки (а рисовалку старую засунуть).

p.s.: не будете против, если я в StdWindows ещё фильтры засуну, чтобы можно было потом перетащить код жестов (ну, то, что на видео в теме LC) на mainline без особых напрягов? это просто список объектов-фильтров, по умолчанию он пустой, и делает ничего.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
я, по ходу, совсем переделал StdScrollbars, фирменная вещь, надо брать. потому что там скроллинг вправо-влево вообще был сломан (любой скроллинг, где partSize ненулевой, тащемта). проверить просто: открываем любую форму как документ. тащим таб в правый трек (чтобы появился скроллбар). пытаемся таскать knob. страшна.


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

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
и заодно предлагаю добавить в Ports процедуры для преобразований HSV ↔ RGB. они маленькие, но очень полезные для, например, darken/brighten. о! или вообще сделать модуль Colors, куда и цветов больше докинуть, и всякое для работы с цветами. в 2023-м манипулировать цветами надо намного чаще, чем в 90-х, а модуль можно сделать полностью герметичным (за исключением импорта [S]Math). сейчас у себя так и сделаю, наверное.


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
я, по ходу, совсем переделал StdScrollbars, фирменная вещь, надо брать. потому что там скроллинг вправо-влево вообще был сломан (любой скроллинг, где partSize ненулевой, тащемта). проверить просто: открываем любую форму как документ. тащим таб в правый трек (чтобы появился скроллбар). пытаемся таскать knob. страшна.

Просто из вашей сборки можно попробовать перенести, или там существенные переделки под ветку blackbox20 нужны?


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

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

p.s.: а, я ещё поле `isV` переименовал в `vertical`. надо переименовать обратно (или поправить StdDocuments).


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
Иван Денисов писал(а):
Просто из вашей сборки можно попробовать перенести, или там существенные переделки под ветку blackbox20 нужны?
только выкинуть мою рисовалку и аккуратно воткнуть старую. чуть-чуть изменений в том, что `Recalc()` кладёт вычисленые параметры в запись, а не возвращает, рисовалку надо будет с учётом этого подрихтовать. остальное должно работать, там чисто немного рефакторинга, да математика другая.

p.s.: а, я ещё поле `isV` переименовал в `vertical`. надо переименовать обратно (или поправить StdDocuments).

хорошо, я попробую, скролы надо починить


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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Перенёс ваш код для StdScrollbars, и вот заметил такой момент, что ни в старом варианте, ни в новом до конца вид не прокручивается, там должно до красной полоски и ещё поле документа в пять пикселей примерно, а прокручивается только до синей линии. Сможете помочь это исправить?

скриншот для некоторого промежуточного варианта переноса, когда дизайн ещё ваш был, но так понятнее получилось показать даже


Вложения:
notSide.png
notSide.png [ 9.22 КБ | Просмотров: 5949 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Пятница, 19 Май, 2023 23:58 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Суббота, 20 Май, 2023 12:34 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
всё, моя починить. обновления и в StdDocuments (неправильные вычисления границ), и в StdScrollbars (неправильные вычисления, неправильная отрисовка при таскании кноба).

простите, на mainline не адаптировал (сейчас на это силов и временов нет), но там не так много изменений, можно просто дифом глянуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 22 Май, 2023 20:40 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
всё, моя починить. обновления и в StdDocuments (неправильные вычисления границ), и в StdScrollbars (неправильные вычисления, неправильная отрисовка при таскании кноба).

простите, на mainline не адаптировал (сейчас на это силов и временов нет), но там не так много изменений, можно просто дифом глянуть.

Спасибо, внёс правки. Стало лучше!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 22 Май, 2023 20:52 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 22 Май, 2023 20:59 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 22 Май, 2023 23:13 

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

блин, надо себе тудушник уже нормальный сделать. есть же вот BBCB, ну! ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Суббота, 27 Май, 2023 22:02 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Заметил ещё такой недочёт появился, что полоска стала появляться не справа документа, а бывает сдвинута от края.
Самый простой вариант воспроизвести ошибку — F1, F2.
Вложение:
scrollbarposition.png
scrollbarposition.png [ 75.8 КБ | Просмотров: 5535 ]


Arusi, у вас также воспроизводится ошибка, или это я что-то не так может перенёс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Суббота, 27 Май, 2023 22:41 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
а, там всё интересней: если менять размеры треков, то видно, что она дёргается, как будто где-то потеряли обработчик изменения размеров (у меня тоже). я подозреваю примерно, в чём дело. спасибо, постараюсь посмотреть ASAP и сказать, что фиксить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 29 Май, 2023 02:01 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
в общем, доклада́ю. бага два. баг нумеро уно в отцеплении окон: там надо починить DoOpen:
заменить
Код:
   IF (d # NIL) & (d.context # NIL) THEN view := Views.CopyOf(view, Views.shallow); d := NIL END

на:
Код:
   IF (d # NIL) & (d.context # NIL) THEN
      IF FALSE THEN
         view := Views.CopyOf(view, Views.shallow); d := NIL
      ELSE   (* need to do it this way, otherwise BAD THINGS HAPPENS! *)
         d := DuplicateAs(d, Documents.dir);
         view := d.ThisView()
      END
   END;

`DuplicateAs()` забрать из `StdWindows`, например. это чинит скроллбары (в том числе баг с «двойным» скроллбаром).

баг нумеро до: надо в `StdDocuments.Restore()` заменить:
Код:
   IF m.unit = 0 THEN DoRecalc(d, f.unit, forceRecalc) END;

на:
Код:
VAR
   …
   dw, dh: INTEGER;

   (* k8: we need to recalc if document size was changed. fixes bug with scrollbars in subwindows. *)
   d.context.GetSize(^dw, ^dh);
   IF (m.unit = 0) OR (d.prevW # dw) OR (d.prevH # dh) THEN DoRecalc(d, f.unit, forceRecalc) END;
   d.prevW := dw; d.prevH := dh;

и добавить поля `prevW, prevH: INTEGER` в запись документа.

и мелкобаг нумеро тре, бонусный: в StdScrollbars, в процедуте `TrackShaft()` в конце заменить:
Код:
      f.Input(x, y, mod, isDown)
   UNTIL ~isDown

на:
Код:
      IF f.rider # NIL THEN f.Input(x, y, mod, isDown) END
   UNTIL (f.rider = NIL) OR ~isDown


rationale: в StdDocuments раньше всё это дело охранял просто `m.unit`, но и то не очень надёжно. теперь мы во-первых, создаём фрэймы документа ещё до того, как отрисуется его окно (а потом окно рисуется, и размеры могут опять поменяться; а один restore в невидимую область уже был, `m.unit` установлена); а во-вторых, при изменении размеров треков юнит каков был — таков и есть. а размеры поменялись. надо пересчитать скроллбары и прочее — а никто этого не делает. точнее, делают, но очень потом, не вовремя, и не всегда.

потому надо помнить размеры документа с прошлой отрисовки, и если они поменялись — то рихтовать всё заново.

в StdTiles надо создавать клон документа с правильными размерами примерно по той же причине. мне лень разбираться, честно говоря, что где триггерится при создании документа с размерами undefined вместо правильных, но оно вот так. а, и опции контроллера трансферить, они отвечают за то, чтобы горизонтального скроллбара не было.

от так уот.

p.s.: там ещё тонкости механики с subwindows, в которые я здесь вникать не буду. скажу только, что они ответственны за то, что слово для леса и мира одно^w^w^w^w^w^w скроллбары для недубликатов более-менее работали при изменени размеров именно потому, что не-дубликаты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 29 Май, 2023 02:59 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
насчёт скролла только колесом в режиме маски: я не понял логики. штука в том, что `StdDocuments.Scroll()` делает вот такую проверку: `& (~msg.focus OR ~HasFocus(mv, g))`. в режиме маски у нас всегда есть элемент с фокусом, поэтому ой. я ни разу не понял, зачем оно там: это очень похоже на ошибку копипасты.

с колесом я делаю так: посылаю сообщение Scroll, если оно никем не обработано (т.е. msg.done = FALSE), то посылаю сообщение Wheel. дальше штатно.

в `Scroll()` же сообщение Scroll тоже посылается, но затем флаг done игнорируется, если есть фокус. я сильно подозреваю, что должно быть вот так: `IF (g = NIL) OR ~msg.done OR ~msg.focus OR ~HasFocus(mv, g) THEN` — т.е. везде `OR`, а не `&`. себе так и сделал, посмотрю, что сломается. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 29 Май, 2023 10:10 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Перенёс правки, как их понял, и теперь положение скролбаров явно лучше!

Заменил на OR тоже, стало обрабатываться перемещение ползунка. Пока не вижу, какие от этого могут быть проблемы.

При откреплении окна правда что-то всё равно неверно вычисляется, и появляется горизонтальная полоса прокрутки.

"Расщепление" лифта полосы прокрутки тоже пока имеет место быть.

Еще такой заметил недочёт, что полоса прокрутки рисуется много раз при прокрутке документа в сторону колесом.

Вложение:
vlcsnap-2023-05-29-14h07m31s965.png
vlcsnap-2023-05-29-14h07m31s965.png [ 181.79 КБ | Просмотров: 5402 ]


Может быть эти два недочёта как-то связаны с тем, как берётся квадрат для пиксель-буферизованного скролла?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 29 Май, 2023 10:15 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
это у вас баг с битмаповым скроллом и отцеплеными окнами — то, о чём я в теме LC писал. для отцепленых окон всегда используется битмаповый скролл, а он в принципе неработоспособен. замените в `Views.ScrollFrame()` строчку `bitmapScrolling := TRUE;` на `bitmapScrolling := FALSE;`. всё равно эта штука толком не работает — и не будет, пока я там всё полностью не перепишу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прокрутка документов и StdScrollbars
СообщениеДобавлено: Понедельник, 29 Май, 2023 10:25 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Иван Денисов писал(а):
Заменил на OR тоже, стало обрабатываться перемещение ползунка. Пока не вижу, какие от этого могут быть проблемы.

Заметил, что изменилось. Если Ctrl зажат, то раньше если курсор был над полем ввода в режиме маски, то шла прокрутка документа, а теперь не идёт.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2  След.

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


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

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


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

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