- rollovers broken with menus\r
- menu dragging\r
- fix up the min thumb size hack\r
-- nicer scrollbars with up/down buttons\r
- gaps in pack layout\r
- fix listener prompt display after presentation commands invoked\r
- theme abstraction in ui\r
\r
++ ui:\r
+\r
+- find out why so many small bignums get consed\r
+- repaint only dirty regions of the screen\r
+- faster mouse tracking\r
+- binary search to locate visible children of packs\r
+- rewrite frame layout for new style\r
+- an interior paint that is only painted on rollover and mouse press;\r
+ use it for menu items. give menus a gradient background\r
+- scroll bar: more intuitive behavior when clicking inside the elevator\r
+- timers\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
+- sort out clipping off-by-one flaw when filling rectangles\r
+\r
++ tutorial:\r
+\r
+- multiline code snippets\r
+- s-expression text styling language\r
+- word wrap\r
+\r
+ misc\r
\r
Investigate:\r
\r
- http keep alive, and range get\r
- code walker & exceptions\r
-- faster repaint\r
\r
+ ffi:\r
\r
: fix-scroll ( origin viewport -- origin )
dup rectangle-dim swap viewport-dim v- vmax { 0 0 0 } vmin ;
-: scroll ( origin viewport -- )
+: scroll-viewport ( origin viewport -- )
[ fix-scroll ] keep [ set-viewport-origin ] keep relayout ;
C: viewport ( content -- viewport )
! The offset slot is the y co-ordinate of the mouse relative to
! the thumb when it was clicked.
-TUPLE: slider viewport thumb vector ;
+TUPLE: slider thumb vector ;
+
+: slider-scroller ( slider -- scroller )
+ [ scroller? ] find-parent ;
+
+: slider-viewport ( slider -- viewport )
+ slider-scroller scroller-viewport ;
: >thumb ( pos slider -- pos )
slider-viewport visible-portion v* ;
: slider-pos ( slider pos -- pos )
hand pick relative v+ over slider-vector v* swap >viewport ;
+: scroll ( origin scroller -- )
+ [ scroller-viewport scroll-viewport ] keep
+ dup scroller-x relayout scroller-y relayout ;
+
: slider-click ( slider pos -- )
dupd slider-pos over slider-current v+
- over slider-viewport scroll relayout ;
+ swap slider-scroller scroll ;
: slider-motion ( slider -- )
hand hand-click-rel slider-click ;
: slider-actions ( slider -- )
[ { 0 0 0 } slider-click ] [ button-down 1 ] set-action ;
-C: slider ( viewport vector -- slider )
+C: slider ( vector -- slider )
<plain-gadget> over set-delegate
dup [ 128 128 128 ] background set-paint-prop
[ set-slider-vector ] keep
- [ set-slider-viewport ] keep
<thumb> over add-thumb
dup slider-actions ;
-: <x-slider> ( viewport -- slider ) { 1 0 0 } <slider> ;
+: <x-slider> ( -- slider ) { 1 0 0 } <slider> ;
-: <y-slider> ( viewport -- slider ) { 0 1 0 } <slider> ;
+: <y-slider> ( -- slider ) { 0 1 0 } <slider> ;
: thumb-loc ( slider -- loc )
dup slider-viewport
dup viewport-origin* swap fix-scroll
vneg swap >thumb ;
-: slider-dim { 16 16 16 } ;
+: slider-dim { 12 12 12 } ;
: thumb-dim ( slider -- h )
[ rectangle-dim dup ] keep >thumb slider-dim vmax vmin ;
: scroll>bottom ( gadget -- )
[ scroll>bottom ] swap handle-gesture drop ;
+: scroll-by ( scroller amount -- )
+ over scroller-viewport viewport-origin v+ swap scroll ;
+
: scroller-actions ( scroller -- )
- [ (scroll>bottom) ] [ scroll>bottom ] set-action ;
+ dup [ (scroll>bottom) ] [ scroll>bottom ] set-action
+ dup [ { 0 32 0 } scroll-by ] [ button-down 4 ] set-action
+ [ { 0 -32 0 } scroll-by ] [ button-down 5 ] set-action ;
C: scroller ( gadget -- scroller )
#! Wrap a scrolling pane around the gadget.
<frame> over set-delegate
[ >r <viewport> r> add-viewport ] keep
- dup scroller-viewport <x-slider> over add-x-slider
- dup scroller-viewport <y-slider> over add-y-slider
+ <x-slider> over add-x-slider
+ <y-slider> over add-y-slider
dup scroller-actions ;
M: scroller focusable-child* ( viewport -- gadget )