Масштабирование холста редактора

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

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

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

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


person BlueFlo0d    schedule 28.02.2019    source источник
comment
Вы можете использовать (send dc get-transformation), чтобы получить необходимое преобразование. (не совсем то, о чем вы просите, но это может помочь)   -  person soegaard    schedule 28.02.2019


Ответы (1)


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

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

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

person BlueFlo0d    schedule 22.03.2019