Rename math.geometry.rect to math.rectangles

Remove math.geometry.points
Remove rect-loc and rect-dim words
db4
Slava Pestov 2009-02-05 03:28:41 -06:00
parent dfa0931db1
commit 88b401b383
44 changed files with 172 additions and 200 deletions

View File

@ -1,11 +0,0 @@
IN: math.geometry
GENERIC: width ( object -- width )
GENERIC: height ( object -- width )
GENERIC# set-width! 1 ( object width -- object )
GENERIC# set-height! 1 ( object height -- object )
GENERIC# set-x! 1 ( object x -- object )
GENERIC# set-y! 1 ( object y -- object )

View File

@ -1,68 +0,0 @@
USING: kernel arrays sequences
math math.points math.vectors math.geometry
accessors ;
IN: math.geometry.rect
TUPLE: rect loc dim ;
GENERIC: rect-loc ( obj -- loc )
GENERIC: rect-dim ( obj -- dim )
: init-rect ( rect -- rect ) { 0 0 } clone >>loc { 0 0 } clone >>dim ;
: <rect> ( loc dim -- rect ) rect boa ;
: <zero-rect> ( -- rect ) rect new init-rect ;
M: array rect-loc ;
M: array rect-dim drop { 0 0 } ;
M: rect rect-loc loc>> ;
M: rect rect-dim dim>> ;
: rect-bounds ( rect -- loc dim ) dup rect-loc swap rect-dim ;
: rect-extent ( rect -- loc ext ) rect-bounds over v+ ;
: 2rect-extent ( rect rect -- loc1 loc2 ext1 ext2 )
[ rect-extent ] bi@ swapd ;
: <extent-rect> ( loc ext -- rect ) over [v-] <rect> ;
: offset-rect ( rect loc -- newrect )
over rect-loc v+ swap rect-dim <rect> ;
: (rect-intersect) ( rect rect -- array array )
2rect-extent [ vmax ] [ vmin ] 2bi* ;
: rect-intersect ( rect1 rect2 -- newrect )
(rect-intersect) <extent-rect> ;
: intersects? ( rect/point rect -- ? )
(rect-intersect) [v-] { 0 0 } = ;
: (rect-union) ( rect rect -- array array )
2rect-extent [ vmin ] [ vmax ] 2bi* ;
: rect-union ( rect1 rect2 -- newrect )
(rect-union) <extent-rect> ;
M: rect width ( rect -- width ) dim>> first ;
M: rect height ( rect -- height ) dim>> second ;
M: rect set-width! ( rect width -- rect ) over dim>> set-first ;
M: rect set-height! ( rect height -- rect ) over dim>> set-second ;
M: rect set-x! ( rect x -- rect ) over loc>> set-first ;
M: rect set-y! ( rect y -- rect ) over loc>> set-second ;
! Accessing corners
: top-left ( rect -- point ) loc>> ;
: top-right ( rect -- point ) [ loc>> ] [ width 1 - ] bi v+x ;
: bottom-left ( rect -- point ) [ loc>> ] [ height 1 - ] bi v+y ;
: bottom-right ( rect -- point ) [ loc>> ] [ dim>> ] bi v+ { 1 1 } v- ;

View File

@ -1,12 +1,11 @@
USING: help.markup help.syntax ; USING: help.markup help.syntax ;
IN: math.rectangles
IN: math.geometry.rect
HELP: rect HELP: rect
{ $class-description "A rectangle with the following slots:" { $class-description "A rectangle with the following slots:"
{ $list { $list
{ { $link rect-loc } " - the top-left corner of the rectangle as an x/y pair" } { { $slot "loc" } " - the top-left corner of the rectangle as an x/y pair" }
{ { $link rect-dim } " - the dimensions of the rectangle as a width/height pair" } { { $slot "dim" } " - the dimensions of the rectangle as a width/height pair" }
} }
"Rectangles are constructed by calling " { $link <rect> } " and " { $link <extent-rect> } "." "Rectangles are constructed by calling " { $link <rect> } " and " { $link <extent-rect> } "."
} ; } ;
@ -47,12 +46,10 @@ HELP: <zero-rect>
{ $values { "rect" "a new " { $link rect } } } { $values { "rect" "a new " { $link rect } } }
{ $description "Creates a rectangle located at the origin with zero dimensions." } ; { $description "Creates a rectangle located at the origin with zero dimensions." } ;
ARTICLE: "math.geometry.rect" "Rectangles" ARTICLE: "math.rectangles" "Rectangles"
"The " { $vocab-link "math.geometry.rect" } " vocabulary defines a rectangle data type and operations on them." "The " { $vocab-link "math.rectangles" } " vocabulary defines a rectangle data type and operations on them."
{ $subsection rect } { $subsection rect }
"Rectangles can be taken apart:" "Rectangles can be taken apart:"
{ $subsection rect-loc }
{ $subsection rect-dim }
{ $subsection rect-bounds } { $subsection rect-bounds }
{ $subsection rect-extent } { $subsection rect-extent }
"New rectangles can be created:" "New rectangles can be created:"
@ -64,4 +61,4 @@ ARTICLE: "math.geometry.rect" "Rectangles"
{ $subsection rect-intersect } { $subsection rect-intersect }
{ $subsection intersects? } ; { $subsection intersects? } ;
ABOUT: "math.geometry.rect" ABOUT: "math.rectangles"

View File

@ -1,7 +1,5 @@
USING: tools.test math.rectangles ;
USING: tools.test math.geometry.rect ; IN: math.rectangles.tests
IN: math.geometry.rect.tests
[ T{ rect f { 10 10 } { 20 20 } } ] [ T{ rect f { 10 10 } { 20 20 } } ]
[ [
@ -20,18 +18,18 @@ IN: math.geometry.rect.tests
[ f ] [ [ f ] [
T{ rect f { 100 100 } { 50 50 } } T{ rect f { 100 100 } { 50 50 } }
T{ rect f { 200 200 } { 40 40 } } T{ rect f { 200 200 } { 40 40 } }
intersects? contains-rect?
] unit-test ] unit-test
[ t ] [ [ t ] [
T{ rect f { 100 100 } { 50 50 } } T{ rect f { 100 100 } { 50 50 } }
T{ rect f { 120 120 } { 40 40 } } T{ rect f { 120 120 } { 40 40 } }
intersects? contains-rect?
] unit-test ] unit-test
[ f ] [ [ f ] [
T{ rect f { 1000 100 } { 50 50 } } T{ rect f { 1000 100 } { 50 50 } }
T{ rect f { 120 120 } { 40 40 } } T{ rect f { 120 120 } { 40 40 } }
intersects? contains-rect?
] unit-test ] unit-test

View File

@ -0,0 +1,46 @@
! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: kernel arrays sequences math math.vectors accessors ;
IN: math.rectangles
TUPLE: rect { loc initial: { 0 0 } } { dim initial: { 0 0 } } ;
: <rect> ( loc dim -- rect ) rect boa ; inline
: <zero-rect> ( -- rect ) rect new ; inline
: point>rect ( loc -- rect ) { 0 0 } <rect> ; inline
: rect-bounds ( rect -- loc dim ) [ loc>> ] [ dim>> ] bi ;
: rect-extent ( rect -- loc ext ) rect-bounds over v+ ;
: with-rect-extents ( rect1 rect2 loc-quot: ( loc1 loc2 -- ) ext-quot: ( ext1 ext2 -- ) -- )
[ [ rect-extent ] bi@ ] 2dip bi-curry* bi* ; inline
: <extent-rect> ( loc ext -- rect ) over [v-] <rect> ;
: offset-rect ( rect loc -- newrect )
over loc>> v+ swap dim>> <rect> ;
: (rect-intersect) ( rect rect -- array array )
[ vmax ] [ vmin ] with-rect-extents ;
: rect-intersect ( rect1 rect2 -- newrect )
(rect-intersect) <extent-rect> ;
GENERIC: contains-rect? ( rect1 rect2 -- ? )
M: rect contains-rect?
(rect-intersect) [v-] { 0 0 } = ;
GENERIC: contains-point? ( point rect -- ? )
M: rect contains-point?
[ point>rect ] dip contains-rect? ;
: (rect-union) ( rect rect -- array array )
[ vmin ] [ vmax ] with-rect-extents ;
: rect-union ( rect1 rect2 -- newrect )
(rect-union) <extent-rect> ;

View File

@ -6,7 +6,7 @@ cocoa.runtime cocoa.subclassing cocoa.pasteboard cocoa.types
cocoa.windows cocoa.classes cocoa.nibs sequences system ui cocoa.windows cocoa.classes cocoa.nibs sequences system ui
ui.backend ui.clipboards ui.gadgets ui.gadgets.worlds ui.backend ui.clipboards ui.gadgets ui.gadgets.worlds
ui.backend.cocoa.views core-foundation core-foundation.run-loop ui.backend.cocoa.views core-foundation core-foundation.run-loop
core-graphics.types threads math.geometry.rect fry libc core-graphics.types threads math.rectangles fry libc
generalizations alien.c-types cocoa.views generalizations alien.c-types cocoa.views
combinators io.thread ; combinators io.thread ;
IN: ui.backend.cocoa IN: ui.backend.cocoa

View File

@ -1,5 +1,5 @@
IN: ui.backend.cocoa.views.tests IN: ui.backend.cocoa.views.tests
USING: ui.backend.cocoa.views tools.test kernel math.geometry.rect USING: ui.backend.cocoa.views tools.test kernel math.rectangles
namespaces ; namespaces ;
[ t ] [ [ t ] [

View File

@ -5,7 +5,7 @@ math cocoa.messages cocoa.subclassing cocoa.classes cocoa.views
cocoa.application cocoa.pasteboard cocoa.types cocoa.windows cocoa.application cocoa.pasteboard cocoa.types cocoa.windows
sequences ui ui.gadgets ui.gadgets.private ui.gadgets.worlds ui.gestures sequences ui ui.gadgets ui.gadgets.private ui.gadgets.worlds ui.gestures
core-foundation.strings core-graphics core-graphics.types core-foundation.strings core-graphics core-graphics.types
threads combinators math.geometry.rect ; threads combinators math.rectangles ;
IN: ui.backend.cocoa.views IN: ui.backend.cocoa.views
: send-mouse-moved ( view event -- ) : send-mouse-moved ( view event -- )

View File

@ -9,7 +9,7 @@ windows.kernel32 windows.gdi32 windows.user32 windows.opengl32
windows.messages windows.types windows.nt windows threads libc windows.messages windows.types windows.nt windows threads libc
combinators fry combinators.short-circuit continuations combinators fry combinators.short-circuit continuations
command-line shuffle opengl ui.render ascii math.bitwise locals command-line shuffle opengl ui.render ascii math.bitwise locals
accessors math.geometry.rect math.order ascii calendar accessors math.rectangles math.order ascii calendar
io.encodings.utf16n ; io.encodings.utf16n ;
IN: ui.backend.windows IN: ui.backend.windows
@ -434,7 +434,7 @@ M: windows-ui-backend do-events
style 0 ex-style AdjustWindowRectEx win32-error=0/f ; style 0 ex-style AdjustWindowRectEx win32-error=0/f ;
: make-RECT ( world -- RECT ) : make-RECT ( world -- RECT )
[ window-loc>> dup ] [ rect-dim ] bi v+ [ window-loc>> dup ] [ dim>> ] bi v+
"RECT" <c-object> "RECT" <c-object>
over first over set-RECT-right over first over set-RECT-right
swap second over set-RECT-bottom swap second over set-RECT-bottom

View File

@ -6,7 +6,7 @@ ui.event-loop assocs kernel math namespaces opengl
sequences strings x11.xlib x11.events x11.xim x11.glx sequences strings x11.xlib x11.events x11.xim x11.glx
x11.clipboard x11.constants x11.windows io.encodings.string x11.clipboard x11.constants x11.windows io.encodings.string
io.encodings.ascii io.encodings.utf8 combinators command-line io.encodings.ascii io.encodings.utf8 combinators command-line
math.vectors classes.tuple opengl.gl threads math.geometry.rect math.vectors classes.tuple opengl.gl threads math.rectangles
environment ascii ; environment ascii ;
IN: ui.backend.x11 IN: ui.backend.x11

View File

@ -1,7 +1,7 @@
! Copyright (C) 2006, 2008 Slava Pestov. ! Copyright (C) 2006, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors kernel sequences models ui.gadgets USING: accessors kernel sequences models ui.gadgets
math.geometry.rect fry ; math.rectangles fry ;
IN: ui.gadgets.books IN: ui.gadgets.books
TUPLE: book < gadget ; TUPLE: book < gadget ;

View File

@ -1,6 +1,6 @@
IN: ui.gadgets.borders.tests IN: ui.gadgets.borders.tests
USING: tools.test accessors namespaces kernel USING: tools.test accessors namespaces kernel
ui.gadgets ui.gadgets.borders math.geometry.rect ; ui.gadgets ui.gadgets.borders math.rectangles ;
[ { 110 210 } ] [ <gadget> { 100 200 } >>dim { 5 5 } <border> pref-dim ] unit-test [ { 110 210 } ] [ <gadget> { 100 200 } >>dim { 5 5 } <border> pref-dim ] unit-test

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2009 Slava Pestov. ! Copyright (C) 2005, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays ui.gadgets kernel math USING: accessors arrays ui.gadgets kernel math
namespaces vectors sequences math.vectors math.geometry.rect ; namespaces vectors sequences math.vectors math.rectangles ;
IN: ui.gadgets.borders IN: ui.gadgets.borders
TUPLE: border < gadget TUPLE: border < gadget

View File

@ -5,7 +5,7 @@ strings quotations assocs combinators classes colors
classes.tuple opengl opengl.gl math.vectors ui.commands ui.gadgets classes.tuple opengl opengl.gl math.vectors ui.commands ui.gadgets
ui.gadgets.borders ui.gadgets.labels ui.gadgets.theme ui.gadgets.borders ui.gadgets.labels ui.gadgets.theme
ui.gadgets.tracks ui.gadgets.packs ui.gadgets.worlds ui.gestures ui.gadgets.tracks ui.gadgets.packs ui.gadgets.worlds ui.gestures
ui.render math.geometry.rect locals alien.c-types ui.render math.rectangles locals alien.c-types
specialized-arrays.float fry combinators.smart ; specialized-arrays.float fry combinators.smart ;
IN: ui.gadgets.buttons IN: ui.gadgets.buttons

View File

@ -7,7 +7,7 @@ combinators assocs math.order fry calendar alarms continuations
ui.clipboards ui.commands ui.gadgets ui.gadgets.borders ui.clipboards ui.commands ui.gadgets ui.gadgets.borders
ui.gadgets.buttons ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.buttons ui.gadgets.labels ui.gadgets.scrollers
ui.gadgets.theme ui.gadgets.menus ui.gadgets.wrappers ui.render ui.gadgets.theme ui.gadgets.menus ui.gadgets.wrappers ui.render
ui.text ui.gestures math.geometry.rect splitting unicode.categories ui.text ui.gestures math.rectangles splitting unicode.categories
fonts ; fonts ;
IN: ui.gadgets.editors IN: ui.gadgets.editors

View File

@ -1,5 +1,5 @@
USING: help.markup help.syntax opengl kernel strings USING: help.markup help.syntax opengl kernel strings
classes.tuple classes quotations models math.geometry.rect classes.tuple classes quotations models math.rectangles
ui.gadgets.private ; ui.gadgets.private ;
IN: ui.gadgets IN: ui.gadgets

View File

@ -1,7 +1,7 @@
USING: accessors ui.gadgets ui.gadgets.private ui.gadgets.packs USING: accessors ui.gadgets ui.gadgets.private ui.gadgets.packs
ui.gadgets.worlds tools.test namespaces models kernel dlists deques ui.gadgets.worlds tools.test namespaces models kernel dlists deques
math sets math.parser ui sequences hashtables assocs io arrays math sets math.parser ui sequences hashtables assocs io arrays
prettyprint io.streams.string math.geometry.rect ; prettyprint io.streams.string math.rectangles ui.gadgets.private ;
IN: ui.gadgets.tests IN: ui.gadgets.tests
[ { 300 300 } ] [ { 300 300 } ]
@ -37,14 +37,14 @@ IN: ui.gadgets.tests
"g3" get "g2" get add-gadget drop "g3" get "g2" get add-gadget drop
[ { 30 30 } ] [ "g1" get screen-loc ] unit-test [ { 30 30 } ] [ "g1" get screen-loc ] unit-test
[ { 30 30 } ] [ "g1" get screen-rect rect-loc ] unit-test [ { 30 30 } ] [ "g1" get screen-rect loc>> ] unit-test
[ { 30 30 } ] [ "g1" get screen-rect rect-dim ] unit-test [ { 30 30 } ] [ "g1" get screen-rect dim>> ] unit-test
[ { 20 20 } ] [ "g2" get screen-loc ] unit-test [ { 20 20 } ] [ "g2" get screen-loc ] unit-test
[ { 20 20 } ] [ "g2" get screen-rect rect-loc ] unit-test [ { 20 20 } ] [ "g2" get screen-rect loc>> ] unit-test
[ { 50 180 } ] [ "g2" get screen-rect rect-dim ] unit-test [ { 50 180 } ] [ "g2" get screen-rect dim>> ] unit-test
[ { 0 0 } ] [ "g3" get screen-loc ] unit-test [ { 0 0 } ] [ "g3" get screen-loc ] unit-test
[ { 0 0 } ] [ "g3" get screen-rect rect-loc ] unit-test [ { 0 0 } ] [ "g3" get screen-rect loc>> ] unit-test
[ { 100 200 } ] [ "g3" get screen-rect rect-dim ] unit-test [ { 100 200 } ] [ "g3" get screen-rect dim>> ] unit-test
<gadget> "g1" set <gadget> "g1" set
"g1" get { 300 300 } >>dim drop "g1" get { 300 300 } >>dim drop
@ -57,9 +57,9 @@ IN: ui.gadgets.tests
"g3" get { 100 100 } >>loc "g3" get { 100 100 } >>loc
{ 20 20 } >>dim drop { 20 20 } >>dim drop
[ t ] [ { 30 30 } "g2" get inside? ] unit-test [ t ] [ { 30 30 } "g2" get contains-point? ] unit-test
[ t ] [ { 30 30 } "g1" get (pick-up) "g2" get eq? ] unit-test [ t ] [ { 30 30 } "g1" get pick-up "g2" get eq? ] unit-test
[ t ] [ { 30 30 } "g1" get pick-up "g2" get eq? ] unit-test [ t ] [ { 30 30 } "g1" get pick-up "g2" get eq? ] unit-test

View File

@ -3,16 +3,28 @@
USING: accessors arrays hashtables kernel models math namespaces USING: accessors arrays hashtables kernel models math namespaces
make sequences quotations math.vectors combinators sorting make sequences quotations math.vectors combinators sorting
binary-search vectors dlists deques models threads binary-search vectors dlists deques models threads
concurrency.flags math.order math.geometry.rect fry ; concurrency.flags math.order math.rectangles fry ;
IN: ui.gadgets IN: ui.gadgets
! Values for orientation slot ! Values for orientation slot
CONSTANT: horizontal { 1 0 } CONSTANT: horizontal { 1 0 }
CONSTANT: vertical { 0 1 } CONSTANT: vertical { 0 1 }
TUPLE: gadget < rect pref-dim parent children orientation focus TUPLE: gadget < rect
visible? root? clipped? layout-state graft-state graft-node pref-dim
interior boundary model ; parent
children
{ orientation initial: { 0 1 } }
focus
{ visible? initial: t }
root?
clipped?
layout-state
{ graft-state initial: { f f } }
graft-node
interior
boundary
model ;
M: gadget equal? 2drop f ; M: gadget equal? 2drop f ;
@ -24,13 +36,7 @@ M: gadget model-changed 2drop ;
: nth-gadget ( n gadget -- child ) children>> nth ; : nth-gadget ( n gadget -- child ) children>> nth ;
: init-gadget ( gadget -- gadget ) : new-gadget ( class -- gadget ) new ; inline
init-rect
{ 0 1 } >>orientation
t >>visible?
{ f f } >>graft-state ; inline
: new-gadget ( class -- gadget ) new init-gadget ; inline
: <gadget> ( -- gadget ) : <gadget> ( -- gadget )
gadget new-gadget ; gadget new-gadget ;
@ -52,7 +58,7 @@ GENERIC: user-input* ( str gadget -- ? )
M: gadget user-input* 2drop t ; M: gadget user-input* 2drop t ;
GENERIC: children-on ( rect/point gadget -- seq ) GENERIC: children-on ( rect gadget -- seq )
M: gadget children-on nip children>> ; M: gadget children-on nip children>> ;
@ -67,23 +73,20 @@ M: gadget children-on nip children>> ;
PRIVATE> PRIVATE>
: fast-children-on ( rect axis children -- from to ) : fast-children-on ( rect axis children -- from to )
[ [ rect-loc ] 2dip (fast-children-on) 0 or ] [ [ loc>> ] 2dip (fast-children-on) 0 or ]
[ [ rect-bounds v+ ] 2dip (fast-children-on) ?1+ ] [ [ rect-bounds v+ ] 2dip (fast-children-on) ?1+ ]
3bi ; 3bi ;
<PRIVATE M: gadget contains-rect? ( bounds gadget -- ? )
dup visible?>> [ call-next-method ] [ 2drop f ] if ;
: inside? ( bounds gadget -- ? ) M: gadget contains-point? ( loc gadget -- ? )
dup visible?>> [ intersects? ] [ 2drop f ] if ; dup visible?>> [ call-next-method ] [ 2drop f ] if ;
: (pick-up) ( point gadget -- gadget )
dupd children-on [ inside? ] with find-last nip ;
PRIVATE>
: pick-up ( point gadget -- child/f ) : pick-up ( point gadget -- child/f )
2dup (pick-up) dup 2dup [ dup point>rect ] dip children-on
[ nip [ rect-loc v- ] keep pick-up ] [ drop nip ] if ; [ contains-point? ] with find-last nip
[ [ loc>> v- ] keep pick-up ] [ nip ] ?if ;
: max-dim ( dims -- dim ) { 0 0 } [ vmax ] reduce ; : max-dim ( dims -- dim ) { 0 0 } [ vmax ] reduce ;

View File

@ -1,5 +1,5 @@
USING: ui.gadgets ui.gadgets.grids tools.test kernel arrays USING: ui.gadgets ui.gadgets.grids tools.test kernel arrays
namespaces math.geometry.rect accessors ui.gadgets.grids.private namespaces math.rectangles accessors ui.gadgets.grids.private
ui.gadgets.debug sequences ; ui.gadgets.debug sequences ;
IN: ui.gadgets.grids.tests IN: ui.gadgets.grids.tests
@ -45,9 +45,9 @@ IN: ui.gadgets.grids.tests
{ 10 10 } >>gap { 10 10 } >>gap
dup prefer dup prefer
dup layout dup layout
rect-dim dim>>
"a" get rect-dim "a" get dim>>
"b" get rect-dim "b" get dim>>
] unit-test ] unit-test
[ ] [ [ ] [

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: arrays kernel math math.order namespaces make sequences words io USING: arrays kernel math math.order namespaces make sequences words io
math.vectors ui.gadgets columns accessors strings.tables math.vectors ui.gadgets columns accessors strings.tables
math.geometry.rect locals fry ; math.rectangles fry ;
IN: ui.gadgets.grids IN: ui.gadgets.grids
TUPLE: grid < gadget TUPLE: grid < gadget
@ -17,14 +17,19 @@ grid
: <grid> ( children -- grid ) : <grid> ( children -- grid )
grid new-grid ; grid new-grid ;
:: grid-child ( grid i j -- gadget ) i j grid grid>> nth nth ; <PRIVATE
:: grid-add ( grid child i j -- grid ) : grid@ ( grid pair -- col# row )
grid i j grid-child unparent swap [ first2 ] [ grid>> ] bi* nth ;
grid child add-gadget
child i j grid grid>> nth set-nth ;
: grid-remove ( grid i j -- grid ) [ <gadget> ] 2dip grid-add ; PRIVATE>
: grid-child ( grid pair -- gadget ) grid@ nth ;
: grid-add ( grid child pair -- grid )
[ nip grid-child unparent ] [ drop add-gadget ] [ swapd grid@ set-nth ] 3tri ;
: grid-remove ( grid pair -- grid ) [ <gadget> ] dip grid-add ;
<PRIVATE <PRIVATE
@ -52,7 +57,7 @@ TUPLE: grid-layout grid gap fill? row-heights column-widths ;
grid>> flip [ first ] iterate-cell-dims ; grid>> flip [ first ] iterate-cell-dims ;
: <grid-layout> ( grid -- grid-layout ) : <grid-layout> ( grid -- grid-layout )
grid-layout new \ grid-layout new
swap swap
[ grid>> [ [ <cell> ] map ] map >>grid ] [ grid>> [ [ <cell> ] map ] map >>grid ]
[ fill?>> >>fill? ] [ fill?>> >>fill? ]
@ -72,12 +77,13 @@ TUPLE: grid-layout grid gap fill? row-heights column-widths ;
[ row-heights>> ] [ gap>> second ] bi [ row-heights>> ] [ gap>> second ] bi
accumulate-cell-dims ; accumulate-cell-dims ;
M: grid pref-dim* : grid-pref-dim ( grid-layout -- dim )
<grid-layout>
[ accumulate-cell-xs drop ] [ accumulate-cell-xs drop ]
[ accumulate-cell-ys drop ] [ accumulate-cell-ys drop ]
bi 2array ; bi 2array ;
M: grid pref-dim* <grid-layout> grid-pref-dim ;
: (compute-cell-locs) ( grid-layout -- locs ) : (compute-cell-locs) ( grid-layout -- locs )
[ accumulate-cell-xs nip ] [ accumulate-cell-xs nip ]
[ accumulate-cell-ys nip ] [ accumulate-cell-ys nip ]
@ -99,10 +105,12 @@ M: grid pref-dim*
[ grid>> [ [ pref-dim>> ] map ] map ] [ grid>> [ [ pref-dim>> ] map ] map ]
if ; if ;
M: grid layout* : grid-layout ( children grid-layout -- )
[ grid>> ] [ <grid-layout> [ cell-locs ] [ cell-dims ] bi ] bi [ cell-locs ] [ cell-dims ] bi
[ [ [ >>loc ] [ >>dim ] bi* drop ] 3each ] 3each ; [ [ [ >>loc ] [ >>dim ] bi* drop ] 3each ] 3each ;
M: grid layout* [ grid>> ] [ <grid-layout> ] bi grid-layout ;
M: grid children-on ( rect gadget -- seq ) M: grid children-on ( rect gadget -- seq )
dup children>> empty? [ 2drop f ] [ dup children>> empty? [ 2drop f ] [
{ 0 1 } swap grid>> { 0 1 } swap grid>>

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: io kernel math namespaces math.vectors ui.gadgets USING: io kernel math namespaces math.vectors ui.gadgets
ui.gadgets.private ui.gadgets.packs accessors ui.gadgets.private ui.gadgets.packs accessors
math.geometry.rect combinators ; math.rectangles combinators ;
IN: ui.gadgets.incremental IN: ui.gadgets.incremental
TUPLE: incremental < pack cursor ; TUPLE: incremental < pack cursor ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2009 Slava Pestov. ! Copyright (C) 2005, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: locals accessors kernel math namespaces sequences USING: locals accessors kernel math namespaces sequences
math.vectors colors math.geometry.rect ui.commands ui.operations ui.gadgets math.vectors colors math.rectangles ui.commands ui.operations ui.gadgets
ui.gadgets.buttons ui.gadgets.worlds ui.gestures ui.gadgets.theme ui.gadgets.buttons ui.gadgets.worlds ui.gestures ui.gadgets.theme
ui.gadgets.packs ui.gadgets.glass ui.gadgets.borders ; ui.gadgets.packs ui.gadgets.glass ui.gadgets.borders ;
IN: ui.gadgets.menus IN: ui.gadgets.menus

View File

@ -1,6 +1,6 @@
USING: ui.gadgets.packs ui.gadgets.packs.private ui.gadgets.labels USING: ui.gadgets.packs ui.gadgets.packs.private ui.gadgets.labels
ui.gadgets ui.gadgets.debug ui.render kernel namespaces tools.test ui.gadgets ui.gadgets.debug ui.render kernel namespaces tools.test
math.parser sequences math.geometry.rect accessors ; math.parser sequences math.rectangles accessors ;
IN: ui.gadgets.packs.tests IN: ui.gadgets.packs.tests
[ t ] [ [ t ] [

View File

@ -3,7 +3,7 @@
USING: arrays hashtables io kernel namespaces sequences USING: arrays hashtables io kernel namespaces sequences
io.styles strings quotations math opengl combinators memoize io.styles strings quotations math opengl combinators memoize
math.vectors sorting splitting assocs classes.tuple models math.vectors sorting splitting assocs classes.tuple models
continuations destructors accessors math.geometry.rect fry continuations destructors accessors math.rectangles fry
fonts ui.gadgets ui.gadgets.private ui.gadgets.borders ui.gadgets.buttons fonts ui.gadgets ui.gadgets.private ui.gadgets.borders ui.gadgets.buttons
ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.paragraphs ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.paragraphs
ui.gadgets.incremental ui.gadgets.packs ui.gadgets.theme ui.gadgets.incremental ui.gadgets.packs ui.gadgets.theme
@ -59,7 +59,7 @@ M: pane gadget-selection ( pane -- string/f )
GENERIC: draw-selection ( loc obj -- ) GENERIC: draw-selection ( loc obj -- )
: if-fits ( rect quot -- ) : if-fits ( rect quot -- )
[ clip get over intersects? ] dip [ drop ] if ; inline [ clip get over contains-rect? ] dip [ drop ] if ; inline
M: gadget draw-selection ( loc gadget -- ) M: gadget draw-selection ( loc gadget -- )
swap offset-rect [ swap offset-rect [
@ -341,7 +341,7 @@ M: pack sloppy-pick-up* ( loc gadget -- n )
[ orientation>> ] [ children>> ] bi (fast-children-on) ; [ orientation>> ] [ children>> ] bi (fast-children-on) ;
M: gadget sloppy-pick-up* M: gadget sloppy-pick-up*
children>> [ inside? ] with find-last drop ; children>> [ contains-point? ] with find-last drop ;
M: f sloppy-pick-up* M: f sloppy-pick-up*
2drop f ; 2drop f ;

View File

@ -1,5 +1,5 @@
USING: ui.gadgets help.markup help.syntax ui.gadgets.viewports USING: ui.gadgets help.markup help.syntax ui.gadgets.viewports
ui.gadgets.sliders math.geometry.rect ; ui.gadgets.sliders math.rectangles ;
IN: ui.gadgets.scrollers IN: ui.gadgets.scrollers
HELP: scroller HELP: scroller

View File

@ -2,7 +2,7 @@ USING: ui.gadgets ui.gadgets.scrollers namespaces tools.test
kernel models models.compose models.range ui.gadgets.viewports kernel models models.compose models.range ui.gadgets.viewports
ui.gadgets.labels ui.gadgets.grids ui.gadgets.frames ui.gadgets.labels ui.gadgets.grids ui.gadgets.frames
ui.gadgets.sliders math math.vectors arrays sequences ui.gadgets.sliders math math.vectors arrays sequences
tools.test.ui math.geometry.rect accessors ui.gadgets.buttons tools.test.ui math.rectangles accessors ui.gadgets.buttons
ui.gadgets.packs ; ui.gadgets.packs ;
IN: ui.gadgets.scrollers.tests IN: ui.gadgets.scrollers.tests
@ -12,8 +12,8 @@ IN: ui.gadgets.scrollers.tests
] unit-test ] unit-test
[ { 100 200 } ] [ [ { 100 200 } ] [
{ 100 200 } "g" get scroll>rect { 100 200 } point>rect "g" get scroll>rect
"s" get follows>> rect-loc "s" get follows>> loc>>
] unit-test ] unit-test
[ ] [ "s" get scroll>bottom ] unit-test [ ] [ "s" get scroll>bottom ] unit-test
@ -28,7 +28,7 @@ IN: ui.gadgets.scrollers.tests
"v" get [ "v" get [
[ { 10 20 } ] [ "v" get model>> range-value ] unit-test [ { 10 20 } ] [ "v" get model>> range-value ] unit-test
[ { 10 20 } ] [ "g" get rect-loc vneg viewport-gap v+ scroller-border v+ ] unit-test [ { 10 20 } ] [ "g" get loc>> vneg viewport-gap v+ scroller-border v+ ] unit-test
] with-grafted-gadget ] with-grafted-gadget
[ ] [ [ ] [
@ -41,7 +41,7 @@ IN: ui.gadgets.scrollers.tests
[ ] [ "s" get layout ] unit-test [ ] [ "s" get layout ] unit-test
"s" get [ "s" get [
[ { 34 34 } ] [ "s" get viewport>> rect-dim ] unit-test [ { 34 34 } ] [ "s" get viewport>> dim>> ] unit-test
[ { 107 107 } ] [ "s" get viewport>> viewport-dim ] unit-test [ { 107 107 } ] [ "s" get viewport>> viewport-dim ] unit-test
@ -57,7 +57,7 @@ IN: ui.gadgets.scrollers.tests
[ { 10 20 } ] [ "s" get viewport>> model>> range-value ] unit-test [ { 10 20 } ] [ "s" get viewport>> model>> range-value ] unit-test
[ { 10 20 } ] [ "g" get rect-loc vneg viewport-gap v+ scroller-border v+ ] unit-test [ { 10 20 } ] [ "g" get loc>> vneg viewport-gap v+ scroller-border v+ ] unit-test
] with-grafted-gadget ] with-grafted-gadget
<gadget> { 600 400 } >>dim "g1" set <gadget> { 600 400 } >>dim "g1" set

View File

@ -4,7 +4,7 @@ USING: accessors arrays ui.gadgets ui.gadgets.viewports
ui.gadgets.frames ui.gadgets.grids ui.gadgets.theme ui.gadgets.frames ui.gadgets.grids ui.gadgets.theme
ui.gadgets.sliders ui.gestures kernel math namespaces sequences ui.gadgets.sliders ui.gestures kernel math namespaces sequences
models models.range models.compose combinators math.vectors models models.range models.compose combinators math.vectors
classes.tuple math.geometry.rect combinators.short-circuit ; classes.tuple math.rectangles combinators.short-circuit ;
IN: ui.gadgets.scrollers IN: ui.gadgets.scrollers
TUPLE: scroller < frame viewport x y follows ; TUPLE: scroller < frame viewport x y follows ;
@ -63,7 +63,7 @@ scroller H{
{ {
[ scroller-value vneg offset-rect viewport-gap offset-rect ] [ scroller-value vneg offset-rect viewport-gap offset-rect ]
[ viewport>> dim>> rect-min ] [ viewport>> dim>> rect-min ]
[ viewport>> 2rect-extent [ v- { 0 0 } vmin ] [ v- { 0 0 } vmax ] 2bi* v+ ] [ viewport>> [ v- { 0 0 } vmin ] [ v- { 0 0 } vmax ] with-rect-extents v+ ]
[ scroller-value v+ ] [ scroller-value v+ ]
[ scroll ] [ scroll ]
} cleave ; } cleave ;

View File

@ -4,7 +4,7 @@ USING: accessors arrays ui.gestures ui.gadgets ui.gadgets.buttons
ui.gadgets.frames ui.gadgets.grids math.order ui.gadgets.frames ui.gadgets.grids math.order
ui.gadgets.theme ui.render kernel math namespaces sequences ui.gadgets.theme ui.render kernel math namespaces sequences
vectors models models.range math.vectors math.functions vectors models models.range math.vectors math.functions
quotations colors math.geometry.rect fry ; quotations colors math.rectangles fry ;
IN: ui.gadgets.sliders IN: ui.gadgets.sliders
TUPLE: elevator < gadget direction ; TUPLE: elevator < gadget direction ;

View File

@ -1,10 +1,11 @@
! Copyright (C) 2008, 2009 Slava Pestov. ! Copyright (C) 2008, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays colors fry kernel math USING: accessors arrays colors fry kernel math
math.geometry.rect math.order math.vectors namespaces opengl math.rectangles math.order math.vectors namespaces opengl
sequences ui.gadgets ui.gadgets.scrollers ui.gadgets.status-bar sequences ui.gadgets ui.gadgets.scrollers ui.gadgets.status-bar
ui.gadgets.worlds ui.gadgets.theme ui.gestures ui.render ui.text ui.gadgets.worlds ui.gadgets.theme ui.gestures ui.render ui.text
ui.gadgets.menus models math.ranges sequences combinators fonts ; ui.gadgets.menus math.rectangles models math.ranges sequences
combinators fonts ;
IN: ui.gadgets.tables IN: ui.gadgets.tables
! Row rendererer protocol ! Row rendererer protocol

View File

@ -1,5 +1,5 @@
USING: kernel ui.gadgets ui.gadgets.tracks tools.test USING: kernel ui.gadgets ui.gadgets.tracks tools.test
math.geometry.rect accessors ; math.rectangles accessors ;
IN: ui.gadgets.tracks.tests IN: ui.gadgets.tracks.tests
[ { 100 100 } ] [ [ { 100 100 } ] [

View File

@ -1,9 +1,8 @@
! Copyright (C) 2006, 2008 Slava Pestov. ! Copyright (C) 2006, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors io kernel namespaces fry USING: accessors io kernel namespaces fry
math math.vectors math.geometry.rect math.order math math.vectors math.rectangles math.order
sequences words ui.gadgets ui.gadgets.packs ; sequences words ui.gadgets ui.gadgets.packs ;
IN: ui.gadgets.tracks IN: ui.gadgets.tracks
TUPLE: track < pack sizes ; TUPLE: track < pack sizes ;
@ -12,14 +11,13 @@ TUPLE: track < pack sizes ;
sizes>> dup sift sum '[ dup [ _ / ] when ] map ; sizes>> dup sift sum '[ dup [ _ / ] when ] map ;
: init-track ( track -- track ) : init-track ( track -- track )
init-gadget
V{ } clone >>sizes V{ } clone >>sizes
1 >>fill ; 1 >>fill ; inline
: new-track ( orientation class -- track ) : new-track ( orientation class -- track )
new new-gadget
init-track init-track
swap >>orientation ; swap >>orientation ; inline
: <track> ( orientation -- track ) track new-track ; : <track> ( orientation -- track ) track new-track ;
@ -67,4 +65,4 @@ M: track pref-dim* ( gadget -- dim )
delete-nth delete-nth
] [ 2drop ] if ; ] [ 2drop ] if ;
: clear-track ( track -- ) V{ } clone >>sizes clear-gadget ; : clear-track ( track -- ) [ sizes>> delete-all ] [ clear-gadget ] bi ;

View File

@ -2,7 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays ui.gadgets ui.gadgets.borders USING: accessors arrays ui.gadgets ui.gadgets.borders
kernel math namespaces sequences models math.vectors kernel math namespaces sequences models math.vectors
math.geometry.rect ; math.rectangles ;
IN: ui.gadgets.viewports IN: ui.gadgets.viewports
CONSTANT: viewport-gap { 3 3 } CONSTANT: viewport-gap { 3 3 }

View File

@ -3,7 +3,7 @@
USING: accessors arrays assocs continuations kernel math models USING: accessors arrays assocs continuations kernel math models
namespaces opengl sequences io combinators combinators.short-circuit namespaces opengl sequences io combinators combinators.short-circuit
fry math.vectors ui.gadgets ui.gestures ui.render ui.text ui.text.private fry math.vectors ui.gadgets ui.gestures ui.render ui.text ui.text.private
ui.backend ui.gadgets.tracks math.geometry.rect ; ui.backend ui.gadgets.tracks math.rectangles ;
IN: ui.gadgets.worlds IN: ui.gadgets.worlds
TUPLE: world < track TUPLE: world < track

View File

@ -1,6 +1,6 @@
USING: ui.gadgets ui.gestures help.markup help.syntax USING: ui.gadgets ui.gestures help.markup help.syntax
kernel classes strings opengl opengl.gl models kernel classes strings opengl opengl.gl models
math.geometry.rect math colors ; math.rectangles math colors ;
IN: ui.render IN: ui.render
HELP: gadget HELP: gadget

View File

@ -3,7 +3,7 @@
USING: accessors alien alien.c-types arrays hashtables io kernel USING: accessors alien alien.c-types arrays hashtables io kernel
math namespaces opengl opengl.gl opengl.glu sequences strings math namespaces opengl opengl.gl opengl.glu sequences strings
vectors combinators math.vectors ui.gadgets colors vectors combinators math.vectors ui.gadgets colors
math.order math.geometry.rect locals specialized-arrays.float ; math.order math.rectangles locals specialized-arrays.float ;
IN: ui.render IN: ui.render
SYMBOL: clip SYMBOL: clip

View File

@ -1,7 +1,7 @@
USING: help.markup help.syntax strings quotations debugger USING: help.markup help.syntax strings quotations debugger
namespaces ui.backend ui.gadgets ui.gadgets.worlds namespaces ui.backend ui.gadgets ui.gadgets.worlds
ui.gadgets.tracks ui.gadgets.packs ui.gadgets.grids ui.gadgets.tracks ui.gadgets.packs ui.gadgets.grids
ui.gadgets.private math.geometry.rect colors ui.text fonts ; ui.gadgets.private math.rectangles colors ui.text fonts ;
IN: ui IN: ui
HELP: windows HELP: windows
@ -102,7 +102,7 @@ ARTICLE: "gadgets" "Pre-made UI gadgets"
ARTICLE: "ui-geometry" "Gadget geometry" ARTICLE: "ui-geometry" "Gadget geometry"
"The " { $link gadget } " class inherits from the " { $link rect } " class, and thus all gadgets have a bounding box:" "The " { $link gadget } " class inherits from the " { $link rect } " class, and thus all gadgets have a bounding box:"
{ $subsection "math.geometry.rect" } { $subsection "math.rectangles" }
"Word for converting from a child gadget's co-ordinate system to a parent's:" "Word for converting from a child gadget's co-ordinate system to a parent's:"
{ $subsection relative-loc } { $subsection relative-loc }
{ $subsection screen-loc } { $subsection screen-loc }

View File

@ -1,10 +1,10 @@
! Copyright (C) 2006, 2008 Slava Pestov. ! Copyright (C) 2006, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.functions math.parser models USING: kernel math math.functions math.parser models
models.filter models.range models.compose sequences ui models.filter models.range models.compose sequences ui
ui.gadgets ui.gadgets.frames ui.gadgets.labels ui.gadgets.packs ui.gadgets ui.gadgets.frames ui.gadgets.labels ui.gadgets.packs
ui.gadgets.sliders ui.render math.geometry.rect accessors ui.gadgets.sliders ui.render math.rectangles accessors
ui.gadgets.grids colors ; ui.gadgets.grids colors ;
IN: color-picker IN: color-picker
! Simple example demonstrating the use of models. ! Simple example demonstrating the use of models.

View File

@ -2,7 +2,7 @@ USING: windows.dinput windows.dinput.constants parser
alien.c-types windows.ole32 namespaces assocs kernel arrays alien.c-types windows.ole32 namespaces assocs kernel arrays
vectors windows.kernel32 windows.com windows.dinput shuffle vectors windows.kernel32 windows.com windows.dinput shuffle
windows.user32 windows.messages sequences combinators locals windows.user32 windows.messages sequences combinators locals
math.geometry.rect ui.windows accessors math windows alien math.rectangles ui.windows accessors math windows alien
alien.strings io.encodings.utf16 io.encodings.utf16n alien.strings io.encodings.utf16 io.encodings.utf16n
continuations byte-arrays game-input.dinput.keys-array continuations byte-arrays game-input.dinput.keys-array
game-input ; game-input ;

View File

@ -1,7 +1,7 @@
! From http://www.ffconsultancy.com/ocaml/maze/index.html ! From http://www.ffconsultancy.com/ocaml/maze/index.html
USING: sequences namespaces math math.vectors opengl opengl.gl USING: sequences namespaces math math.vectors opengl opengl.gl
arrays kernel random ui ui.gadgets ui.gadgets.canvas ui.render arrays kernel random ui ui.gadgets ui.gadgets.canvas ui.render
math.order math.geometry.rect ; math.order math.rectangles ;
IN: maze IN: maze
: line-width 8 ; : line-width 8 ;
@ -53,7 +53,7 @@ TUPLE: maze < canvas ;
: <maze> ( -- gadget ) maze new-canvas ; : <maze> ( -- gadget ) maze new-canvas ;
: n ( gadget -- n ) rect-dim first2 min line-width /i ; : n ( gadget -- n ) dim>> first2 min line-width /i ;
M: maze layout* delete-canvas-dlist ; M: maze layout* delete-canvas-dlist ;

View File

@ -1,4 +1,4 @@
USING: arrays assocs help.markup help.syntax math.geometry.rect quadtrees quotations sequences ; USING: arrays assocs help.markup help.syntax math.rectangles quadtrees quotations sequences ;
IN: quadtrees IN: quadtrees
ARTICLE: "quadtrees" "Quadtrees" ARTICLE: "quadtrees" "Quadtrees"

View File

@ -1,5 +1,5 @@
! (c) 2009 Joe Groff, see BSD license ! (c) 2009 Joe Groff, see BSD license
USING: assocs kernel tools.test quadtrees math.geometry.rect sorting ; USING: assocs kernel tools.test quadtrees math.rectangles sorting ;
IN: quadtrees.tests IN: quadtrees.tests
: unit-bounds ( -- rect ) { -1.0 -1.0 } { 2.0 2.0 } <rect> ; : unit-bounds ( -- rect ) { -1.0 -1.0 } { 2.0 2.0 } <rect> ;

View File

@ -1,5 +1,5 @@
! (c) 2009 Joe Groff, see BSD license ! (c) 2009 Joe Groff, see BSD license
USING: assocs kernel math.geometry.rect combinators accessors USING: assocs kernel math.rectangles combinators accessors
math.vectors vectors sequences math math.points math.geometry math.vectors vectors sequences math math.points math.geometry
combinators.short-circuit arrays fry locals ; combinators.short-circuit arrays fry locals ;
IN: quadtrees IN: quadtrees

View File

@ -1,6 +1,6 @@
! Copyright (C) 2006, 2007, 2008 Alex Chapman ! Copyright (C) 2006, 2007, 2008 Alex Chapman
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors alarms arrays calendar kernel make math math.geometry.rect math.parser namespaces sequences system tetris.game tetris.gl ui.gadgets ui.gadgets.labels ui.gadgets.worlds ui.gadgets.status-bar ui.gestures ui.render ui ; USING: accessors alarms arrays calendar kernel make math math.rectangles math.parser namespaces sequences system tetris.game tetris.gl ui.gadgets ui.gadgets.labels ui.gadgets.worlds ui.gadgets.status-bar ui.gestures ui.render ui ;
IN: tetris IN: tetris
TUPLE: tetris-gadget < gadget { tetris tetris } { alarm } ; TUPLE: tetris-gadget < gadget { tetris tetris } { alarm } ;
@ -18,7 +18,7 @@ M: tetris-gadget pref-dim* drop { 200 400 } ;
M: tetris-gadget draw-gadget* ( gadget -- ) M: tetris-gadget draw-gadget* ( gadget -- )
[ [
dup rect-dim [ first ] [ second ] bi rot tetris>> draw-tetris [ dim>> first2 ] [ tetris>> ] bi draw-tetris
] keep update-status ; ] keep update-status ;
: new-tetris ( gadget -- gadget ) : new-tetris ( gadget -- gadget )

View File

@ -1,6 +1,6 @@
! Copyright (C) 2006, 2009 Slava Pestov. ! Copyright (C) 2006, 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors math.vectors classes.tuple math.geometry.rect colors USING: accessors math.vectors classes.tuple math.rectangles colors
kernel sequences models opengl math math.order namespaces kernel sequences models opengl math math.order namespaces
ui.commands ui.gestures ui.render ui.gadgets ui.commands ui.gestures ui.render ui.gadgets
ui.gadgets.labels ui.gadgets.scrollers ui.gadgets.labels ui.gadgets.scrollers