Skip to content

Instantly share code, notes, and snippets.

@kurinoku
Created November 22, 2020 21:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kurinoku/4f67944e76d6e4cbba1d9d1b3d3868d0 to your computer and use it in GitHub Desktop.
Save kurinoku/4f67944e76d6e4cbba1d9d1b3d3868d0 to your computer and use it in GitHub Desktop.
#lang racket/gui
(define (maybe-set-box! b v)
(when b
(set-box! b v)))
(define rect-snip-class%
(class snip-class%
(inherit set-classname)
(super-new)
(set-classname "rect-snip-class%")
))
(define rect-snip-class (new rect-snip-class%))
(define rect-snip%
(class snip%
(inherit set-snipclass
set-flags get-flags
get-admin)
(init w h)
(super-new)
(set-snipclass rect-snip-class)
(define height h)
(define width w)
(define/override (get-extent dc x y [w #f] [h #f] . _)
(maybe-set-box! w width)
(maybe-set-box! h height))
(define/override (draw dc x y left top right bottom . _)
(send dc draw-rectangle x y width height))
))
(define pb
(new
(class pasteboard%
(super-new)
(inherit insert)
(define start-pos #f)
(define/override (on-default-event event)
(super on-default-event event)
(define x (send event get-x))
(define y (send event get-y))
(cond
[(and (equal? (send event get-event-type) 'left-down)
(send event button-down? 'left)
(not (send event dragging?)))
(set! start-pos (cons x y))]
[(and (equal? (send event get-event-type) 'left-up)
start-pos)
(let ([dx (- (car start-pos) x)]
[dy (- (cdr start-pos) y)])
(define-values (nx nw)
(if (> dx 0)
(values x dx)
(values (+ x dx) (abs dx))))
(define-values (ny nh)
(if (> dy 0)
(values y dy)
(values (+ y dy) (abs dy))))
(define sn (new rect-snip%
[w nw]
[h nh]))
(insert sn nx ny)
(set! start-pos #f))]))
)))
(define f-main (new frame% [label "wireframe"]))
(define cnv-main (new editor-canvas%
[editor pb]
[parent f-main]))
(send f-main show #t)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment