]> gitweb.factorcode.org Git - factor.git/commitdiff
UI code cleanups
authorSlava Pestov <slava@factorcode.org>
Sat, 27 Aug 2005 01:42:43 +0000 (01:42 +0000)
committerSlava Pestov <slava@factorcode.org>
Sat, 27 Aug 2005 01:42:43 +0000 (01:42 +0000)
17 files changed:
TODO.FACTOR.txt
library/help/tutorial.factor
library/ui/books.factor
library/ui/borders.factor
library/ui/buttons.factor
library/ui/editors.factor
library/ui/gestures.factor
library/ui/hierarchy.factor
library/ui/labels.factor
library/ui/layouts.factor
library/ui/listener.factor
library/ui/menus.factor
library/ui/panes.factor
library/ui/presentations.factor
library/ui/scrolling.factor
library/ui/sliders.factor
library/ui/splitters.factor

index 3ca847bf001bc89c6512b8867ff0a56b6b423d7b..a3cacfaf9ab5ba95e3c04243ec2c5afa5676e23e 100644 (file)
@@ -5,27 +5,26 @@
 \r
 + ui:\r
 \r
+- fix up the min thumb size hack\r
+- scroll bar: more intuitive behavior when clicking inside the elevator\r
+- nicer scrollbars with up/down buttons\r
+- clicking outside menu doesn't close\r
+- only redraw dirty gadgets\r
+- faster mouse tracking\r
+- better menu positioning\r
+\r
 - off-by-one error in pick-up?\r
 - closing ui does not stop timers\r
 - adding/removing timers automatically for animated gadgets\r
 - theme abstraction in ui\r
 - menu dragging\r
-- fix up the min thumb size hack\r
-- gaps in pack layout\r
 - find out why so many small bignums get consed\r
-- faster mouse tracking\r
-- scroll bar: more intuitive behavior when clicking inside the elevator\r
-- nicer scrollbars with up/down buttons\r
 - icons\r
 - use incremental strategy for all pack layouts where possible\r
 - multiline editing in listener\r
-- better menu positioning\r
-- only redraw dirty gadgets\r
 - get stuff in examples dir running in the ui\r
-- opengl rendering\r
 - text selection\r
 - clipboard support\r
-- clicking outside menu doesn't close\r
 \r
 + tutorial:\r
 \r
index 5114ba09264680c7a5b3929455d5292642ff783c..f69946bab2d0ef4dab485201a64f210d99a453cd 100644 (file)
@@ -12,28 +12,32 @@ sequences strings styles ;
 \r
 GENERIC: tutorial-line ( object -- gadget )\r
 \r
-M: string tutorial-line <label> ;\r
+M: string tutorial-line\r
+    {\r
+        { [ "* " ?head ] [ <slide-title> ] }\r
+        { [ dup "--" = ] [ drop <underline> ] }\r
+        { [ t ] [ <label> ] }\r
+    } cond ;\r
 \r
 : example-theme\r
     dup button-theme\r
     "Monospaced" font set-paint-prop ;\r
 \r
 M: general-list tutorial-line\r
-    car dup <label> dup rot [ pane get pane-input set-editor-text drop ] cons\r
-    button-gestures\r
-    dup example-theme ;\r
+    car\r
+    <label> [ label-text pane get pane-input set-editor-text ]\r
+    <roll-button> dup example-theme ;\r
 \r
 : <page> ( list -- gadget )\r
-    0 1 <pile>\r
-    over car <slide-title> over add-gadget\r
-    <underline> over add-gadget\r
-    swap cdr [ tutorial-line over add-gadget ] each\r
+    [ tutorial-line ] map\r
+    1 <pile> [ add-gadgets ] keep\r
     empty-border ;\r
 \r
 : tutorial-pages\r
     [\r
         [\r
-            "Factor: a dynamic language"\r
+            "* Factor: a dynamic language"\r
+            "--"\r
             "This series of slides presents a quick overview of Factor."\r
             ""\r
             "Factor is interactive, which means you can test out the code"\r
@@ -48,7 +52,8 @@ M: general-list tutorial-line
             ""\r
             "http://factor.sourceforge.net"\r
         ] [\r
-            "The view from 10,000 feet"\r
+            "* The view from 10,000 feet"\r
+            "--"\r
             "- Everything is an object"\r
             "- A word is a basic unit of code"\r
             "- Words are identified by names, and organized in vocabularies"\r
@@ -56,7 +61,8 @@ M: general-list tutorial-line
             "- Code blocks can be passed as parameters to words"\r
             "- Word definitions are very short with very high code reuse"\r
         ] [\r
-            "Basic syntax"\r
+            "* Basic syntax"\r
+            "--"\r
             "Factor code is made up of whitespace-speparated tokens."\r
             "Recall the example from the first slide:"\r
             ""\r
@@ -66,7 +72,8 @@ M: general-list tutorial-line
             "The second token (print) is a word."\r
             "The string is pushed on the stack, and the print word prints it."\r
         ] [\r
-            "The stack"\r
+            "* The stack"\r
+            "--"\r
             "- The stack is like a pile of papers."\r
             "- You can ``push'' papers on the top of the pile,"\r
             "  and ``pop'' papers from the top of the pile."\r
@@ -77,7 +84,8 @@ M: general-list tutorial-line
             ""\r
             "Try running it in the listener now."\r
         ] [\r
-            "Postfix arithmetic"\r
+            "* Postfix arithmetic"\r
+            "--"\r
             "What happened when you ran it?"\r
             ""\r
             "The two numbers (2 3) are pushed on the stack."\r
@@ -88,7 +96,8 @@ M: general-list tutorial-line
             "Traditional arithmetic is called infix: 3 + (6 * 2)"\r
             "Lets translate this into postfix: 3 6 2 * + ."\r
         ] [\r
-            "Colon definitions"\r
+            "* Colon definitions"\r
+            "--"\r
             "We can define new words in terms of existing words."\r
             ""\r
             [ ": twice  2 * ;" ]\r
@@ -102,7 +111,8 @@ M: general-list tutorial-line
             ""\r
             [ "3 2 * 2 * ." ]\r
         ] [\r
-            "Stack effects"\r
+            "* Stack effects"\r
+            "--"\r
             "When we look at the definition of the ``twice'' word,"\r
             "it is intuitively obvious that it takes one value from the stack,"\r
             "and leaves one value behind. However, with more complex"\r
@@ -116,7 +126,8 @@ M: general-list tutorial-line
             "The stack effect of + is ( x y -- x+y )."\r
             "The stack effect of . is ( object -- )."\r
         ] [\r
-            "Reading user input"\r
+            "* Reading user input"\r
+            "--"\r
             "User input is read using the readln ( -- string ) word."\r
             "Note its stack effect; it puts a string on the stack."\r
             ""\r
@@ -125,7 +136,8 @@ M: general-list tutorial-line
             [ "\"What is your name?\" print" ]\r
             [ "readln \"Hello, \" write print" ]\r
         ] [\r
-            "Shuffle words"\r
+            "* Shuffle words"\r
+            "--"\r
             "The word ``twice'' we defined is useless."\r
             "Let's try something more useful: squaring a number."\r
             ""\r
@@ -137,7 +149,8 @@ M: general-list tutorial-line
             "( object -- object object ), and it does exactly what we"\r
             "need. The ``dup'' word is known as a shuffle word."\r
         ] [\r
-            "The squared word"\r
+            "* The squared word"\r
+            "--"\r
             "Try entering the following word definition:"\r
             ""\r
             [ ": square ( n -- n*n ) dup * ;" ]\r
@@ -151,7 +164,8 @@ M: general-list tutorial-line
             "swap ( obj1 obj2 -- obj2 obj1 )"\r
             "over ( obj1 obj2 -- obj1 obj2 obj1 )"\r
         ] [\r
-            "Another shuffle example"\r
+            "* Another shuffle example"\r
+            "--"\r
             "Now let us write a word that negates a number."\r
             "Start by entering the following in the listener"\r
             ""\r
@@ -165,7 +179,8 @@ M: general-list tutorial-line
             ""\r
             [ ": negate ( n -- -n ) 0 swap - ;" ]\r
         ] [\r
-            "Seeing words"\r
+            "* Seeing words"\r
+            "--"\r
             "If you have entered every definition in this tutorial,"\r
             "you will now have several new colon definitions:"\r
             ""\r
@@ -181,7 +196,8 @@ M: general-list tutorial-line
             "Prefixing a word with \\ pushes it on the stack, instead of"\r
             "executing it. So the see word has stack effect ( word -- )."\r
         ] [\r
-            "Branches"\r
+            "* Branches"\r
+            "--"\r
             "Now suppose we want to write a word that computes the"\r
             "absolute value of a number; that is, if it is less than 0,"\r
             "the number will be negated to yield a positive result."\r
@@ -196,7 +212,8 @@ M: general-list tutorial-line
             "- The f object is false."\r
             "- Anything else is true."\r
         ] [\r
-            "More branches"\r
+            "* More branches"\r
+            "--"\r
             "On the previous slide, you saw the 'when' conditional:"\r
             ""\r
             [ "  ... condition ... [ ... true case ... ] when" ]\r
@@ -209,7 +226,8 @@ M: general-list tutorial-line
             ""\r
             [ "  ... condition ... [ ... ] [ ... ] ifte" ]\r
         ] [\r
-            "Combinators"\r
+            "* Combinators"\r
+            "--"\r
             "ifte, when, unless are words that take lists of code as input."\r
             ""\r
             "Lists of code are called ``quotations''."\r
@@ -222,7 +240,8 @@ M: general-list tutorial-line
             ""\r
             [ "10 [ \"Hello combinators\" print ] times" ]\r
         ] [\r
-            "Sequences"\r
+            "* Sequences"\r
+            "--"\r
             "You have already seen strings, very briefly:"\r
             ""\r
             "  \"Hello world\""\r
@@ -237,7 +256,8 @@ M: general-list tutorial-line
             "can contain any type of object, including other lists"\r
             "and vectors."\r
         ] [\r
-            "Sequences and combinators"\r
+            "* Sequences and combinators"\r
+            "--"\r
             "A very useful combinator is each ( seq quot -- )."\r
             "It calls a quotation with each element of the sequence in turn."\r
             ""\r
@@ -255,7 +275,8 @@ M: general-list tutorial-line
             [ "{ 10 20 30 } [ 3 + ] map ." ]\r
             "==> { 13 23 33 }"\r
         ] [\r
-            "Numbers - integers and ratios"\r
+            "* Numbers - integers and ratios"\r
+            "--"\r
             "Factor's supports arbitrary-precision integers and ratios."\r
             ""\r
             "Try the following:"\r
@@ -268,8 +289,8 @@ M: general-list tutorial-line
             "Rational numbers are added, multiplied and reduced to"\r
             "lowest terms in the same way you learned in grade school."\r
         ] [\r
-            "Numbers - higher math"\r
-            ""\r
+            "Numbers - higher math"\r
+            "--"\r
             [ "2 sqrt ." ]\r
             ""\r
             [ "-1 sqrt ." ]\r
@@ -279,7 +300,8 @@ M: general-list tutorial-line
             ""\r
             "... and there is much more for the math geeks."\r
         ] [\r
-            "Object oriented programming"\r
+            "* Object oriented programming"\r
+            "--"\r
             "Each object belongs to a class."\r
             "Generic words act differently based on an object's class."\r
             ""\r
@@ -293,7 +315,8 @@ M: general-list tutorial-line
             ""\r
             "integer, string, object are built-in classes."\r
         ] [\r
-            "Defining new classes"\r
+            "* Defining new classes"\r
+            "--"\r
             "New classes can be defined:"\r
             ""\r
             [ "TUPLE: point x y ;" ]\r
@@ -307,7 +330,8 @@ M: general-list tutorial-line
             "Tuples support custom constructors, delegation..."\r
             "see the developer's handbook for details."\r
         ] [\r
-            "The library"\r
+            "* The library"\r
+            "--"\r
             "Offers a good selection of highly-reusable words:"\r
             "- Operations on sequences"\r
             "- Variety of mathematical functions"\r
@@ -321,7 +345,8 @@ M: general-list tutorial-line
             "- To show a word definition:"\r
             [ "\\ reverse see" ]\r
         ] [\r
-            "Learning more"\r
+            "* Learning more"\r
+            "--"\r
             "Hopefully this tutorial has sparked your interest in Factor."\r
             ""\r
             "You can learn more by reading the Factor developer's handbook:"\r
@@ -345,5 +370,5 @@ M: general-list tutorial-line
     <tutorial> gadget. ;\r
 \r
 : <tutorial-button>\r
-    "Tutorial" [ drop [ tutorial ] pane get pane-call ] <button> ;\r
-\r
+    "Tutorial" <label>\r
+    [ drop [ tutorial ] pane get pane-call ] <button> ;\r
index 66cc201f21b3a41104e5187fc810f8082c252d43..877f7315fb01d6c235df67b34e419a12dadad29f 100644 (file)
@@ -8,10 +8,10 @@ TUPLE: book page ;
 C: book ( pages -- book )
     <gadget> over set-delegate
     0 over set-book-page
-    swap [ over add-gadget ] each ;
+    [ add-gadgets ] keep ;
 
 M: book pref-dim ( book -- dim )
-    gadget-children { 0 0 0 } [ pref-dim vmax ] reduce ;
+    gadget-children [ pref-dim ] map { 0 0 0 } [ vmax ] reduce ;
 
 M: book layout* ( book -- )
     dup rect-dim over gadget-children [
@@ -26,28 +26,29 @@ M: book layout* ( book -- )
     [ gadget-children length rem ] keep
     [ set-book-page ] keep relayout ;
 
-: first-page ( book -- )
-    0 swap show-page ;
+: first-page ( book -- ) 0 swap show-page ;
 
-: prev-page ( book -- )
-    [ book-page 1 - ] keep show-page ;
+: prev-page ( book -- ) [ book-page 1 - ] keep show-page ;
 
-: next-page ( book -- )
-    [ book-page 1 + ] keep show-page ;
+: next-page ( book -- ) [ book-page 1 + ] keep show-page ;
 
-: last-page ( book -- )
-    -1 swap show-page ;
+: last-page ( book -- ) -1 swap show-page ;
 
-: book-buttons ( book -- gadget )
-    <line-shelf> swap [
-        [ "|<" first-page drop ]
-        [ "<" prev-page drop ]
-        [ ">" next-page drop ]
-        [ ">|" last-page drop ]
-    ] [
-        uncons swapd cons <button> over add-gadget
-    ] each-with ;
+TUPLE: book-browser book ;
 
-: <book-browser> ( book -- gadget )
-    dup book-buttons <frame>
-    [ add-top ] keep [ add-center ] keep ;
+: find-book ( gadget -- )
+    [ book-browser? ] find-parent book-browser-book ;
+
+: <book-buttons> ( book -- gadget )
+    [
+        { "|<" [ find-book first-page ] }
+        { "<"  [ find-book prev-page  ] }
+        { ">"  [ find-book next-page  ] }
+        { ">|" [ find-book last-page  ] }
+    ] [ 2unseq >r <label> r> <button> ] map
+    0 <shelf> [ add-gadgets ] keep ;
+
+C: book-browser ( book -- gadget )
+    <frame> over set-delegate
+    <book-buttons> over add-top
+    [ 2dup set-book-browser-book add-center ] keep ;
index 90eec1b71f417a94a05053743135f939c10c7033..065a960bf29a3c20d53b09acc6be3a54982c97aa 100644 (file)
@@ -9,7 +9,7 @@ TUPLE: border size ;
 C: border ( child delegate size -- border )
     [ set-border-size ] keep
     [ set-delegate ] keep
-    [ over [ add-gadget ] [ 2drop ] ifte ] keep ;
+    [ add-gadget ] keep ;
 
 : empty-border ( child -- border )
     <gadget> { 5 5 0 } <border> ;
index b06efb4de0529c6fab1e237159ed627c1d833ae7..3b3d3ec33b17e4fba3f2264050454587cb0c6b16 100644 (file)
@@ -50,11 +50,8 @@ sequences io sequences styles ;
     dup [ button-update ] [ mouse-enter ] set-action
     [ drop ] [ drag 1 ] set-action ;
 
-: (button) ( label quot -- button )
-    >r <label> bevel-border dup r> button-gestures ;
+: <button> ( gadget quot -- button )
+    >r bevel-border dup button-theme dup r> button-gestures ;
 
-: <button> ( label quot -- button )
-    (button) dup button-theme ;
-
-: <roll-button> ( label quot -- button )
-    (button) dup roll-button-theme ;
+: <roll-button> ( gadget quot -- button )
+    >r dup roll-button-theme dup r> button-gestures ;
index 5d4ff5b31f168e291b961c67777114fc99cf8186..f65290b4ee62102d3e1cda45bd75c500cc1c1430 100644 (file)
@@ -87,8 +87,8 @@ TUPLE: editor line caret ;
 
 C: editor ( text -- )
     <gadget> over set-delegate
-    [ <line-editor> swap set-editor-line ] keep
-    [ <caret> swap set-editor-caret ] keep
+    <line-editor> over set-editor-line
+    <caret> over set-editor-caret
     [ set-editor-text ] keep
     dup editor-actions ;
 
index 5aa5f8cc975b448a2ae6579dc96c6c918f10e2c8..24e7645656d6886b346b07105b8fd3d69f6347b5 100644 (file)
@@ -23,10 +23,6 @@ sequences ;
     #! gesture, otherwise returns f.
     [ dupd handle-gesture* ] each-parent nip ;
 
-: link-action ( gadget to from -- )
-    #! When gadget receives 'from' gesture, send a 'to' gesture.
-    >r [ swap handle-gesture drop ] cons r> set-action ;
-
 : user-input ( ch gadget -- ? )
     [ dupd user-input* ] each-parent nip ;
 
index 4b034c36cd3bc835f1a4c5f50a7002b3c389d98e..e52f5cf4c7fcb7e631184d84bb767a8523afea55 100644 (file)
@@ -5,7 +5,7 @@ USING: generic hashtables kernel lists math matrices namespaces
 sequences vectors ;
 
 : remove-gadget ( gadget parent -- )
-    [ 2dup gadget-children remove swap set-gadget-children ] keep
+    2dup gadget-children remove over set-gadget-children
     relayout f swap set-gadget-parent ;
 
 : unparent ( gadget -- )
@@ -34,6 +34,10 @@ sequences vectors ;
     #! Add a gadget to a parent gadget.
     [ (add-gadget) ] keep relayout ;
 
+: add-gadgets ( seq parent -- )
+    #! Add all gadgets in a sequence to a parent gadget.
+    swap [ over (add-gadget) ] each relayout ;
+
 : (parents-down) ( list gadget -- list )
     [ [ swons ] keep gadget-parent (parents-down) ] when* ;
 
index 187eeb9f8e835eacd732d1acb1fa1096a2a1082d..3df6de128af58a00d0af07089ec1bc1b3aa4995b 100644 (file)
@@ -17,5 +17,4 @@ M: label pref-dim ( label -- dim )
     dup label-text label-size ;
 
 M: label draw-gadget* ( label -- )
-    dup delegate draw-gadget*
-    dup label-text draw-string ;
+    dup delegate draw-gadget* dup label-text draw-string ;
index 8d815ea02086a89b6da5a419ecfe3d0bfd576740..599454b93459f23c1f1eb81495a5a58bcfdefc14 100644 (file)
@@ -57,22 +57,17 @@ TUPLE: pack align fill vector ;
 : packed-layout ( gadget sizes -- )
     2dup packed-locs packed-dims ;
 
-C: pack ( align fill vector -- pack )
-    #! align: 0 left aligns, 1/2 center, 1 right.
+C: pack ( fill vector -- pack )
     #! gap: between each child.
     #! fill: 0 leaves default width, 1 fills to pack width.
     [ <gadget> swap set-delegate ] keep
     [ set-pack-vector ] keep
     [ set-pack-fill ] keep
-    [ set-pack-align ] keep ;
+    0 over set-pack-align ;
 
-: <pile> { 0 1 0 } <pack> ;
+: <pile> ( fill -- pack ) { 0 1 0 } <pack> ;
 
-: <line-pile> 0 0 <pile> ;
-
-: <shelf> { 1 0 0 } <pack> ;
-
-: <line-shelf> 0 0 <shelf> ;
+: <shelf> ( fill -- pack ) { 1 0 0 } <pack> ;
 
 M: pack pref-dim ( pack -- dim )
     [
@@ -99,7 +94,7 @@ TUPLE: stack ;
 
 C: stack ( -- gadget )
     #! A stack lays out all its children on top of each other.
-    1 { 0 0 1 } <pack> over set-delegate ;
+    1 { 0 0 1 } <pack> over set-delegate ;
 
 M: stack children-on ( point stack -- gadget )
     nip gadget-children ;
index f451f7c9c73b9929a37a3194226854e294ef3136..a802da4352b8fbe6598b0b2cc1ad60cece6cadc5 100644 (file)
@@ -23,17 +23,20 @@ TUPLE: display title pane ;
 C: display ( -- display )
     <frame> over set-delegate
     "" <display-title> over add-display-title
-    <line-pile> 2dup swap set-display-pane
+    0 <pile> 2dup swap set-display-pane
     <scroller> over add-center ;
 
+: make-presentations ( seq -- seq )
+    [
+        dup presented swons unit swap unparse-short
+        <presentation>
+    ] map ;
+
 : present-stack ( seq title display -- )
     [ display-title set-label-text ] keep
     [
-        display-pane
-        dup clear-gadget swap reverse-slice [
-            dup presented swons unit swap unparse-short
-            <presentation> swap add-gadget
-        ] each-with
+        display-pane dup clear-gadget
+        >r reverse-slice make-presentations r> add-gadgets
     ] keep relayout ;
 
 : ui-listener-hook ( -- )
@@ -55,8 +58,7 @@ C: display ( -- display )
     1/2 <x-splitter> ;
 
 : listener-application ( -- )
-    <pane> dup pane set <scroller>
-    <stack-display>
+    <pane> dup pane set <scroller> <stack-display>
     2/3 <x-splitter> add-layer
     [ clear listener-thread ] in-thread
     pane get request-focus ;
index 5b6d468aef693ca879971e6b9e2930d8cd3d813c..7801b293c1792194ebd7d2bfda9038c8ceeee840 100644 (file)
@@ -6,32 +6,16 @@ USING: generic kernel lists math namespaces sequences ;
 : show-menu ( menu -- )
     hand screen-loc over set-rect-loc show-glass ;
 
-: menu-item-border ( child -- border )
-    <plain-gadget> { 1 1 0 } <border> ;
-
-: <menu-item> ( label quot -- gadget )
-    >r <label> menu-item-border dup roll-button-theme dup
-    r> button-gestures ;
-
-TUPLE: menu ;
-
-: menu-actions ( menu -- )
-    [ drop hide-glass ] [ button-down 1 ] set-action ;
-
-: assoc>menu ( assoc menu -- )
+: menu-items ( assoc -- pile )
     #! Given an association list mapping labels to quotations.
     #! Prepend a call to hide-menu to each quotation.
-    [
-        uncons \ hide-glass swons <menu-item> swap add-gadget
-    ] each-with ;
+    [ uncons \ hide-glass swons >r <label> r> <roll-button> ] map
+    1 <pile> [ add-gadgets ] keep ;
 
 : menu-theme ( menu -- )
     << gradient f { 1 0 0 } { 240 240 255 } { 216 216 216 } >>
     interior set-paint-prop ;
 
-C: menu ( assoc -- gadget )
+: <menu> ( assoc -- gadget )
     #! Given an association list mapping labels to quotations.
-    [ f line-border swap set-delegate ] keep
-    0 1 <pile> [ swap add-gadget ] 2keep
-    rot assoc>menu dup menu-actions
-    dup menu-theme ;
+    menu-items line-border dup menu-theme ;
index 69ad0f68f52f0dee1234b4564bcd41e375e7148f..2cc4cd05a11f9a8e42f0ec62662fb22afee9c61b 100644 (file)
@@ -2,7 +2,8 @@
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: gadgets
 USING: generic hashtables io kernel line-editor listener lists
-math namespaces prettyprint sequences strings styles threads ;
+math namespaces prettyprint sequences strings styles threads
+vectors ;
 
 DEFER: <presentation>
 
@@ -18,11 +19,11 @@ TUPLE: pane output active current input continuation ;
 : add-input 2dup set-pane-input add-gadget ;
 
 : <active-line> ( input current -- line )
-    <line-shelf> [ add-gadget ] keep [ add-gadget ] keep ;
+    2vector 0 <shelf> [ add-gadgets ] keep ;
 
 : init-active-line ( pane -- )
     dup pane-active unparent
-    [ dup pane-input swap pane-current <active-line> ] keep
+    [ dup pane-current swap pane-input <active-line> ] keep
     2dup set-pane-active add-gadget ;
 
 : pop-continuation ( pane -- quot )
@@ -62,9 +63,9 @@ SYMBOL: structured-input
     ] swap add-actions ;
 
 C: pane ( -- pane )
-    <line-pile> over set-delegate
-    <line-pile> <incremental> over add-output
-    <line-shelf> over set-pane-current
+    0 <pile> over set-delegate
+    0 <pile> <incremental> over add-output
+    0 <shelf> over set-pane-current
     "" <editor> over set-pane-input
     dup init-active-line
     dup pane-actions ;
@@ -95,7 +96,7 @@ M: pane focusable-child* ( pane -- editor )
 
 : pane-terpri ( pane -- )
     dup pane-current over pane-print-1
-    <line-shelf> over set-pane-current init-active-line ;
+    0 <shelf> over set-pane-current init-active-line ;
 
 : pane-write ( style pane list -- )
     3dup car swap pane-write-1 cdr dup
index a41c862370f54c1f787239e72ef5dfbe3ae62a13..2d12b6e797a46c6b168d4cf6cca44362e609ec1a 100644 (file)
@@ -26,25 +26,22 @@ SYMBOL: commands
     [ [ third command-quot ] keep second swons ] map-with
     <menu> ;
 
-: init-commands ( gadget -- )
-    dup roll-button-theme
-    dup presented paint-prop dup [
+: init-commands ( gadget -- gadget )
+    dup presented paint-prop [
         [
             \ drop ,
             literalize ,
             [ command-menu show-menu ] %
         ] [ ] make
-        button-gestures
-    ] [
-        2drop
-    ] ifte ;
+        <roll-button>
+    ] when* ;
 
 : <styled-label> ( style text -- label )
     <label> swap dup [ alist>hash ] when over set-gadget-paint ;
 
 : <presentation> ( style text -- presentation )
     gadget pick assoc dup
-    [ 2nip ] [ drop <styled-label> dup init-commands ] ifte ;
+    [ 2nip ] [ drop <styled-label> init-commands ] ifte ;
 
 : gadget. ( gadget -- )
     gadget swons unit
index a07a8ecbc946d7624e35ae8fc1222da11a2b681a..e72997e0cf1307f6aaae0b628926ad678b4d4a4f 100644 (file)
@@ -43,18 +43,17 @@ M: viewport focusable-child* ( viewport -- gadget )
 : update-slider ( slider scroller -- )
     dup rect-dim pick slider-vector v. pick set-slider-page
     dup viewport-dim over rect-dim vmax pick slider-vector v. pick set-slider-max
-    slider-viewport dup viewport-origin over fix-scroll vneg pick slider-vector v. pick set-slider-value
-    drop slider-elevator relayout ;
+    scroller-viewport dup viewport-origin over fix-scroll vneg pick slider-vector v. pick set-slider-value
+    2drop ;
 
 : update-sliders ( scroller -- )
-    dup scroller-x over update-slider
+    dup
+    dup scroller-x swap update-slider
     dup scroller-y swap update-slider ;
 
 : scroll ( origin scroller -- )
-    [
-        scroller-viewport [ fix-scroll ] keep
-        [ set-viewport-origin ] keep
-    ] keep relayout ;
+    scroller-viewport
+    [ [ fix-scroll ] keep set-viewport-origin ] keep relayout ;
 
 : add-viewport 2dup set-scroller-viewport add-center ;
 
@@ -90,6 +89,3 @@ C: scroller ( gadget -- scroller )
 
 M: scroller focusable-child* ( viewport -- gadget )
     scroller-viewport ;
-
-M: scroller layout* ( scroller -- )
-    dup update-sliders delegate layout* ;
index 58c670d4095877a0c4abcdc2cd646950a970c380..0def5a231ad82e0f1083c01b13faa4d935e9340e 100644 (file)
@@ -21,13 +21,11 @@ TUPLE: slider vector elevator thumb value max page ;
     hand hand-click-rel elevator-click ;
 
 : thumb-actions ( thumb -- )
-    dup [ drop ] button-gestures
     [ find-elevator elevator-motion ] [ drag 1 ] set-action ;
 
 : <thumb> ( -- thumb )
-    <bevel-gadget>
+    <gadget> [ drop ] <button>
     t over set-gadget-root?
-    dup button-theme
     dup thumb-actions ;
 
 : elevator-theme ( elevator -- )
@@ -62,15 +60,11 @@ M: elevator layout* ( elevator -- )
 
 M: elevator pref-dim drop thumb-min ;
 
-: <empty-button> ( quot -- )
-    >r <bevel-gadget> { 12 12 0 } over set-gadget-dim
-    dup button-theme dup r> button-gestures ;
-
-: <up-button> [ drop ] <empty-button> ;
+: <up-button> <gadget> [ drop ] <button> ;
 
 : add-up { 1 1 1 } over slider-vector v- 2unseq set-frame-child ;
 
-: <down-button> [ drop ] <empty-button>  ;
+: <down-button> <gadget> [ drop ] <button> ;
 
 : add-down { 1 1 1 } over slider-vector v+ 2unseq set-frame-child ;
 
@@ -87,8 +81,7 @@ C: slider ( vector -- slider )
     <elevator> over add-elevator
     <up-button> over add-up
     <down-button> over add-down
-    <thumb> over add-thumb
-    dup slider-actions ;
+    <thumb> over add-thumb ;
 
 : <x-slider> ( -- slider ) { 1 0 0 } <slider> ;
 
index b2257da6072fe279efbe724aae85383333ba3149..6bcc450d5aa39e56f98592fd5c50bdfb9ee43b08 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: gadgets
 USING: generic kernel lists math matrices namespaces sequences
-styles ;
+styles vectors ;
 
 TUPLE: divider splitter ;
 
@@ -31,12 +31,9 @@ C: divider ( -- divider )
     dup divider-actions ;
 
 C: splitter ( first second split vector -- splitter )
-    [ >r 0 1 rot <pack> r> set-delegate ] keep
+    [ >r 1 swap <pack> r> set-delegate ] keep
     [ set-splitter-split ] keep
-    swapd
-    [ add-gadget ] keep
-    <divider> over add-gadget
-    [ add-gadget ] keep ;
+    [ >r >r <divider> r> 3vector r> add-gadgets ] keep ;
 
 : <x-splitter> ( first second split -- splitter )
     { 0 1 0 } <splitter> ;