remove paint namespace binding in ui
parent
02a5067706
commit
7456d7edf8
|
@ -1,25 +1,21 @@
|
||||||
! Copyright (C) 2005 Slava Pestov.
|
! Copyright (C) 2005 Slava Pestov.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
IN: styles
|
IN: styles
|
||||||
USING: kernel namespaces ;
|
|
||||||
|
|
||||||
! Colors are lists of three integers, 0..255.
|
! Colors are RGB triples.
|
||||||
|
: black [ 0 0 0 ] ;
|
||||||
|
: gray [ 128 128 128 ] ;
|
||||||
|
: white [ 255 255 255 ] ;
|
||||||
|
: red [ 255 0 0 ] ;
|
||||||
|
: green [ 0 255 0 ] ;
|
||||||
|
: blue [ 0 0 255 ] ;
|
||||||
|
|
||||||
SYMBOL: foreground ! Used for text and outline shapes.
|
SYMBOL: foreground ! Used for text and outline shapes.
|
||||||
SYMBOL: background ! Used for filled shapes.
|
SYMBOL: background ! Used for filled shapes.
|
||||||
SYMBOL: rollover-bg
|
SYMBOL: rollover-bg
|
||||||
SYMBOL: rollover
|
SYMBOL: rollover
|
||||||
SYMBOL: reverse-video
|
SYMBOL: reverse-video
|
||||||
|
|
||||||
: fg ( -- color )
|
|
||||||
reverse-video get background foreground ? get ;
|
|
||||||
|
|
||||||
: bg ( -- color )
|
|
||||||
reverse-video get [
|
|
||||||
foreground
|
|
||||||
] [
|
|
||||||
rollover get rollover-bg background ?
|
|
||||||
] ifte get ;
|
|
||||||
|
|
||||||
SYMBOL: font
|
SYMBOL: font
|
||||||
SYMBOL: font-size
|
SYMBOL: font-size
|
||||||
SYMBOL: font-style
|
SYMBOL: font-style
|
||||||
|
|
|
@ -12,7 +12,7 @@ C: border ( child delegate size -- border )
|
||||||
[ over [ add-gadget ] [ 2drop ] ifte ] keep ;
|
[ over [ add-gadget ] [ 2drop ] ifte ] keep ;
|
||||||
|
|
||||||
: line-border ( child -- border )
|
: line-border ( child -- border )
|
||||||
{ 0 0 0 } dup <etched-rect> <gadget> { 5 5 0 } <border> ;
|
<etched-gadget> { 5 5 0 } <border> ;
|
||||||
|
|
||||||
: layout-border-loc ( border -- )
|
: layout-border-loc ( border -- )
|
||||||
dup border-size swap gadget-child set-shape-loc ;
|
dup border-size swap gadget-child set-shape-loc ;
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
IN: gadgets
|
|
||||||
|
|
||||||
: black [ 0 0 0 ] ;
|
|
||||||
: gray [ 128 128 128 ] ;
|
|
||||||
: white [ 255 255 255 ] ;
|
|
||||||
: red [ 255 0 0 ] ;
|
|
||||||
: green [ 0 255 0 ] ;
|
|
||||||
: blue [ 0 0 255 ] ;
|
|
|
@ -67,7 +67,7 @@ TUPLE: editor line caret ;
|
||||||
<plain-gadget> dup red background set-paint-prop ;
|
<plain-gadget> dup red background set-paint-prop ;
|
||||||
|
|
||||||
C: editor ( text -- )
|
C: editor ( text -- )
|
||||||
<empty-gadget> over set-delegate
|
<gadget> over set-delegate
|
||||||
[ <line-editor> swap set-editor-line ] keep
|
[ <line-editor> swap set-editor-line ] keep
|
||||||
[ <caret> swap set-editor-caret ] keep
|
[ <caret> swap set-editor-caret ] keep
|
||||||
[ set-editor-text ] keep
|
[ set-editor-text ] keep
|
||||||
|
@ -93,6 +93,5 @@ M: editor layout* ( editor -- )
|
||||||
dup editor-caret over caret-dim swap set-gadget-dim
|
dup editor-caret over caret-dim swap set-gadget-dim
|
||||||
dup editor-caret swap caret-loc swap set-shape-loc ;
|
dup editor-caret swap caret-loc swap set-shape-loc ;
|
||||||
|
|
||||||
M: editor draw-shape ( editor -- )
|
M: editor draw-gadget* ( editor -- )
|
||||||
[ dup gadget-font swap editor-text ] keep
|
dup editor-text over [ draw-string ] with-trans ;
|
||||||
[ draw-string ] with-trans ;
|
|
||||||
|
|
|
@ -20,12 +20,12 @@ TUPLE: frame left right top bottom center ;
|
||||||
dup frame-bottom unparent 2dup set-frame-bottom add-gadget ;
|
dup frame-bottom unparent 2dup set-frame-bottom add-gadget ;
|
||||||
|
|
||||||
C: frame ( -- frame )
|
C: frame ( -- frame )
|
||||||
[ <empty-gadget> swap set-delegate ] keep
|
[ <gadget> swap set-delegate ] keep
|
||||||
[ <empty-gadget> swap set-frame-center ] keep
|
[ <gadget> swap set-frame-center ] keep
|
||||||
[ <empty-gadget> swap set-frame-left ] keep
|
[ <gadget> swap set-frame-left ] keep
|
||||||
[ <empty-gadget> swap set-frame-right ] keep
|
[ <gadget> swap set-frame-right ] keep
|
||||||
[ <empty-gadget> swap set-frame-top ] keep
|
[ <gadget> swap set-frame-top ] keep
|
||||||
[ <empty-gadget> swap set-frame-bottom ] keep ;
|
[ <gadget> swap set-frame-bottom ] keep ;
|
||||||
|
|
||||||
: frame-major ( frame -- list )
|
: frame-major ( frame -- list )
|
||||||
[
|
[
|
||||||
|
|
|
@ -11,16 +11,18 @@ TUPLE: gadget paint gestures relayout? root? parent children ;
|
||||||
|
|
||||||
: gadget-child gadget-children car ;
|
: gadget-child gadget-children car ;
|
||||||
|
|
||||||
C: gadget ( shape -- gadget )
|
C: gadget ( -- gadget )
|
||||||
[ set-delegate ] keep
|
{ 0 0 0 } dup <rectangle> over set-delegate
|
||||||
<namespace> over set-gadget-paint
|
<namespace> over set-gadget-paint
|
||||||
<namespace> over set-gadget-gestures ;
|
<namespace> over set-gadget-gestures ;
|
||||||
|
|
||||||
: <empty-gadget> ( -- gadget )
|
TUPLE: plain-gadget ;
|
||||||
{ 0 0 0 } dup <rectangle> <gadget> ;
|
|
||||||
|
|
||||||
: <plain-gadget> ( -- gadget )
|
C: plain-gadget <gadget> over set-delegate ;
|
||||||
{ 0 0 0 } dup <plain-rect> <gadget> ;
|
|
||||||
|
TUPLE: etched-gadget ;
|
||||||
|
|
||||||
|
C: etched-gadget <gadget> over set-delegate ;
|
||||||
|
|
||||||
DEFER: add-invalid
|
DEFER: add-invalid
|
||||||
|
|
||||||
|
@ -50,20 +52,6 @@ DEFER: add-invalid
|
||||||
2dup shape-dim =
|
2dup shape-dim =
|
||||||
[ 2drop ] [ [ set-shape-dim ] keep relayout-down ] ifte ;
|
[ 2drop ] [ [ set-shape-dim ] keep relayout-down ] ifte ;
|
||||||
|
|
||||||
: paint-prop ( gadget key -- value )
|
|
||||||
over [
|
|
||||||
dup pick gadget-paint hash* dup [
|
|
||||||
2nip cdr
|
|
||||||
] [
|
|
||||||
drop >r gadget-parent r> paint-prop
|
|
||||||
] ?ifte
|
|
||||||
] [
|
|
||||||
2drop f
|
|
||||||
] ifte ;
|
|
||||||
|
|
||||||
: set-paint-prop ( gadget value key -- )
|
|
||||||
rot gadget-paint set-hash ;
|
|
||||||
|
|
||||||
GENERIC: pref-dim ( gadget -- dim )
|
GENERIC: pref-dim ( gadget -- dim )
|
||||||
|
|
||||||
M: gadget pref-dim shape-dim ;
|
M: gadget pref-dim shape-dim ;
|
||||||
|
|
|
@ -38,7 +38,7 @@ DEFER: pick-up
|
||||||
TUPLE: hand click-loc click-rel clicked buttons gadget focus ;
|
TUPLE: hand click-loc click-rel clicked buttons gadget focus ;
|
||||||
|
|
||||||
C: hand ( world -- hand )
|
C: hand ( world -- hand )
|
||||||
<empty-gadget> over set-delegate
|
<gadget> over set-delegate
|
||||||
[ set-gadget-parent ] 2keep
|
[ set-gadget-parent ] 2keep
|
||||||
[ set-hand-gadget ] keep ;
|
[ set-hand-gadget ] keep ;
|
||||||
|
|
||||||
|
|
|
@ -25,35 +25,19 @@ sequences ;
|
||||||
#! Add a gadget to a parent gadget.
|
#! Add a gadget to a parent gadget.
|
||||||
[ (add-gadget) ] keep relayout ;
|
[ (add-gadget) ] keep relayout ;
|
||||||
|
|
||||||
: (parents) ( gadget -- )
|
|
||||||
[ dup gadget-parent (parents) , ] when* ;
|
|
||||||
|
|
||||||
: parents ( gadget -- list )
|
: parents ( gadget -- list )
|
||||||
#! A list of all parents of the gadget, including the
|
#! A list of all parents of the gadget, the first element
|
||||||
#! gadget itself.
|
#! is the gadget itself.
|
||||||
[ (parents) ] make-list ;
|
dup [ dup gadget-parent parents cons ] when ;
|
||||||
|
|
||||||
: (each-parent) ( list quot -- ? )
|
|
||||||
over [
|
|
||||||
over car gadget-paint [
|
|
||||||
2dup >r >r >r cdr r> (each-parent) [
|
|
||||||
r> car r> call
|
|
||||||
] [
|
|
||||||
r> r> 2drop f
|
|
||||||
] ifte
|
|
||||||
] bind
|
|
||||||
] [
|
|
||||||
2drop t
|
|
||||||
] ifte ; inline
|
|
||||||
|
|
||||||
: each-parent ( gadget quot -- ? )
|
: each-parent ( gadget quot -- ? )
|
||||||
#! Keep executing the quotation on higher and higher
|
#! Keep executing the quotation on higher and higher
|
||||||
#! parents until it returns f.
|
#! parents until it returns f.
|
||||||
>r parents r> (each-parent) ; inline
|
>r parents r> all? ; inline
|
||||||
|
|
||||||
: screen-loc ( gadget -- point )
|
: screen-loc ( gadget -- point )
|
||||||
#! The position of the gadget on the screen.
|
#! The position of the gadget on the screen.
|
||||||
{ 0 0 0 } swap [ shape-loc v+ t ] each-parent drop ;
|
parents { 0 0 0 } [ shape-loc v+ ] reduce ;
|
||||||
|
|
||||||
: relative ( g1 g2 -- g2-g1 )
|
: relative ( g1 g2 -- g2-g1 )
|
||||||
screen-loc swap screen-loc v- ;
|
screen-loc swap screen-loc v- ;
|
||||||
|
|
|
@ -27,7 +27,9 @@ USING: generic io kernel listener math namespaces styles threads ;
|
||||||
|
|
||||||
[ [ clear print-banner listener ] with-stream ] in-thread
|
[ [ clear print-banner listener ] with-stream ] in-thread
|
||||||
|
|
||||||
request-focus
|
dup request-focus
|
||||||
|
|
||||||
|
pane set
|
||||||
] bind ;
|
] bind ;
|
||||||
|
|
||||||
SYMBOL: first-time
|
SYMBOL: first-time
|
||||||
|
|
|
@ -8,7 +8,7 @@ sequences styles vectors ;
|
||||||
TUPLE: label text ;
|
TUPLE: label text ;
|
||||||
|
|
||||||
C: label ( text -- label )
|
C: label ( text -- label )
|
||||||
<empty-gadget> over set-delegate [ set-label-text ] keep ;
|
<gadget> over set-delegate [ set-label-text ] keep ;
|
||||||
|
|
||||||
: label-size ( gadget text -- dim )
|
: label-size ( gadget text -- dim )
|
||||||
>r gadget-font r> size-string 0 3vector ;
|
>r gadget-font r> size-string 0 3vector ;
|
||||||
|
@ -16,6 +16,5 @@ C: label ( text -- label )
|
||||||
M: label pref-dim ( label -- dim )
|
M: label pref-dim ( label -- dim )
|
||||||
dup label-text label-size ;
|
dup label-text label-size ;
|
||||||
|
|
||||||
M: label draw-shape ( label -- )
|
M: label draw-gadget* ( label -- )
|
||||||
[ dup gadget-font swap label-text ] keep
|
dup label-text over [ draw-string ] with-trans ;
|
||||||
[ draw-string ] with-trans ;
|
|
||||||
|
|
|
@ -11,10 +11,8 @@ namespaces sdl sequences ;
|
||||||
#! be laid out.
|
#! be laid out.
|
||||||
dup gadget-relayout? [
|
dup gadget-relayout? [
|
||||||
f over set-gadget-relayout?
|
f over set-gadget-relayout?
|
||||||
dup gadget-paint [
|
|
||||||
dup layout*
|
dup layout*
|
||||||
gadget-children [ layout ] each
|
gadget-children [ layout ] each
|
||||||
] bind
|
|
||||||
] [
|
] [
|
||||||
drop
|
drop
|
||||||
] ifte ;
|
] ifte ;
|
||||||
|
@ -63,7 +61,7 @@ C: pack ( align fill vector -- pack )
|
||||||
#! align: 0 left aligns, 1/2 center, 1 right.
|
#! align: 0 left aligns, 1/2 center, 1 right.
|
||||||
#! gap: between each child.
|
#! gap: between each child.
|
||||||
#! fill: 0 leaves default width, 1 fills to pack width.
|
#! fill: 0 leaves default width, 1 fills to pack width.
|
||||||
[ <empty-gadget> swap set-delegate ] keep
|
[ <gadget> swap set-delegate ] keep
|
||||||
[ set-pack-vector ] keep
|
[ set-pack-vector ] keep
|
||||||
[ set-pack-fill ] keep
|
[ set-pack-fill ] keep
|
||||||
[ set-pack-align ] keep ;
|
[ set-pack-align ] keep ;
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
USING: kernel parser sequences io ;
|
USING: kernel parser sequences io ;
|
||||||
[
|
[
|
||||||
"/library/ui/colors.factor"
|
|
||||||
"/library/ui/shapes.factor"
|
"/library/ui/shapes.factor"
|
||||||
"/library/ui/rectangles.factor"
|
|
||||||
"/library/ui/gadgets.factor"
|
"/library/ui/gadgets.factor"
|
||||||
"/library/ui/hierarchy.factor"
|
"/library/ui/hierarchy.factor"
|
||||||
"/library/ui/paint.factor"
|
"/library/ui/paint.factor"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
IN: gadgets
|
IN: gadgets
|
||||||
USING: generic hashtables io kernel lists math matrices
|
USING: generic hashtables io kernel lists math matrices
|
||||||
namespaces sdl sequences strings ;
|
namespaces sdl sequences strings styles ;
|
||||||
|
|
||||||
SYMBOL: clip
|
SYMBOL: clip
|
||||||
|
|
||||||
|
@ -26,16 +26,54 @@ SYMBOL: clip
|
||||||
r> call
|
r> call
|
||||||
] with-scope ; inline
|
] with-scope ; inline
|
||||||
|
|
||||||
|
GENERIC: draw-gadget* ( gadget -- )
|
||||||
|
|
||||||
: draw-gadget ( gadget -- )
|
: draw-gadget ( gadget -- )
|
||||||
#! All drawing done inside draw-shape is done with the
|
|
||||||
#! gadget's paint. If the gadget does not have any custom
|
|
||||||
#! paint, just call the quotation.
|
|
||||||
dup gadget-paint [
|
|
||||||
dup [
|
dup [
|
||||||
[
|
[
|
||||||
dup draw-shape dup [
|
dup draw-gadget* dup [
|
||||||
gadget-children [ draw-gadget ] each
|
gadget-children [ draw-gadget ] each
|
||||||
] with-trans
|
] with-trans
|
||||||
] [ drop ] ifte
|
] [ drop ] ifte
|
||||||
] with-clip
|
] with-clip ;
|
||||||
] bind ;
|
|
||||||
|
M: gadget draw-gadget* ( gadget -- ) drop ;
|
||||||
|
|
||||||
|
: paint-prop ( gadget key -- value )
|
||||||
|
over [
|
||||||
|
dup pick gadget-paint hash* dup [
|
||||||
|
2nip cdr
|
||||||
|
] [
|
||||||
|
drop >r gadget-parent r> paint-prop
|
||||||
|
] ?ifte
|
||||||
|
] [
|
||||||
|
2drop f
|
||||||
|
] ifte ;
|
||||||
|
|
||||||
|
: set-paint-prop ( gadget value key -- )
|
||||||
|
rot gadget-paint set-hash ;
|
||||||
|
|
||||||
|
: fg ( gadget -- color )
|
||||||
|
dup reverse-video paint-prop
|
||||||
|
background foreground ? paint-prop ;
|
||||||
|
|
||||||
|
: bg ( gadget -- color )
|
||||||
|
dup reverse-video paint-prop [
|
||||||
|
foreground
|
||||||
|
] [
|
||||||
|
dup rollover paint-prop rollover-bg background ?
|
||||||
|
] ifte paint-prop ;
|
||||||
|
|
||||||
|
: plain-rect ( shape -- )
|
||||||
|
#! Draw a filled rect with the bounds of an arbitrary shape.
|
||||||
|
[ rect>screen ] keep bg rgb boxColor ;
|
||||||
|
|
||||||
|
M: plain-gadget draw-gadget* ( gadget -- )
|
||||||
|
>r surface get r> plain-rect ;
|
||||||
|
|
||||||
|
: hollow-rect ( shape -- )
|
||||||
|
#! Draw a hollow rect with the bounds of an arbitrary shape.
|
||||||
|
[ rect>screen >r 1 - r> 1 - ] keep fg rgb rectangleColor ;
|
||||||
|
|
||||||
|
M: etched-gadget draw-gadget* ( gadget -- )
|
||||||
|
>r surface get r> 2dup plain-rect hollow-rect ;
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
! Copyright (C) 2005 Slava Pestov.
|
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
|
||||||
IN: gadgets
|
|
||||||
USING: generic kernel lists math matrices namespaces sdl styles
|
|
||||||
vectors ;
|
|
||||||
|
|
||||||
TUPLE: rectangle loc dim ;
|
|
||||||
|
|
||||||
M: rectangle shape-loc rectangle-loc ;
|
|
||||||
M: rectangle set-shape-loc set-rectangle-loc ;
|
|
||||||
|
|
||||||
M: rectangle shape-dim rectangle-dim ;
|
|
||||||
M: rectangle set-shape-dim set-rectangle-dim ;
|
|
||||||
|
|
||||||
: screen-bounds ( shape -- rect )
|
|
||||||
shape-bounds >r origin v+ r> <rectangle> ;
|
|
||||||
|
|
||||||
M: rectangle inside? ( loc rect -- ? )
|
|
||||||
screen-bounds shape-bounds { 1 1 1 } v- { 0 0 0 } vmax
|
|
||||||
>r v- { 0 0 0 } r> vbetween? conj ;
|
|
||||||
|
|
||||||
M: rectangle draw-shape drop ;
|
|
||||||
|
|
||||||
: intersect ( shape shape -- rect )
|
|
||||||
>r shape-extent r> shape-extent
|
|
||||||
swapd vmin >r vmax dup r> swap v- { 0 0 0 } vmax
|
|
||||||
<rectangle> ;
|
|
||||||
|
|
||||||
: rect>screen ( shape -- x1 y1 x2 y2 )
|
|
||||||
[ shape-x x get + ] keep
|
|
||||||
[ shape-y y get + ] keep
|
|
||||||
[ shape-w pick + ] keep
|
|
||||||
shape-h pick + ;
|
|
||||||
|
|
||||||
! A rectangle only whose outline is visible.
|
|
||||||
TUPLE: hollow-rect ;
|
|
||||||
|
|
||||||
C: hollow-rect ( loc dim -- rect )
|
|
||||||
[ >r <rectangle> r> set-delegate ] keep ;
|
|
||||||
|
|
||||||
: hollow-rect ( shape -- )
|
|
||||||
#! Draw a hollow rect with the bounds of an arbitrary shape.
|
|
||||||
rect>screen >r 1 - r> 1 - fg rgb rectangleColor ;
|
|
||||||
|
|
||||||
M: hollow-rect draw-shape ( rect -- )
|
|
||||||
>r surface get r> hollow-rect ;
|
|
||||||
|
|
||||||
! A rectangle that is filled.
|
|
||||||
TUPLE: plain-rect ;
|
|
||||||
|
|
||||||
C: plain-rect ( loc dim -- rect )
|
|
||||||
[ >r <rectangle> r> set-delegate ] keep ;
|
|
||||||
|
|
||||||
: plain-rect ( shape -- )
|
|
||||||
#! Draw a filled rect with the bounds of an arbitrary shape.
|
|
||||||
rect>screen bg rgb boxColor ;
|
|
||||||
|
|
||||||
M: plain-rect draw-shape ( rect -- )
|
|
||||||
>r surface get r> plain-rect ;
|
|
||||||
|
|
||||||
! A rectangle that is filled with the background color and also
|
|
||||||
! has an outline.
|
|
||||||
TUPLE: etched-rect ;
|
|
||||||
|
|
||||||
C: etched-rect ( loc dim -- rect )
|
|
||||||
[ >r <rectangle> r> set-delegate ] keep ;
|
|
||||||
|
|
||||||
M: etched-rect draw-shape ( rect -- )
|
|
||||||
>r surface get r> 2dup plain-rect hollow-rect ;
|
|
|
@ -17,7 +17,7 @@ TUPLE: viewport origin ;
|
||||||
[ fix-scroll ] keep [ set-viewport-origin ] keep relayout ;
|
[ fix-scroll ] keep [ set-viewport-origin ] keep relayout ;
|
||||||
|
|
||||||
C: viewport ( content -- viewport )
|
C: viewport ( content -- viewport )
|
||||||
<empty-gadget> over set-delegate
|
<gadget> over set-delegate
|
||||||
t over set-gadget-root?
|
t over set-gadget-root?
|
||||||
[ add-gadget ] keep
|
[ add-gadget ] keep
|
||||||
{ 0 0 0 } over set-viewport-origin ;
|
{ 0 0 0 } over set-viewport-origin ;
|
||||||
|
|
|
@ -20,8 +20,6 @@ GENERIC: set-shape-dim ( dim shape -- )
|
||||||
: shape-w shape-dim first ;
|
: shape-w shape-dim first ;
|
||||||
: shape-h shape-dim second ;
|
: shape-h shape-dim second ;
|
||||||
|
|
||||||
GENERIC: draw-shape ( shape -- )
|
|
||||||
|
|
||||||
: with-trans ( shape quot -- )
|
: with-trans ( shape quot -- )
|
||||||
#! All drawing done inside the quotation is translated
|
#! All drawing done inside the quotation is translated
|
||||||
#! relative to the shape's origin.
|
#! relative to the shape's origin.
|
||||||
|
@ -47,3 +45,29 @@ GENERIC: draw-shape ( shape -- )
|
||||||
|
|
||||||
M: vector shape-loc ;
|
M: vector shape-loc ;
|
||||||
M: vector shape-dim drop { 0 0 0 } ;
|
M: vector shape-dim drop { 0 0 0 } ;
|
||||||
|
|
||||||
|
TUPLE: rectangle loc dim ;
|
||||||
|
|
||||||
|
M: rectangle shape-loc rectangle-loc ;
|
||||||
|
M: rectangle set-shape-loc set-rectangle-loc ;
|
||||||
|
|
||||||
|
M: rectangle shape-dim rectangle-dim ;
|
||||||
|
M: rectangle set-shape-dim set-rectangle-dim ;
|
||||||
|
|
||||||
|
: screen-bounds ( shape -- rect )
|
||||||
|
shape-bounds >r origin v+ r> <rectangle> ;
|
||||||
|
|
||||||
|
M: rectangle inside? ( loc rect -- ? )
|
||||||
|
screen-bounds shape-bounds { 1 1 1 } v- { 0 0 0 } vmax
|
||||||
|
>r v- { 0 0 0 } r> vbetween? conj ;
|
||||||
|
|
||||||
|
: intersect ( shape shape -- rect )
|
||||||
|
>r shape-extent r> shape-extent
|
||||||
|
swapd vmin >r vmax dup r> swap v- { 0 0 0 } vmax
|
||||||
|
<rectangle> ;
|
||||||
|
|
||||||
|
: rect>screen ( shape -- x1 y1 x2 y2 )
|
||||||
|
[ shape-x x get + ] keep
|
||||||
|
[ shape-y y get + ] keep
|
||||||
|
[ shape-w pick + ] keep
|
||||||
|
shape-h pick + ;
|
||||||
|
|
|
@ -27,11 +27,12 @@ strings styles io ;
|
||||||
swap *int swap *int
|
swap *int swap *int
|
||||||
] ifte ;
|
] ifte ;
|
||||||
|
|
||||||
: draw-string ( font text -- )
|
: draw-string ( gadget text -- )
|
||||||
filter-nulls dup empty? [
|
filter-nulls dup empty? [
|
||||||
2drop
|
2drop
|
||||||
] [
|
] [
|
||||||
fg 3unlist make-color
|
>r [ gadget-font ] keep r> swap
|
||||||
|
[ fg 3unlist make-color ] keep
|
||||||
bg 3unlist make-color
|
bg 3unlist make-color
|
||||||
TTF_RenderUNICODE_Shaded
|
TTF_RenderUNICODE_Shaded
|
||||||
[ >r x get y get r> draw-surface ] keep
|
[ >r x get y get r> draw-surface ] keep
|
||||||
|
|
|
@ -36,7 +36,7 @@ C: world ( -- world )
|
||||||
|
|
||||||
: show-glass ( gadget -- )
|
: show-glass ( gadget -- )
|
||||||
hide-glass
|
hide-glass
|
||||||
<empty-gadget> dup
|
<gadget> dup
|
||||||
world get 2dup add-gadget set-world-glass
|
world get 2dup add-gadget set-world-glass
|
||||||
dupd add-gadget prefer ;
|
dupd add-gadget prefer ;
|
||||||
|
|
||||||
|
@ -47,9 +47,7 @@ M: world inside? ( point world -- ? ) 2drop t ;
|
||||||
: draw-world ( world -- )
|
: draw-world ( world -- )
|
||||||
[
|
[
|
||||||
dup
|
dup
|
||||||
{ 0 0 0 }
|
{ 0 0 0 } width get height get 0 3vector <rectangle> clip set
|
||||||
width get height get 0 3vector <rectangle>
|
|
||||||
clip set-paint-prop
|
|
||||||
draw-gadget
|
draw-gadget
|
||||||
] with-surface ;
|
] with-surface ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue