การปรับขนาดแคนวาสของตัวแก้ไข

ฉันกำลังเล่นกับแร็กเก็ตและวางแผนที่จะใช้โปรแกรมแก้ไขโหนด (หากมีอยู่แล้ว โปรดแจ้งให้เราทราบ!) กระดานดำหลักคือ% แปะบอร์ดในแคนวาสของตัวแก้ไข และตอนนี้ฉันกำลังจัดการกับฟังก์ชันการซูม โดยพื้นฐานแล้ว ฉันสามารถกำหนดขนาดของบริบทการวาดภาพเพื่อปรับขนาดได้:

;; 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) เพื่อปรับขนาดการแสดงผล จากนั้นฉันใช้ pasteboard%'s interactive-adjust-mouse, interactive-adjust-move และ interactive-adjust-resize เพื่อแทนที่พิกัด กรอบงาน Racket GUI ไม่มีวิธีทั่วไปในการจัดการเหตุการณ์ในกระบวนการจัดส่ง แต่ pasteboard% ให้วิธีการเหล่านั้นสำหรับการเปลี่ยนพิกัดของเหตุการณ์ และดูเหมือนว่าจะได้ผล

ในทางกลับกัน สำหรับการแก้ไขเหตุการณ์ตามอำเภอใจ ฉันพบว่ามีประโยชน์ที่จะแทนที่เมธอด on-event ของวิดเจ็ตและเรียก (super on-event modified-events) หรือส่งไปยังลูกๆ ด้วยตนเอง หากคุณต้องการเปลี่ยนลำดับการจัดส่ง ฯลฯ

person BlueFlo0d    schedule 22.03.2019