]> gitweb.factorcode.org Git - factor.git/commitdiff
big cleanup of UI code
authorSlava Pestov <slava@factorcode.org>
Wed, 29 Jun 2005 23:40:44 +0000 (23:40 +0000)
committerSlava Pestov <slava@factorcode.org>
Wed, 29 Jun 2005 23:40:44 +0000 (23:40 +0000)
15 files changed:
library/math/math.factor
library/test/gadgets.factor
library/ui/borders.factor
library/ui/checkboxes.factor
library/ui/frames.factor
library/ui/init-world.factor
library/ui/layouts.factor
library/ui/load.factor
library/ui/menus.factor
library/ui/piles.factor [deleted file]
library/ui/presentations.factor
library/ui/scrolling.factor
library/ui/shelves.factor [deleted file]
library/ui/splitters.factor
library/ui/stacks.factor [deleted file]

index bc962eb5f5076ffa996f82b44b120d360f0afa17..b1aab5208d5d286e11af1aef4c6d0bf51cfb97e1 100644 (file)
@@ -60,19 +60,16 @@ GENERIC: abs ( z -- |z| )
     2dup mod dup 0 number= [ 2drop ] [ - + ] ifte ;
 
 : (repeat) ( i n quot -- )
-    pick pick >= [
-        3drop
-    ] [
-        [ swap >r call 1 + r> ] keep (repeat)
-    ] ifte ; inline
+    pick pick >=
+    [ 3drop ] [ [ swap >r call 1 + r> ] keep (repeat) ] ifte ;
+    inline
 
-: repeat ( n quot -- )
-    #! Execute a quotation n times. The loop counter is kept on
-    #! the stack, and ranges from 0 to n-1.
+: repeat ( n quot -- | quot: n -- n )
+    #! The loop counter is kept on the stack, and ranges from
+    #! 0 to n-1.
     0 -rot (repeat) ; inline
 
-: times ( n quot -- )
-    #! Evaluate a quotation n times.
+: times ( n quot -- | quot: -- )
     swap [ >r dup slip r> ] repeat drop ; inline
 
 : 2repeat ( i j quot -- | quot: i j -- i j )
index 8f0bf9f23cc8856d3b24b7ce4cd66e105f316c04..ed9c9aca1481c6d3340dd9d6fe75d180ca27aada 100644 (file)
@@ -67,16 +67,6 @@ USING: gadgets kernel lists math namespaces test sequences ;
     ] with-scope
 ] unit-test
 
-[
-    300 620
-] [
-    0 { 10 10 10 } 0 <pile> "pile" set
-    0 0 100 100 <rectangle> <gadget> "pile" get add-gadget
-    0 0 200 200 <rectangle> <gadget> "pile" get add-gadget
-    0 0 300 300 <rectangle> <gadget> "pile" get add-gadget
-    "pile" get pref-size
-] unit-test
-
 [ ] [ "pile" get layout* ] unit-test
 
 [
index a7205167a5e349262d2cbb94e8e0402b806d4a27..2898a4de3a740583a634c3649d353b9e8f9c8cf7 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: gadgets
-USING: errors generic hashtables kernel lists math namespaces
-sdl vectors ;
+USING: errors generic hashtables kernel lists math matrices
+namespaces sdl vectors ;
 
 ! A border lays out its children on top of each other, all with
 ! a 5-pixel padding.
@@ -34,8 +34,8 @@ C: border ( child delegate size -- border )
     gadget-child resize-gadget ;
 
 M: border pref-dim ( border -- dim )
-    [ border-size 2 * ] keep
-    gadget-child pref-size >r over + r> rot + 0 3vector ;
+    [ border-size dup dup 3vector 2 v*n ] keep
+    gadget-child pref-dim v+ ;
 
 M: border layout* ( border -- )
     dup layout-border-x/y layout-border-w/h ;
index 1c66061f07220441626ecc5ffb9260f39c60515a..5c2b129c08ceccc3062c95eed81ca3442dcc99b5 100644 (file)
@@ -41,7 +41,7 @@ TUPLE: checkbox bevel selected? ;
     [ checkbox-bevel button-update ] [ mouse-enter ] set-action ;
 
 C: checkbox ( label -- checkbox )
-    <default-shelf> over set-delegate
+    <line-shelf> over set-delegate
     [ f line-border swap init-checkbox-bevel ] keep
     [ >r <label> r> add-gadget ] keep
     dup checkbox-actions
index c298e0c2cfc8af627cf82764a321d84504407d8c..bc12da66f6939199652d80bb7706a5c6c7c8d98e 100644 (file)
@@ -113,4 +113,4 @@ SYMBOL: frame-bottom-run
     frame-bottom pos-frame-bottom ;
 
 M: frame layout* ( frame -- )
-    [ dup setup-frame  layout-frame ] with-layout ;
+    [ 0 x set 0 y set dup setup-frame layout-frame ] with-scope ;
index f4f7a6566d6c760b7ef92810a3dfc6cceabfc192..8474ff434f9b4353e14a799e39b5afc749881378 100644 (file)
@@ -18,9 +18,9 @@ global [
         [[ font-style plain ]]
     }} world get set-gadget-paint
     
-    1024 768 world get resize-gadget
+    { 1024 768 0 } world get set-gadget-dim
     
-    <plain-gadget> world get add-gadget
+    <plain-gadget> add-layer
 
     <console> "Stack display goes here" <label> <y-splitter>
     3/4 over set-splitter-split add-layer
index 89227ad18fe38f12d9f02755a25ccc90b378643d..daf7e91c5c0feaef852d09a01aca07978b359455 100644 (file)
@@ -19,21 +19,84 @@ namespaces sdl sequences ;
         drop
     ] ifte ;
 
-: with-pref-size ( quot -- )
-    [
-        0 width set  0 height set  call  width get height get
-    ] with-scope ; inline
-
-: with-layout ( quot -- )
-    [ 0 x set 0 y set call ] with-scope ; inline
+GENERIC: alignment
+GENERIC: filling
+GENERIC: orientation
 
 : pref-dims ( gadget -- list )
     gadget-children [ pref-dim ] map ;
 
-: packed-pref-dim ( gadget gap axis -- dim )
+: packed-pref-dim ( gadget -- dim )
     #! The preferred size of the gadget, if all children are
     #! packed in the direction of the given axis.
-    >r
-    over length 0 max v*n >r pref-dims r>
-    2dup [ v+ ] reduce >r [ vmax ] reduce r>
-    r> set-axis ;
+    [
+        pref-dims
+        [ { 0 0 0 } [ vmax ] reduce ] keep
+        { 0 0 0 } [ v+ ] reduce
+    ] keep orientation set-axis ;
+
+: orient ( gadget list1 list2 -- list )
+    zip >r orientation r> [ uncons rot set-axis ] map-with ;
+
+: packed-dim-2 ( gadget sizes -- list )
+    [ over shape-dim over v- rot filling v*n v+ ] map-with ;
+
+: (packed-dims) ( gadget sizes -- list )
+    2dup packed-dim-2 swap orient ;
+
+: packed-dims ( gadget sizes -- list )
+    over gadget-children >r (packed-dims) r>
+    zip [ uncons set-gadget-dim ] each ;
+
+: packed-loc-1 ( sizes -- list )
+    { 0 0 0 } [ v+ ] accumulate ;
+
+: packed-loc-2 ( gadget sizes -- list )
+    >r dup shape-dim over r> packed-dim-2 [ v- ] map-with
+    >r dup alignment swap shape-dim r>
+    [ >r 2dup r> v- n*v ] map 2nip ;
+
+: (packed-locs) ( gadget sizes -- list )
+    dup packed-loc-1 >r dupd packed-loc-2 r> orient ;
+
+: packed-locs ( gadget sizes -- )
+    over gadget-children >r (packed-locs) r>
+    zip [ uncons set-gadget-loc ] each ;
+
+: packed-layout ( gadget sizes -- )
+    2dup packed-locs packed-dims ;
+
+TUPLE: pack align fill vector ;
+
+C: pack ( align fill vector -- pack )
+    #! align: 0 left aligns, 1/2 center, 1 right.
+    #! gap: between each child.
+    #! fill: 0 leaves default width, 1 fills to pack width.
+    [ <empty-gadget> swap set-delegate ] keep
+    [ set-pack-vector ] keep
+    [ set-pack-fill ] keep
+    [ set-pack-align ] keep ;
+
+: <pile> { 0 1 0 } <pack> ;
+
+: <line-pile> 0 1 <pile> ;
+
+: <shelf> { 1 0 0 } <pack> ;
+
+: <line-shelf> 0 1 <shelf> ;
+
+M: pack orientation pack-vector ;
+
+M: pack filling pack-fill ;
+
+M: pack alignment pack-align ;
+
+M: pack pref-dim packed-pref-dim ;
+
+M: pack layout* ( pack -- )
+    dup pref-dims packed-layout ;
+
+: <stack> ( list -- gadget )
+    #! A stack lays out all its children on top of each other.
+    0 1 { 0 0 1 } <pack>
+    swap [ over add-gadget ] each ;
index f5fc285acdc5a0651dbc454346cd4fbb961ebebf..8b5dd8d54479b17e26cfa433ffc106598a143c26 100644 (file)
@@ -14,10 +14,7 @@ USING: kernel parser sequences io ;
     "/library/ui/gestures.factor"
     "/library/ui/hand.factor"
     "/library/ui/layouts.factor"
-    "/library/ui/piles.factor"
-    "/library/ui/shelves.factor"
     "/library/ui/borders.factor"
-    "/library/ui/stacks.factor"
     "/library/ui/frames.factor"
     "/library/ui/world.factor"
     "/library/ui/labels.factor"
index d6eae16dd35598c11433a6638e50a296f2ad2afc..fb734e36b94b46eb0f2e5344946a29f79e8c0d56 100644 (file)
@@ -12,7 +12,7 @@ USING: generic kernel lists math namespaces sequences ;
     hide-menu
     world get
     2dup set-world-menu
-    2dup world-hand screen-pos >rect rot move-gadget
+    2dup world-hand screen-loc swap set-gadget-loc
     show-glass ;
 
 : menu-item-border ( child -- border )
diff --git a/library/ui/piles.factor b/library/ui/piles.factor
deleted file mode 100644 (file)
index b41cb43..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: gadgets
-USING: errors generic hashtables kernel lists math namespaces
-sdl sequences vectors ;
-
-! pile-align
-!
-! if the component is smaller than its allocated space, where to
-! place the component inside the allocated space.
-!
-! pile-gap
-! 
-! amount of space, in pixels, between components.
-! 
-! pile-fill
-! 
-! if the component is smaller than its allocated space, how much
-! to scale the size, where a value of 0 represents no scaling, and
-! a value of 1 represents resizing to fully fill allocated space.
-TUPLE: pile align gap fill ;
-
-C: pile ( align gap fill -- pile )
-    #! align: 0 left aligns, 1/2 center, 1 right.
-    #! gap: between each child.
-    #! fill: 0 leaves default width, 1 fills to pile width.
-    [ <empty-gadget> swap set-delegate ] keep
-    [ set-pile-fill ] keep
-    [ set-pile-gap ] keep
-    [ set-pile-align ] keep ;
-
-: <line-pile> 0 { 0 0 0 } 1 <pile> ;
-
-M: pile pref-dim ( pile -- dim )
-    dup pile-gap { 0 1 0 } packed-pref-dim ;
-
-: w- swap shape-w swap pref-size drop - ;
-: pile-x/y ( pile gadget offset -- )
-    rot pile-align * >fixnum y get rot move-gadget ;
-: pile-w/h ( pile gadget offset -- )
-    rot dup pile-gap first y [ + ] change
-    pile-fill * >fixnum over pref-size dup y [ + ] change
-    >r + r> rot resize-gadget ;
-: vertically ( pile gadget -- ) 2dup w- 3dup pile-x/y pile-w/h ;
-
-M: pile layout* ( pile -- )
-    [
-        dup gadget-children [ vertically ] each-with
-    ] with-layout ;
index 8c4267db08c02d2ccf6d39d03401dbb1261473c1..1a41b7b9c36c5846c258bd780b4c5e72f8ca5de0 100644 (file)
@@ -4,6 +4,8 @@ IN: gadgets
 USING: hashtables io kernel lists namespaces parser prettyprint
 sequences ;
 
+DEFER: pane-eval
+
 : actions-menu ( pane actions -- menu )
     [ uncons rot [ pane-eval ] cons cons cons ] map-with <menu> ;
 
index 78c691aadd1a9b3962bd306c3c296b340369b0b6..f378350b3f13aeb818132802a79eb82356393e07 100644 (file)
@@ -13,8 +13,6 @@ TUPLE: viewport origin ;
 : set-viewport-x [ viewport-y 0 3vector ] keep set-viewport-origin ;
 : set-viewport-y [ viewport-x swap 0 3vector ] keep set-viewport-origin ;
 
-: viewport-h ( viewport -- h ) gadget-child pref-size nip ;
-
 : viewport-dim ( viewport -- h ) gadget-child pref-dim ;
 
 : fix-scroll ( origin viewport -- origin )
@@ -23,12 +21,6 @@ TUPLE: viewport origin ;
 : scroll ( origin viewport -- )
     [ fix-scroll ] keep [ set-viewport-origin ] keep relayout ;
 
-: scroll-viewport ( y viewport -- )
-    #! y is a number between -1 and 0..
-    [ viewport-h * >fixnum ] keep
-    [ viewport-x swap 0 3vector ] keep 
-    scroll ;
-
 C: viewport ( content -- viewport )
     [ <empty-gadget> swap set-delegate ] keep
     [ add-gadget ] keep
diff --git a/library/ui/shelves.factor b/library/ui/shelves.factor
deleted file mode 100644 (file)
index 0aaf0f9..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: gadgets
-USING: errors generic hashtables kernel lists math namespaces
-sdl sequences vectors ;
-
-! A shelf is a box that lays out its contents horizontally.
-TUPLE: shelf gap align fill ;
-
-C: shelf ( align gap fill -- shelf )
-    #! align: 0 left aligns, 1/2 center, 1 right.
-    #! gap: between each child.
-    #! fill: 0 leaves default width, 1 fills to pile width.
-    <empty-gadget> over set-delegate
-    [ set-shelf-fill ] keep
-    [ set-shelf-gap ] keep
-    [ set-shelf-align ] keep ;
-
-: <default-shelf> 1/2 { 3 3 3 } 0 <shelf> ;
-: <line-shelf> 0 0 1 <shelf> ;
-
-M: shelf pref-dim ( pile -- dim )
-    [
-        dup shelf-gap swap gadget-children
-        [ length 1 - 0 max * width set ] keep
-        [
-            pref-size
-            height [ max ] change
-            width [ + ] change
-        ] each
-    ] with-pref-size 0 3vector ;
-
-: h- swap shape-h swap pref-size nip - ;
-: shelf-x/y rot shelf-align * >fixnum >r x get r> rot move-gadget ;
-: shelf-w/h ( shelf gadget offset -- )
-    rot dup shelf-gap x [ + ] change
-    shelf-fill * >fixnum >r dup pref-size over x [ + ] change
-    r> + rot resize-gadget ; 
-: horizontally ( shelf gadget -- )
-    2dup h- 3dup shelf-x/y shelf-w/h ;
-
-M: shelf layout* ( pile -- )
-    [
-        dup gadget-children [ horizontally ] each-with
-    ] with-layout ;
index e9f8560d55c8aae139c19bbbc3ea44293a1e2bce..801d162d3f8543c9ce29d4d86a7376517653d3c5 100644 (file)
@@ -43,8 +43,13 @@ C: splitter ( first second vector -- splitter )
 
 : <y-splitter> { 1 0 0 } <splitter> ;
 
-M: splitter pref-dim
-    { 0 0 0 } over splitter-vector packed-pref-dim ;
+M: splitter orientation splitter-vector ;
+
+M: splitter filling drop 1 ;
+
+M: splitter alignment drop 0 ;
+
+M: splitter pref-dim packed-pref-dim ;
 
 : splitter-part ( splitter -- vec )
     dup splitter-split swap shape-dim n*v divider-size 1/2 v*n v- ;
@@ -56,22 +61,5 @@ M: splitter pref-dim
         dup shape-dim swap splitter-part v- ,
     ] make-list ;
 
-: packed-locs ( axis sizes gadget -- )
-    >r
-    { 0 0 0 } [ v+ ] accumulate
-    [ { 0 0 0 } swap rot set-axis ] map-with
-    r> gadget-children zip [ uncons set-gadget-loc ] each ;
-
-: packed-dims ( axis sizes gadget -- dims )
-    [
-        shape-dim swap [ >r 2dup r> rot set-axis ] map 2nip
-    ] keep gadget-children zip [ uncons set-gadget-dim ] each ;
-
-: layout-divider ( assoc -- )
-    [ uncons set-gadget-dim ] each ;
-
-: packed-layout ( axis sizes gadgets -- )
-    3dup packed-locs packed-dims ;
-
 M: splitter layout* ( splitter -- )
-    dup splitter-vector over splitter-layout rot packed-layout ;
+    dup splitter-layout packed-layout ;
diff --git a/library/ui/stacks.factor b/library/ui/stacks.factor
deleted file mode 100644 (file)
index 7133200..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-IN: gadgets
-USING: errors generic hashtables kernel lists math matrices
-namespaces sdl sequences ;
-
-! A stack just lays out all its children on top of each other.
-TUPLE: stack ;
-C: stack ( list -- stack )
-    <empty-gadget> over set-delegate
-    swap [ over add-gadget ] each ;
-
-: max-dim ( shapelist -- dim )
-    { 0 0 0 } [ shape-dim vmax ] reduce ;
-
-M: stack pref-dim gadget-children max-dim ;
-
-M: stack layout* ( stack -- )
-    dup shape-dim swap gadget-children
-    [ set-gadget-dim ] each-with ;