]> gitweb.factorcode.org Git - factor.git/commitdiff
remove paint namespace binding in ui
authorSlava Pestov <slava@factorcode.org>
Thu, 14 Jul 2005 01:03:34 +0000 (01:03 +0000)
committerSlava Pestov <slava@factorcode.org>
Thu, 14 Jul 2005 01:03:34 +0000 (01:03 +0000)
20 files changed:
library/styles.factor
library/test/gadgets/line-editor.factor [new file with mode: 0644]
library/test/line-editor.factor [deleted file]
library/ui/borders.factor
library/ui/colors.factor [deleted file]
library/ui/editors.factor
library/ui/frames.factor
library/ui/gadgets.factor
library/ui/hand.factor
library/ui/hierarchy.factor
library/ui/init-world.factor
library/ui/labels.factor
library/ui/layouts.factor
library/ui/load.factor
library/ui/paint.factor
library/ui/rectangles.factor [deleted file]
library/ui/scrolling.factor
library/ui/shapes.factor
library/ui/text.factor
library/ui/world.factor

index 61d69d5969ecb16c98438daaaeb4492f32ea9cf3..0f95ba97b0bebb5f4772828998a3abdfd38302e6 100644 (file)
@@ -1,25 +1,21 @@
 ! Copyright (C) 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 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: background ! Used for filled shapes.
 SYMBOL: rollover-bg
 SYMBOL: rollover
 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-size
 SYMBOL: font-style
diff --git a/library/test/gadgets/line-editor.factor b/library/test/gadgets/line-editor.factor
new file mode 100644 (file)
index 0000000..8e40391
--- /dev/null
@@ -0,0 +1,66 @@
+IN: temporary
+USING: kernel line-editor namespaces sequences strings test ;
+
+<line-editor> "editor" set
+
+[ "Hello world" ] [
+    "Hello world" 0 "editor" get [ line-insert ] bind
+    "editor" get [ line-text get ] bind
+] unit-test
+
+[ t ] [
+    "editor" get [ caret get ] bind
+    "Hello world" length =
+] unit-test
+
+[ "Hello, crazy world" ] [
+    "editor" get [ 0 caret set ] bind
+    ", crazy" 5 "editor" get [ line-insert ] bind
+    "editor" get [ line-text get ] bind
+] unit-test
+
+[ 0 ] [ "editor" get [ caret get ] bind ] unit-test
+
+[ "Hello, crazy world" ] [
+    "editor" get [ 5 caret set "Hello world" line-text set ] bind
+    ", crazy" 5 "editor" get [ line-insert ] bind
+    "editor" get [ line-text get ] bind
+] unit-test
+
+[ "Hello, crazy" ] [
+    "editor" get [ caret get line-text get head ] bind
+] unit-test
+
+[ 0 ]
+[
+    [
+        0 caret set
+        3 2 caret-remove
+        caret get
+    ] with-scope
+] unit-test
+
+[ 3 ]
+[
+    [
+        4 caret set
+        3 6 caret-remove
+        caret get
+    ] with-scope
+] unit-test
+
+[ 5 ]
+[
+    [
+        8 caret set
+        3 3 caret-remove
+        caret get
+    ] with-scope
+] unit-test
+
+[ "Hellorld" ]
+[
+    "editor" get [ 0 caret set "Hello world" line-text set ] bind
+    4 3 "editor" get [ line-remove ] bind
+    "editor" get [ line-text get ] bind
+] unit-test
diff --git a/library/test/line-editor.factor b/library/test/line-editor.factor
deleted file mode 100644 (file)
index 8e40391..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-IN: temporary
-USING: kernel line-editor namespaces sequences strings test ;
-
-<line-editor> "editor" set
-
-[ "Hello world" ] [
-    "Hello world" 0 "editor" get [ line-insert ] bind
-    "editor" get [ line-text get ] bind
-] unit-test
-
-[ t ] [
-    "editor" get [ caret get ] bind
-    "Hello world" length =
-] unit-test
-
-[ "Hello, crazy world" ] [
-    "editor" get [ 0 caret set ] bind
-    ", crazy" 5 "editor" get [ line-insert ] bind
-    "editor" get [ line-text get ] bind
-] unit-test
-
-[ 0 ] [ "editor" get [ caret get ] bind ] unit-test
-
-[ "Hello, crazy world" ] [
-    "editor" get [ 5 caret set "Hello world" line-text set ] bind
-    ", crazy" 5 "editor" get [ line-insert ] bind
-    "editor" get [ line-text get ] bind
-] unit-test
-
-[ "Hello, crazy" ] [
-    "editor" get [ caret get line-text get head ] bind
-] unit-test
-
-[ 0 ]
-[
-    [
-        0 caret set
-        3 2 caret-remove
-        caret get
-    ] with-scope
-] unit-test
-
-[ 3 ]
-[
-    [
-        4 caret set
-        3 6 caret-remove
-        caret get
-    ] with-scope
-] unit-test
-
-[ 5 ]
-[
-    [
-        8 caret set
-        3 3 caret-remove
-        caret get
-    ] with-scope
-] unit-test
-
-[ "Hellorld" ]
-[
-    "editor" get [ 0 caret set "Hello world" line-text set ] bind
-    4 3 "editor" get [ line-remove ] bind
-    "editor" get [ line-text get ] bind
-] unit-test
index e7d0c3788697b02183db3fc7234b163df709b5bd..e19ac141976f626fa56a10661ee3bdbfcf70e8a8 100644 (file)
@@ -12,7 +12,7 @@ C: border ( child delegate size -- border )
     [ over [ add-gadget ] [ 2drop ] ifte ] keep ;
 
 : 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 -- )
     dup border-size swap gadget-child set-shape-loc ;
diff --git a/library/ui/colors.factor b/library/ui/colors.factor
deleted file mode 100644 (file)
index 9ba8bac..0000000
+++ /dev/null
@@ -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 ] ;
index a0ffd0dd5e5733cf6d1d86ebbc6aae138e41bcd3..f4027a4af8374ba67161810e331b67e3706053b6 100644 (file)
@@ -67,7 +67,7 @@ TUPLE: editor line caret ;
     <plain-gadget> dup red background set-paint-prop ;
 
 C: editor ( text -- )
-    <empty-gadget> over set-delegate
+    <gadget> over set-delegate
     [ <line-editor> swap set-editor-line ] keep
     [ <caret> swap set-editor-caret ] 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 swap caret-loc swap set-shape-loc ;
 
-M: editor draw-shape ( editor -- )
-    [ dup gadget-font swap editor-text ] keep
-    [ draw-string ] with-trans ;
+M: editor draw-gadget* ( editor -- )
+    dup editor-text over [ draw-string ] with-trans ;
index e8ab8af6d1a3f69e1a84cfeda80691e39825a222..6dc1dbba94f41c00570b4dfdae0332c9aa8aa1bc 100644 (file)
@@ -20,12 +20,12 @@ TUPLE: frame left right top bottom center ;
     dup frame-bottom unparent 2dup set-frame-bottom add-gadget ;
 
 C: frame ( -- frame )
-    [ <empty-gadget> swap set-delegate ] keep
-    [ <empty-gadget> swap set-frame-center ] keep
-    [ <empty-gadget> swap set-frame-left ] keep
-    [ <empty-gadget> swap set-frame-right ] keep
-    [ <empty-gadget> swap set-frame-top ] keep
-    [ <empty-gadget> swap set-frame-bottom ] keep ;
+    [ <gadget> swap set-delegate ] keep
+    [ <gadget> swap set-frame-center ] keep
+    [ <gadget> swap set-frame-left ] keep
+    [ <gadget> swap set-frame-right ] keep
+    [ <gadget> swap set-frame-top ] keep
+    [ <gadget> swap set-frame-bottom ] keep ;
 
 : frame-major ( frame -- list )
     [
index 55aae68a33e73124552d6f19bc3946d58e77eb2b..d369a7fd473d4b6d29c70f3d2feea881b6bfb6a9 100644 (file)
@@ -11,16 +11,18 @@ TUPLE: gadget paint gestures relayout? root? parent children ;
 
 : gadget-child gadget-children car ;
 
-C: gadget ( shape -- gadget )
-    [ set-delegate ] keep
+C: gadget ( -- gadget )
+    { 0 0 0 } dup <rectangle> over set-delegate
     <namespace> over set-gadget-paint
     <namespace> over set-gadget-gestures ;
 
-: <empty-gadget> ( -- gadget )
-    { 0 0 0 } dup <rectangle> <gadget> ;
+TUPLE: plain-gadget ;
 
-: <plain-gadget> ( -- gadget )
-    { 0 0 0 } dup <plain-rect> <gadget> ;
+C: plain-gadget <gadget> over set-delegate ;
+
+TUPLE: etched-gadget ;
+
+C: etched-gadget <gadget> over set-delegate ;
 
 DEFER: add-invalid
 
@@ -50,20 +52,6 @@ DEFER: add-invalid
     2dup shape-dim =
     [ 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 )
 
 M: gadget pref-dim shape-dim ;
index ff9530d7b328d6be01ad94b6c623e295ccdc82f3..033dbc5a29ae2a97c83144bbc76cb4fb03301bec 100644 (file)
@@ -38,7 +38,7 @@ DEFER: pick-up
 TUPLE: hand click-loc click-rel clicked buttons gadget focus ;
 
 C: hand ( world -- hand )
-    <empty-gadget> over set-delegate
+    <gadget> over set-delegate
     [ set-gadget-parent ] 2keep
     [ set-hand-gadget ] keep ;
 
index 6211246f5389a187602b78c512b477cc29532980..df8645c4f9291901bff593f9302157e75eac37a0 100644 (file)
@@ -25,35 +25,19 @@ sequences ;
     #! Add a gadget to a parent gadget.
     [ (add-gadget) ] keep relayout ;
 
-: (parents) ( gadget -- )
-    [ dup gadget-parent (parents) , ] when* ;
-
 : parents ( gadget -- list )
-    #! A list of all parents of the gadget, including the
-    #! gadget itself.
-    [ (parents) ] make-list ;
-
-: (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
+    #! A list of all parents of the gadget, the first element
+    #! is the gadget itself.
+    dup [ dup gadget-parent parents cons ] when ;
 
 : each-parent ( gadget quot -- ? )
     #! Keep executing the quotation on higher and higher
     #! parents until it returns f.
-    >r parents r> (each-parent) ; inline
+    >r parents r> all? ; inline
 
 : screen-loc ( gadget -- point )
     #! 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 )
     screen-loc swap screen-loc v- ;
index ed7ffca7d9a53969425d9cb6dc339c04d1a41892..f25abbf7972d7337eab3eec5099001bfce41d1e8 100644 (file)
@@ -27,7 +27,9 @@ USING: generic io kernel listener math namespaces styles threads ;
         
         [ [ clear  print-banner listener ] with-stream ] in-thread
         
-        request-focus
+        dup request-focus
+        
+        pane set
     ] bind ;
 
 SYMBOL: first-time
index feb0dc1d0bc2e0335935085e020f8346d5ebe0a0..fc3657be775806858018071b655a486ea0f6a714 100644 (file)
@@ -8,7 +8,7 @@ sequences styles vectors ;
 TUPLE: label text ;
 
 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 )
     >r gadget-font r> size-string 0 3vector ;
@@ -16,6 +16,5 @@ C: label ( text -- label )
 M: label pref-dim ( label -- dim )
     dup label-text label-size ;
 
-M: label draw-shape ( label -- )
-    [ dup gadget-font swap label-text ] keep
-    [ draw-string ] with-trans ;
+M: label draw-gadget* ( label -- )
+    dup label-text over [ draw-string ] with-trans ;
index 0aaa504a9d4c6ef69bf2daae534b9694b5035970..90cfa1467a4217ef5124f006b045672f9ffa12aa 100644 (file)
@@ -11,10 +11,8 @@ namespaces sdl sequences ;
     #! be laid out.
     dup gadget-relayout? [
         f over set-gadget-relayout?
-        dup gadget-paint [
-            dup layout*
-            gadget-children [ layout ] each
-        ] bind
+        dup layout*
+        gadget-children [ layout ] each
     ] [
         drop
     ] ifte ;
@@ -63,7 +61,7 @@ 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
+    [ <gadget> swap set-delegate ] keep
     [ set-pack-vector ] keep
     [ set-pack-fill ] keep
     [ set-pack-align ] keep ;
index 542ec8c80ded6d71495a64ddd18e302cb991fdab..913da986a631769950d9bc6bd660638372f3d83c 100644 (file)
@@ -1,8 +1,6 @@
 USING: kernel parser sequences io ;
 [
-    "/library/ui/colors.factor"
     "/library/ui/shapes.factor"
-    "/library/ui/rectangles.factor"
     "/library/ui/gadgets.factor"
     "/library/ui/hierarchy.factor"
     "/library/ui/paint.factor"
index 201dce36f789d99eab36b4c6f3fa094735cd49f3..03d4b813d519470ad2ea5c2f141a382748d5391d 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: gadgets
 USING: generic hashtables io kernel lists math matrices
-namespaces sdl sequences strings ;
+namespaces sdl sequences strings styles ;
 
 SYMBOL: clip
 
@@ -26,16 +26,54 @@ SYMBOL: clip
         r> call
     ] with-scope ; inline
 
+GENERIC: 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 draw-shape dup [
-                    gadget-children [ draw-gadget ] each
-                ] with-trans
-            ] [ drop ] ifte
-        ] with-clip
-    ] bind ;
+    dup [
+        [
+            dup draw-gadget* dup [
+                gadget-children [ draw-gadget ] each
+            ] with-trans
+        ] [ drop ] ifte
+    ] with-clip ;
+
+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 ;
diff --git a/library/ui/rectangles.factor b/library/ui/rectangles.factor
deleted file mode 100644 (file)
index 68b5a7b..0000000
+++ /dev/null
@@ -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 ;
index 365c95eaa7c880a5bb107b652b60c526b0bf9bbb..1ae0c998688e82796d285019dd1d9d0dae7e6f6f 100644 (file)
@@ -17,7 +17,7 @@ TUPLE: viewport origin ;
     [ fix-scroll ] keep [ set-viewport-origin ] keep relayout ;
 
 C: viewport ( content -- viewport )
-    <empty-gadget> over set-delegate
+    <gadget> over set-delegate
     t over set-gadget-root?
     [ add-gadget ] keep
     { 0 0 0 } over set-viewport-origin ;
index 902508d4b0bb184f3c7cbe5d325b80575afe25e9..aaf06f4711e1fd23a7a02d2cf728ea13c0f17fab 100644 (file)
@@ -20,8 +20,6 @@ GENERIC: set-shape-dim ( dim shape -- )
 : shape-w shape-dim first ;
 : shape-h shape-dim second ;
 
-GENERIC: draw-shape ( shape -- )
-
 : with-trans ( shape quot -- )
     #! All drawing done inside the quotation is translated
     #! relative to the shape's origin.
@@ -47,3 +45,29 @@ GENERIC: draw-shape ( shape -- )
 
 M: vector shape-loc ;
 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 + ;
index 8ac8674da90b659391767b0d52dccadc6721ffb4..6a268ba59a12dafe179294cae0ed435eb6a26e85 100644 (file)
@@ -27,11 +27,12 @@ strings styles io ;
         swap *int swap *int
     ] ifte ;
 
-: draw-string ( font text -- )
+: draw-string ( gadget text -- )
     filter-nulls dup empty? [
         2drop
     ] [
-        fg 3unlist make-color
+        >r [ gadget-font ] keep r> swap
+        [ fg 3unlist make-color ] keep
         bg 3unlist make-color
         TTF_RenderUNICODE_Shaded
         [ >r x get y get r> draw-surface ] keep
index 711cd15a8c600721b96ae79cc0eb3312ca18fde7..db3454e060512ff1598b3feb18222bd8849dc295 100644 (file)
@@ -36,7 +36,7 @@ C: world ( -- world )
 
 : show-glass ( gadget -- )
     hide-glass
-    <empty-gadget> dup
+    <gadget> dup
     world get 2dup add-gadget set-world-glass
     dupd add-gadget prefer ;
 
@@ -47,9 +47,7 @@ M: world inside? ( point world -- ? ) 2drop t ;
 : draw-world ( world -- )
     [
         dup
-        { 0 0 0 }
-        width get height get 0 3vector <rectangle>
-        clip set-paint-prop
+        { 0 0 0 } width get height get 0 3vector <rectangle> clip set
         draw-gadget
     ] with-surface ;