OberonCore https://forum.oberoncore.ru/ |
|
Отклик на движение мыши - Controllers.TraceMsg https://forum.oberoncore.ru/viewtopic.php?f=134&t=6888 |
Страница 1 из 1 |
Автор: | adimetrius [ Воскресенье, 15 Январь, 2023 02:09 ] |
Заголовок сообщения: | Отклик на движение мыши - Controllers.TraceMsg |
Предлагаю отдельно обсудить. arisu писал(а): ещё не хватает штатных сообщений MouseEnter/MouseLeave, чтобы сделать нормальный hover. Предлагаю для этой задачи использовать сообщение Controllers.TraceMsg: Код: Controllers.TraceMsg* = RECORD (Controllers.CursorMessage) (* (.x, .y) is the obsolete mouse point; it may coincide with actual, i.e (x,y) ≍ (gx,gy), when mouse has just 'moved inside'. Mind that x.y is frame coordinates, while gx,gy is global *) modifiers*: SET; (*** IN *) cursor*: INTEGER; (** OUT; Iff pointer position defined (.gx # MAX(INTEGER)), .cursor is preset to -1; it may be assigned a desired cursor index. Doing so enables (but does not bind) the framework to *not* send another PollCursorMsg *) gx*, gy*: INTEGER; (** IN; global actual mouse coordinates (as opposed to .x, .y, the obsolete mouse coordinates). .gx = MAX(INTEGER) => new mouse point is undefined (i.e. mouse has moved out of host window) *) END; (** Sent along the point path (i.e. the path in frame forest of all frames that encompass a point) when mouse movement occurs. (x,y) is the obsolete mouse point in frame coords, while (gx,gy) is the actual mouse point in global coords, or MAX(INTEGER), if the latter is undefined *) Вместо "мышь вошла" "мышь вышла", которые потребовали бы определенных вычислений со стороны ФВ, я предлагаю одно, оч похожее на TrackMsg. Оно означает "мышь покинула точку x,y (отн. кадра) и вошла в точку gx,gy в глобальных координатах". Отправляется оно из StdWindows, и, будучи расширением CursorMessage, 1) обеспечивает приведение координат при передаче ко вложенным кадрам и 2) доставляется без усилий со стороны контейнера до оконечных видов. Виды, которые хотят изменять свое изображение, делают это штатным образом: обрабатывают TraceMsg в HandleCtrlMsg и, если необходимо, запрашивают отрисовку посредством Views.Update. Я опробовал его на простом крестике-закрывателе и на оконечном виде в приложении. Пока не опробовал, каково им пользоваться в контейнере, который хочет реагировать на прохождение мыши. |
Автор: | arisu [ Воскресенье, 15 Январь, 2023 02:13 ] |
Заголовок сообщения: | Re: Отклик на движение мыши - Controllers.TraceMsg |
я не очень понял: оно же будет доставляться только активному контролу, нет? или иначе его надо броадкастить (и тогда теряются автоматические преобразования координат)? в смысле — оно доставляется контролу «под мышкой», и получается, что все контролы должы быть в курсе реализации hover тогда. или я совсем неправильно вообразил? |
Автор: | adimetrius [ Воскресенье, 15 Январь, 2023 02:25 ] |
Заголовок сообщения: | Re: Отклик на движение мыши - Controllers.TraceMsg |
А что такое активный контрол ![]() Нет, оно отправляется, как все CursorMessages: вглубь по дереву кадров последовательно каждому кадру, который объемлет точку x,y. И, как принято в ББ, любой вид на маршруте сообщения может не пропустить его дальше, или преобразовать, и т.п. - т.е. сохраняется правило, что контейнер полностью управляет потоком сообщений к содержимому. И нет, это не ШВ-сообщение, ведь оно расширение Controllers.Message |
Автор: | arisu [ Воскресенье, 15 Январь, 2023 02:54 ] |
Заголовок сообщения: | Re: Отклик на движение мыши - Controllers.TraceMsg |
adimetrius писал(а): А что такое активный контрол ;) таковой неизвестен фреймворку. front/marked. ;-)adimetrius писал(а): Нет, оно отправляется, как все CursorMessages: вглубь по дереву кадров последовательно каждому кадру, который объемлет точку x,y. вот! то есть, MouseEnter получается, а MouseLeave — неа, потому что упс. то есть, до контрола, над которым сейчас мышь, среда сообщение спустит; а тот, над которым мышь была до этого — сиротинушка. а он же должен узнать, что мышь уехала, и надо перерисоваться без hover state. то есть, получается, что самый верхний фрэйм всё равно должен отслеживать состояние hover — и тогда почему уже не сделать MouseEnter/MouseLeave? или я опять запутался?
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |