checkboxes
parent
7754dde558
commit
44420f200a
|
@ -42,20 +42,17 @@ USE: words
|
||||||
[[ [ button-up 1 ] [ my-hand shape-x my-hand shape-y pick move-gadget world get add-gadget ] ]]
|
[[ [ button-up 1 ] [ my-hand shape-x my-hand shape-y pick move-gadget world get add-gadget ] ]]
|
||||||
}} swap set-gadget-gestures ;
|
}} swap set-gadget-gestures ;
|
||||||
|
|
||||||
|
: filled? "filled" get checkbox-selected? ;
|
||||||
|
|
||||||
: <funny-rect>
|
: <funny-rect>
|
||||||
<plain-rect> <gadget> dup moving-actions ;
|
filled? [ <plain-rect> ] [ <hollow-rect> ] ifte <gadget> dup moving-actions ;
|
||||||
|
|
||||||
: <funny-ellipse>
|
: <funny-ellipse>
|
||||||
<plain-ellipse> <gadget> dup moving-actions ;
|
filled? [ <plain-ellipse> ] [ <hollow-ellipse> ] ifte <gadget> dup moving-actions ;
|
||||||
|
|
||||||
: <funny-line>
|
: <funny-line>
|
||||||
<line> <gadget> dup moving-actions ;
|
<line> <gadget> dup moving-actions ;
|
||||||
|
|
||||||
: check-box ( label -- checkbox )
|
|
||||||
0 0 0 0 <rectangle> <shelf>
|
|
||||||
[ >r <label> r> add-gadget ] keep
|
|
||||||
[ >r f bevel-border r> add-gadget ] keep ;
|
|
||||||
|
|
||||||
: make-shapes ( -- )
|
: make-shapes ( -- )
|
||||||
f world get set-gadget-children
|
f world get set-gadget-children
|
||||||
|
|
||||||
|
@ -65,7 +62,7 @@ USE: words
|
||||||
"New Rectangle" [ drop 100 100 100 100 <funny-rect> dup [ 255 255 0 ] background set-paint-property world get add-gadget ] <button> "shelf" get add-gadget
|
"New Rectangle" [ drop 100 100 100 100 <funny-rect> dup [ 255 255 0 ] background set-paint-property world get add-gadget ] <button> "shelf" get add-gadget
|
||||||
"New Ellipse" [ drop 100 100 200 100 <funny-ellipse> dup [ 0 255 0 ] background set-paint-property world get add-gadget ] <button> "shelf" get add-gadget
|
"New Ellipse" [ drop 100 100 200 100 <funny-ellipse> dup [ 0 255 0 ] background set-paint-property world get add-gadget ] <button> "shelf" get add-gadget
|
||||||
"New Line" [ drop 100 100 200 100 <funny-line> dup [ 255 0 0 ] background set-paint-property world get add-gadget ] <button> "shelf" get add-gadget
|
"New Line" [ drop 100 100 200 100 <funny-line> dup [ 255 0 0 ] background set-paint-property world get add-gadget ] <button> "shelf" get add-gadget
|
||||||
"A check box" [ drop ] <check-box> "shelf" get add-gadget
|
"Filled?" <checkbox> dup "filled" set "shelf" get add-gadget
|
||||||
"shelf" get "pile" get add-gadget
|
"shelf" get "pile" get add-gadget
|
||||||
"Welcome to Factor " version cat2 <label> "pile" get add-gadget
|
"Welcome to Factor " version cat2 <label> "pile" get add-gadget
|
||||||
|
|
||||||
|
|
|
@ -63,3 +63,11 @@ USING: gadgets kernel lists math namespaces test ;
|
||||||
[ 30 ] [ 110 110 -100 -200 <line> [ 20 30 rot move-shape ] keep shape-y ] unit-test
|
[ 30 ] [ 110 110 -100 -200 <line> [ 20 30 rot move-shape ] keep shape-y ] unit-test
|
||||||
[ 10 ] [ 110 110 -100 -200 <line> [ 400 400 rot resize-shape ] keep shape-x ] unit-test
|
[ 10 ] [ 110 110 -100 -200 <line> [ 400 400 rot resize-shape ] keep shape-x ] unit-test
|
||||||
[ 400 ] [ 110 110 -100 -200 <line> [ 400 400 rot resize-shape ] keep shape-w ] unit-test
|
[ 400 ] [ 110 110 -100 -200 <line> [ 400 400 rot resize-shape ] keep shape-w ] unit-test
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
[
|
||||||
|
100 x set
|
||||||
|
100 y set
|
||||||
|
#{ 110 115 }# << line 0 0 100 150 >> inside?
|
||||||
|
] with-scope
|
||||||
|
] unit-test
|
||||||
|
|
|
@ -51,12 +51,32 @@ USING: generic kernel lists math namespaces sdl ;
|
||||||
: <button> ( label quot -- button )
|
: <button> ( label quot -- button )
|
||||||
>r <label> bevel-border dup r> button-actions ;
|
>r <label> bevel-border dup r> button-actions ;
|
||||||
|
|
||||||
: <cross> ( w h -- cross )
|
: <check> ( w h -- cross )
|
||||||
2dup >r >r 0 0 r> r> <line> <gadget>
|
2dup >r >r 0 0 r> r> <line> <gadget>
|
||||||
>r tuck neg >r >r >r 0 r> r> r> <line> <gadget> r> 2list <stack> ;
|
>r tuck neg >r >r >r 0 r> r> r> <line> <gadget> r>
|
||||||
|
2list <stack> ;
|
||||||
|
|
||||||
: <check-box> ( label quot -- checkbox )
|
TUPLE: checkbox bevel selected? delegate ;
|
||||||
>r 0 0 0 0 <rectangle> <shelf>
|
|
||||||
|
: init-checkbox-bevel ( bevel checkbox -- )
|
||||||
|
2dup set-checkbox-bevel add-gadget ;
|
||||||
|
|
||||||
|
: update-checkbox ( checkbox -- )
|
||||||
|
#! Really, there should only be one child.
|
||||||
|
dup checkbox-bevel gadget-children [ unparent ] each
|
||||||
|
dup checkbox-selected? [
|
||||||
|
11 11 <check>
|
||||||
|
] [
|
||||||
|
0 0 11 11 <rectangle> <gadget>
|
||||||
|
] ifte swap checkbox-bevel add-gadget ;
|
||||||
|
|
||||||
|
: toggle-checkbox ( checkbox -- )
|
||||||
|
dup checkbox-selected? not over set-checkbox-selected?
|
||||||
|
update-checkbox ;
|
||||||
|
|
||||||
|
C: checkbox ( label -- checkbox )
|
||||||
|
0 0 0 0 <rectangle> <shelf> over set-checkbox-delegate
|
||||||
[ >r <label> r> add-gadget ] keep
|
[ >r <label> r> add-gadget ] keep
|
||||||
[ >r 11 11 <cross> bevel-border r> add-gadget ] keep dup
|
[ f bevel-border swap init-checkbox-bevel ] keep
|
||||||
r> button-actions ;
|
dup [ toggle-checkbox ] button-actions
|
||||||
|
dup update-checkbox ;
|
||||||
|
|
|
@ -123,7 +123,9 @@ M: line shape-y dup line-y dup rot line-h + min ;
|
||||||
M: line shape-w line-w abs ;
|
M: line shape-w line-w abs ;
|
||||||
M: line shape-h line-h abs ;
|
M: line shape-h line-h abs ;
|
||||||
|
|
||||||
: line-pos ( line -- #{ x y }# ) dup line-x swap line-y rect> ;
|
: line-pos ( line -- #{ x y }# )
|
||||||
|
dup line-x x get + swap line-y y get + rect> ;
|
||||||
|
|
||||||
: line-dir ( line -- #{ w h }# ) dup line-w swap line-h rect> ;
|
: line-dir ( line -- #{ w h }# ) dup line-w swap line-h rect> ;
|
||||||
|
|
||||||
: move-line-x ( x line -- )
|
: move-line-x ( x line -- )
|
||||||
|
@ -159,11 +161,11 @@ M: line resize-shape ( w h line -- )
|
||||||
: line>screen ( shape -- x1 y1 x2 y2 )
|
: line>screen ( shape -- x1 y1 x2 y2 )
|
||||||
[ line-x x get + ] keep
|
[ line-x x get + ] keep
|
||||||
[ line-y y get + ] keep
|
[ line-y y get + ] keep
|
||||||
[ dup line-w swap line-x + pick + ] keep
|
[ line-w pick + ] keep
|
||||||
dup line-h swap line-y + pick + ;
|
line-h pick + ;
|
||||||
|
|
||||||
: line-inside? ( p d -- ? )
|
: line-inside? ( p d -- ? )
|
||||||
dupd proj - absq 2 < ;
|
dupd proj - absq 4 < ;
|
||||||
|
|
||||||
M: line inside? ( point line -- ? )
|
M: line inside? ( point line -- ? )
|
||||||
2dup inside-rect? [
|
2dup inside-rect? [
|
||||||
|
|
Loading…
Reference in New Issue