please disregard the previous code. this si the correct code

```
#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)
```

On Mon, Nov 23, 2020 at 9:43 AM KOKOU AFIDEGNON <[email protected]>
wrote:

> I can click to drag in order to draw a rectangle, but when i drag the
> created rectangle (for position adjustment), a new rectangle is created
> from the said position. How do i constrain/fix the issue? i have been
> trying to use key-combination to draw a new rectangle on demand. can you
> please give a hint?
> ```
> #lang racket
> (require racket/gui racket/draw pict)
>
>
>
>
> (define my-pasteboard (class* pasteboard% ()
>                         (init)
>                         (super-new)
>                         (define/override (on-default-event evt)
>      (new-rect evt))))
>
>
>
> (define board (new pasteboard%))
> (define toplevel (new frame%
>                       [label "My board"]
>                       [width 500]
>                       [height 500]))
>
> (define canvas (new editor-canvas%
>                     [parent toplevel]
>                     [editor board]))
> (send toplevel show #t)
>
> (define my-snip-class
>   (new (class snip-class%
>          (super-new)
>          (send this set-classname "my-snip"))))
>
> (send (get-the-snip-class-list) add my-snip-class)
>
> (define rectangle-snip%
>   (class snip%
>     (init-field w h)
>     (super-new)
>     (send this set-snipclass my-snip-class)
>     (define/override (get-extent dc x y width height . other)
>       (when width (set-box! width w))
>       (when height (set-box! height h)))
>     (define/override (draw dc x y . other)
>       (draw-pict (rectangle w h) dc x y))))
>
>
> (define (new-rect) (send my-pasteboard insert (new rectangle-snip% [w 30]
> [h 80]) 100 300))
> ```
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/CAGcmBVWuESZp_C800ANz17biq1mnsWjJobHM15AHtCkjrc59Ag%40mail.gmail.com.

Reply via email to