Menskalakan kanvas editor

Saya sedang bermain-main dengan raket dan berencana mengimplementasikan editor node (jika sudah ada, TOLONG beri tahu saya!). Papan tulis utama adalah papan tempel% di kanvas editor% dan sekarang saya berurusan dengan fungsi pembesaran. Pada dasarnya saya dapat mengatur skala konteks gambar untuk memperbesarnya:

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

Namun ini hanya menskalakan panggilan gambar, namun koordinat kejadian tidak berubah sehingga tidak dikirim dengan benar.

Saya mencari beberapa metode untuk mengubah koordinat semua peristiwa dalam proses pengiriman tetapi saat ini belum menemukan sesuatu yang berguna. Apakah ada cara untuk menempatkan "transformator" dalam proses pengiriman? Atau adakah solusi lain untuk menskalakan keseluruhan kanvas dan memastikan pengiriman acara benar?


person BlueFlo0d    schedule 28.02.2019    source sumber
comment
Anda dapat menggunakan (send dc get-transformation) untuk mendapatkan transformasi yang Anda perlukan. (tidak sesuai dengan yang Anda minta - tetapi mungkin bisa membantu)   -  person soegaard    schedule 28.02.2019


Jawaban (1)


Setelah bermain-main, saya rasa saya hampir menemukan solusinya (hanya solusi terbaik saya saat ini).

Saya menggunakan (send (send c get-dc) set-scale 2 2) untuk menyesuaikan skala tampilan. Lalu saya menggunakan pasteboard%'s interactive-adjust-mouse, interactive-adjust-move, dan interactive-adjust-resize untuk mengganti koordinat. Kerangka kerja Racket GUI tidak menyediakan cara umum untuk memanipulasi peristiwa dalam proses pengiriman, tetapi pasteboard% menyediakan metode tersebut untuk mengubah koordinat peristiwa, dan tampaknya berhasil.

Di sisi lain, untuk modifikasi sewenang-wenang pada acara, menurut saya berguna untuk mengganti metode on-event widget dan memanggil (super on-event modified-events) atau mengirimkannya secara manual ke anak-anak jika Anda ingin mengubah urutan pengiriman, dll.

person BlueFlo0d    schedule 22.03.2019