Hi Alex, thanks for your reply. Are you on Slack?

On Tue, Nov 24, 2020, 00:21 Alex Harsanyi <[email protected]> wrote:

> The snip selection and resize is handled by the pasteboard
> on-default-event, and it looks like your code also handles events,
> resulting in duplicate handling.   There is no clear solution to this, as
> the system does not know if you want to select snips or draw rectangles.
>  However, you could use Ctrl + drag to draw the rectangles.  To do that,
> move your own code into a new method, say "my-on-default-event" and call
> that method for mouse events which have the control key set.
>
>      (define/override (on-default-event event)
>        (if (send event get-control-down)
>            (on-default-event-1 event)
>            (super on-default-event event)))
>
> The disadvantage now, is that there is no visual feedback when you use
> Ctrl + drag (previously, the selection rectangle was drawn).  To draw an
> intermediate selection rectangle, you can track mouse motion events in your
> "my-on-default-event" and keep the intermediate rectangle, same as you do
> for "start-pos", than override the "on-paint" method of the pasteboard to
> draw the intermediate rectangle.  Note that you cannot call on-paint
> directly from on-default-event, and the pasteboard does not know it needs
> to redraw itself unless you call "refresh".
>
> Alex.
>
> On Monday, November 23, 2020 at 7:49:00 PM UTC+8 [email protected]
> wrote:
>
>>
>>
>>
>>
>> *please, disregard the previous email, there was a little bug. this is
>> the correct code. the issue still exists. *
>>
>> 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. How do i
>> fix it ?
>>
>> ```
>> #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)
>> ```
>>
>> --
> 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/c1da5a4e-730f-43ec-8d53-c6e223225b0an%40googlegroups.com
> <https://groups.google.com/d/msgid/racket-users/c1da5a4e-730f-43ec-8d53-c6e223225b0an%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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/CAGcmBVWVW0qA_xcTFOLTPgTc4i_BKzjouFZSmMQVLKhG%2B9X4BQ%40mail.gmail.com.

Reply via email to