Масштабирование холста редактора - PullRequest
0 голосов
/ 28 февраля 2019

Я играю с ракеткой и планирую внедрить редактор узлов (если уже есть один, ПОЖАЛУЙСТА, дайте мне знать!).Основная доска - это монтажная панель% в редакторе canvas%, и теперь я имею дело с функцией масштабирования.В принципе, я могу установить масштаб контекста рисования, чтобы масштабировать его:

;; c is my editor-canvas% (send (send c get-dc) set-scale 2 2)

Однако это только масштабирует вызовы рисования, но координаты события не изменяются, поэтому они не отправляются правильно.

Я ищу какой-то метод для преобразования координат всех событий в процессе диспетчеризации, но в настоящее время не нашел ничего полезного.Есть ли способ разместить «трансформатор» в процессе отправки?Или есть какое-то другое решение для масштабирования всего холста и получения правильной отправки события?

1 Ответ

0 голосов
/ 22 марта 2019

После игры, я думаю, я почти нашел решение (просто мое лучшее на данный момент решение).

Я использую (send (send c get-dc) set-scale 2 2) для настройки масштаба дисплея.Затем я использую pasteboard% interactive-adjust-mouse, interactive-adjust-move и interactive-adjust-resize для переопределения координат.Инфраструктура Racket GUI не предоставляет общего способа манипулирования событиями в процессе диспетчеризации, но pasteboard% предоставляет такой метод для изменения координаты событий, и, похоже, он работает.

С другой стороны, для произвольной модификации событий я считаю полезным переопределить метод on-event виджетов и вызвать (super on-event modified-events) или вручную отправить их дочерним элементам, если вы хотите изменить порядок диспетчеризации,и т.д.

...