Skip to content

Commit b99817a

Browse files
committed
ref resize
1 parent 05587a4 commit b99817a

3 files changed

Lines changed: 55 additions & 42 deletions

File tree

packages/gui/draw.ss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
[font (widget-get-attrs widget 'font)]
6161
[font-size (widget-get-attrs widget 'font-size)]
6262
[lineh (widget-get-attrs widget 'line-height)]
63-
[header-height (widget-get-attrs widget 'head-height 30.0)])
63+
[header-height (widget-get-attr widget %top)])
6464
(graphic-draw-solid-quad gx gy (+ gx w) (+ gy header-height)
6565
31.0 31.0 31.0 0.9)
6666
(graphic-draw-solid-quad gx gy (+ gx w) (+ gy h) 31.0 31.0

packages/gui/duck.ss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,13 +956,13 @@
956956
(begin
957957
(widget-child-rect-event-mouse-motion widget type data)))
958958
(if (and (= type %event-mouse-button)
959-
(= (vector-ref data 1) 1))
959+
(= (vector-ref data 1) %event-button-down))
960960
(if (equal? #t (widget-get-attrs widget 'disable-active))
961961
'()
962962
(widget-active widget))
963963
#t)
964964
ret)))
965-
(widget-set-padding widget 10.0 10.0 40.0 40.0)
965+
(widget-set-padding widget 10.0 10.0 30.0 40.0)
966966
(widget-add widget)
967967
widget)))
968968

packages/gui/widget.ss

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
%margin-right %margin-bottom %draw %attrs
4242
%event-mouse-button %last-common-attr %event-key
4343
%event-motion %event-motion-out %event-active
44-
%event-deactive)
44+
%event-deactive %event-button-down %event-button-up)
4545
(import (scheme) (gui graphic) (gui stb) (gui utils))
4646
(define %draw 5)
4747
(define %x 0)
@@ -68,11 +68,15 @@
6868
(define %attrs 22)
6969
(define %events 23)
7070
(define %visible 24)
71-
(define %last-common-attr 25)
72-
(define %status-active 1)
71+
(define %focus 25)
72+
(define %focusable 26)
73+
(define %last-common-attr 27)
7374
(define %status-default 0)
75+
(define %status-active 1)
7476
(define %status-hover 2)
7577
(define %status-focus 4)
78+
(define %status-drag 8)
79+
(define %status-resize 16)
7680
(define window-width 0)
7781
(define window-height 0)
7882
(define %event-scroll 4)
@@ -83,8 +87,13 @@
8387
(define %event-resize 6)
8488
(define %event-layout 7)
8589
(define %event-motion-out 8)
90+
(define %event-motion-in 9)
91+
(define %event-focus-in 10)
92+
(define %event-focus-out 11)
8693
(define %event-active 9)
8794
(define %event-deactive 10)
95+
(define %event-button-down 1)
96+
(define %event-button-up 0)
8897
(define cursor-x 0)
8998
(define cursor-y 0)
9099
(define cursor-arrow 0)
@@ -297,7 +306,10 @@
297306
(= 0 (bitwise-xor (bitwise-and status flag) flag)))
298307
(define (widget-set-status widget status)
299308
(let ([s (widget-get-attr widget %status)])
300-
(widget-set-attr widget %status (bitwise-ior s status))))
309+
(widget-set-attr widget %status (set-status s status))))
310+
(define (widget-clear-status widget status)
311+
(let ([s (widget-get-attr widget %status)])
312+
(widget-set-attr widget %status (clear-status s status))))
301313
(define (widget-set-child-status widget status)
302314
(let loop ([child (vector-ref widget %child)])
303315
(if (pair? child)
@@ -312,12 +324,6 @@
312324
(widget-clear-status (car child) status)
313325
(widget-clear-child-status (car child) status)
314326
(loop (cdr child))))))
315-
(define (widget-clear-status widget status)
316-
(let ([s (widget-get-attr widget %status)])
317-
(widget-set-attr
318-
widget
319-
%status
320-
(bitwise-and s (bitwise-not status)))))
321327
(define (widget-status-is-set widget status)
322328
(let ([s (widget-get-attr widget %status)])
323329
(= 0 (bitwise-xor (bitwise-and s status) status))))
@@ -327,8 +333,7 @@
327333
(let loop ([child (vector-ref widget %child)])
328334
(if (pair? child)
329335
(begin
330-
(if (or (widget-status-is-set (car child) %status-active)
331-
(widget-status-is-set (car child) %status-focus))
336+
(if (or (widget-status-is-set (car child) %status-focus))
332337
(begin
333338
((vector-ref (car child) %event)
334339
(car child)
@@ -471,7 +476,6 @@
471476
(define (widget-new x y w h text)
472477
(let ([offset (vector 0 0)]
473478
[active 0]
474-
[resize-status 0]
475479
[resize-pos (vector 0 0)]
476480
[nw '()])
477481
(set! nw
@@ -490,30 +494,40 @@
490494
[yy (vector-ref widget %y)]
491495
[ww (vector-ref widget %w)]
492496
[hh (vector-ref widget %h)])
493-
(if (in-rect (+ xx ww -20.0) (+ yy hh -20.0) (+ xx ww)
494-
(+ yy hh) (vector-ref data 3) (vector-ref data 4))
495-
(begin (set! resize-status (vector-ref data 1))))
496-
(if (and (= (vector-ref data 1) 0) (= resize-status 1))
497-
(set! resize-status 0))
498-
(set! active (vector-ref data 1))
499-
(widget-set-attrs widget '%drag 1)))
500-
(if (and (= type %event-mouse-button)
501-
(= (vector-ref data 1) 1))
502-
(let ([mx (vector-ref data 3)] [my (vector-ref data 4)])
503-
(set! resize-pos (vector mx my))
504-
(set! offset
505-
(vector
506-
(- (vector-ref widget %x) mx)
507-
(- (vector-ref widget %y) my)))
508-
(widget-child-rect-event-mouse-button widget type data)
509-
(if (not (widget-get-attr widget %visible))
510-
(begin (widget-set-attrs widget '%drag 0)))))
497+
(if (= (vector-ref data 1) %event-button-down)
498+
(let ([mx (vector-ref data 3)]
499+
[my (vector-ref data 4)])
500+
(if (in-rect xx yy ww (widget-get-attr widget %top)
501+
mx my)
502+
(widget-set-status widget %status-drag))
503+
(if (or (in-rect (+ xx ww -20.0) (+ yy) 20.0 hh mx
504+
my)
505+
(in-rect (+ xx) (+ yy hh -20.0) ww 20.0 mx
506+
my))
507+
(begin
508+
(widget-set-status widget %status-resize)))
509+
(set! resize-pos (vector mx my))
510+
(set! offset
511+
(vector
512+
(- (vector-ref widget %x) mx)
513+
(- (vector-ref widget %y) my)))
514+
(widget-child-rect-event-mouse-button
515+
widget
516+
type
517+
data)
518+
(if (not (widget-get-attr widget %visible))
519+
(begin
520+
(widget-clear-status widget %status-drag)))))
521+
(if (= (vector-ref data 1) %event-button-up)
522+
(begin
523+
(widget-clear-status widget %status-drag)
524+
(widget-clear-status widget %status-resize)))))
511525
(if (= type %event-motion)
512526
(begin
513-
(if (and (= active %status-active)
514-
(= (widget-get-attrs widget '%drag) 1))
527+
(if (or (widget-status-is-set widget %status-resize)
528+
(widget-status-is-set widget %status-drag))
515529
(let ()
516-
(if (= 1 resize-status)
530+
(if (widget-status-is-set widget %status-resize)
517531
(let ([mx (vector-ref data 0)]
518532
[my (vector-ref data 1)]
519533
[w (vector-ref widget %w)]
@@ -544,8 +558,8 @@
544558
(widget-status-is-set widget %status-active))
545559
(begin (widget-child-key-event widget type data))))
546560
(list) 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 '() 0.0 0.0 text
547-
'() (make-hashtable equal-hash equal?)
548-
(make-hashtable equal-hash equal?) #t '() '() '() '() '()
561+
'widget (make-hashtable equal-hash equal?)
562+
(make-hashtable equal-hash equal?) #t '() #f '() '() '() '()
549563
'() '() '() '()))
550564
(widget-set-attrs nw '%w w)
551565
(widget-set-attrs nw '%h h)
@@ -678,9 +692,8 @@
678692
(if (>= len 0)
679693
(let ([w (list-ref $widgets len)])
680694
(if (and (widget-get-attr w %visible)
681-
(or (equal?
682-
%status-active
683-
(widget-get-attrs w '%drag))
695+
(or (widget-status-is-set w %status-drag)
696+
(widget-status-is-set w %status-resize)
684697
(is-in-widget w cursor-x cursor-y)))
685698
(let ([event (vector-ref w %event)])
686699
(event w '() type data)

0 commit comments

Comments
 (0)