Faster grid gadget

slava 2006-10-22 22:46:02 +00:00
parent 5faea12c89
commit b71697db41
20 changed files with 67 additions and 59 deletions

View File

@ -11,14 +11,17 @@
- there was a performance hit, investigate - there was a performance hit, investigate
- float boxing and overflow checks need a gc check too - float boxing and overflow checks need a gc check too
- [ [ dup call ] dup call ] infer hangs - [ [ dup call ] dup call ] infer hangs
- grid slows down with 2000 lines
- growable data heap - growable data heap
- more compact relocation info - more compact relocation info
- update module system docs
- flip may fail with >64kb string - flip may fail with >64kb string
- documentation:
- document columns
- update module system docs
+ ui: + ui:
- grid displays quickly now, but constructing large amounts of gadgets
is slow: eg, 10000 [ dup number>string ] map describe
- completion is not ideal: eg, C+e "buttons" - completion is not ideal: eg, C+e "buttons"
- some way of intercepting all gestures - some way of intercepting all gestures
- slider needs to be modelized - slider needs to be modelized

View File

@ -1,14 +1,13 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-frames IN: gadgets
USING: arrays gadgets gadgets-grids generic kernel math USING: arrays generic kernel math namespaces sequences words ;
namespaces sequences words ;
! A frame arranges gadgets in a 3x3 grid, where the center ! A frame arranges gadgets in a 3x3 grid, where the center
! gadgets gets left-over space. ! gadgets gets left-over space.
TUPLE: frame ; TUPLE: frame ;
: <frame-grid> 3 [ drop 3 f <array> ] map ; : <frame-grid> 9 [ drop <gadget> ] map 3 group ;
: @center 1 1 ; : @center 1 1 ;
: @left 0 1 ; : @left 0 1 ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-grids IN: gadgets
USING: gadgets kernel math namespaces opengl sequences ; USING: kernel math namespaces opengl sequences ;
! You can set a grid's gadget-boundary to this. ! You can set a grid's gadget-boundary to this.
TUPLE: grid-lines color ; TUPLE: grid-lines color ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-grids IN: gadgets
USING: arrays gadgets kernel math namespaces sequences words ; USING: arrays kernel math namespaces sequences words ;
TUPLE: grid children gap ; TUPLE: grid children gap ;
@ -17,17 +17,14 @@ C: grid ( children -- grid )
: grid-child ( grid i j -- gadget ) rot grid-children nth nth ; : grid-child ( grid i j -- gadget ) rot grid-children nth nth ;
: grid-add ( gadget grid i j -- ) : grid-add ( gadget grid i j -- )
>r >r over [ over add-gadget ] when* r> r> >r >r 2dup add-gadget r> r>
3dup grid-child unparent rot grid-children nth set-nth ; 3dup grid-child unparent rot grid-children nth set-nth ;
: grid-remove ( grid i j -- ) : grid-remove ( grid i j -- )
>r >r >r f r> r> r> grid-add ; >r >r >r <gadget> r> r> r> grid-add ;
: ?pref-dim ( gadget/f -- dim )
[ pref-dim ] [ { 0 0 } ] if* ;
: pref-dim-grid ( -- dims ) : pref-dim-grid ( -- dims )
grid get grid-children [ [ ?pref-dim ] map ] map ; grid get grid-children [ [ pref-dim ] map ] map ;
: compute-grid ( -- horiz vert ) : compute-grid ( -- horiz vert )
pref-dim-grid pref-dim-grid
@ -47,9 +44,9 @@ M: grid pref-dim*
] with-grid ; ] with-grid ;
: do-grid ( dims quot -- ) : do-grid ( dims quot -- )
swap grid get grid-children [ swap grid get grid-children
[ dup [ pick call ] [ 2drop ] if ] 2each [ [ pick call ] 2each ] 2each
] 2each drop ; inline drop ; inline
: pair-up ( horiz vert -- dims ) : pair-up ( horiz vert -- dims )
[ swap [ swap (pair-up) ] map-with ] map-with ; [ swap [ swap (pair-up) ] map-with ] map-with ;
@ -75,3 +72,12 @@ M: grid layout*
#! The setter has stack effect ( new gadget -- ), #! The setter has stack effect ( new gadget -- ),
#! the loc is @center, @top, etc. #! the loc is @center, @top, etc.
swap [ [ grid-add ] build-spec ] with-gadget ; inline swap [ [ grid-add ] build-spec ] with-gadget ; inline
M: grid children-on ( rect gadget -- seq )
dup gadget-children empty? [
2drop f
] [
{ 0 1 } swap grid-children
[ 0 <column> fast-children-on ] keep
<slice> concat
] if ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets IN: gadgets
USING: arrays errors freetype gadgets-frames generic hashtables USING: arrays errors freetype gadgets generic hashtables
kernel math models namespaces opengl sequences ; kernel math models namespaces opengl sequences ;
: menu-loc ( world menu -- loc ) : menu-loc ( world menu -- loc )

View File

@ -2,9 +2,8 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-outliner IN: gadgets-outliner
USING: arrays gadgets gadgets-borders gadgets-buttons USING: arrays gadgets gadgets-borders gadgets-buttons
gadgets-frames gadgets-grids gadgets-labels gadgets-panes gadgets-labels gadgets-panes gadgets-theme generic io kernel
gadgets-theme generic io kernel math opengl sequences styles math opengl sequences styles namespaces ;
namespaces ;
! Vertical line. ! Vertical line.
TUPLE: guide color ; TUPLE: guide color ;
@ -45,11 +44,12 @@ DEFER: set-outliner-expanded?
>r not <expand-button> r> @top-left grid-add ; >r not <expand-button> r> @top-left grid-add ;
: setup-center ( expanded? outliner -- ) : setup-center ( expanded? outliner -- )
[ swap [ outliner-quot make-pane ] [ drop f ] if ] keep [
@center grid-add ; swap [ outliner-quot make-pane ] [ drop <gadget> ] if
] keep @center grid-add ;
: setup-guide ( expanded? outliner -- ) : setup-guide ( expanded? outliner -- )
>r [ <guide-gadget> ] [ f ] if r> @left grid-add ; >r [ <guide-gadget> ] [ <gadget> ] if r> @left grid-add ;
: set-outliner-expanded? ( expanded? outliner -- ) : set-outliner-expanded? ( expanded? outliner -- )
#! Call the expander quotation if expanding. #! Call the expander quotation if expanding.

View File

@ -5,7 +5,7 @@ DEFER: call-listener
IN: gadgets-presentations IN: gadgets-presentations
USING: arrays definitions gadgets gadgets-borders USING: arrays definitions gadgets gadgets-borders
gadgets-buttons gadgets-grids gadgets-labels gadgets-outliner gadgets-buttons gadgets-labels gadgets-outliner
gadgets-panes gadgets-paragraphs gadgets-theme gadgets-panes gadgets-paragraphs gadgets-theme
generic hashtables tools io kernel prettyprint sequences strings generic hashtables tools io kernel prettyprint sequences strings
styles words help math models namespaces ; styles words help math models namespaces ;

View File

@ -1,8 +1,8 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-scrolling IN: gadgets-scrolling
USING: arrays gadgets gadgets-frames gadgets-theme USING: arrays gadgets gadgets-theme gadgets-viewports generic
gadgets-viewports generic kernel math namespaces sequences ; kernel math namespaces sequences ;
! A scroller combines a viewport with two x and y sliders. ! A scroller combines a viewport with two x and y sliders.
! The follows slot is a boolean, if true scroller will scroll ! The follows slot is a boolean, if true scroller will scroll

View File

@ -1,8 +1,8 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-scrolling IN: gadgets-scrolling
USING: arrays gadgets gadgets-buttons gadgets-frames USING: arrays gadgets gadgets-buttons
gadgets-grids gadgets-theme generic kernel math namespaces gadgets-theme generic kernel math namespaces
sequences styles threads vectors ; sequences styles threads vectors ;
! An elevator has a thumb that may be moved up and down. ! An elevator has a thumb that may be moved up and down.

View File

@ -152,17 +152,19 @@ M: pack pref-dim*
M: pack layout* M: pack layout*
dup gadget-children pref-dims pack-layout ; dup gadget-children pref-dims pack-layout ;
: fast-children-on ( dim axis gadgets -- i ) : (fast-children-on) ( dim axis gadgets -- i )
swapd [ rect-loc v- over v. ] binsearch nip ; swapd [ rect-loc v- over v. ] binsearch nip ;
M: pack children-on : fast-children-on ( rect axis children -- from to )
dup gadget-orientation swap gadget-children [ 3dup
3dup >r >r dup rect-loc swap rect-dim v+ origin get v-
>r >r dup rect-loc swap rect-dim v+ origin get v- r> r> (fast-children-on) 1+
r> r> fast-children-on 1+ >r
>r >r >r rect-loc origin get v-
>r >r rect-loc origin get v- r> r> (fast-children-on)
r> r> fast-children-on 0 max
0 max r> ;
r>
] keep <slice> ; M: pack children-on ( rect gadget -- seq )
dup gadget-orientation swap gadget-children
[ fast-children-on ] keep <slice> ;

View File

@ -2,9 +2,8 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-text IN: gadgets-text
USING: arrays errors freetype gadgets gadgets-borders USING: arrays errors freetype gadgets gadgets-borders
gadgets-buttons gadgets-frames gadgets-labels gadgets-buttons gadgets-labels gadgets-scrolling gadgets-theme
gadgets-scrolling gadgets-theme io kernel math models namespaces io kernel math models namespaces opengl sequences strings styles ;
opengl sequences strings styles ;
TUPLE: editor TUPLE: editor
font color caret-color selection-color font color caret-color selection-color

View File

@ -3,8 +3,8 @@
USING: arrays sequences kernel gadgets-panes definitions USING: arrays sequences kernel gadgets-panes definitions
prettyprint gadgets-theme gadgets-borders gadgets prettyprint gadgets-theme gadgets-borders gadgets
generic gadgets-scrolling math io words models styles generic gadgets-scrolling math io words models styles
namespaces gadgets-tracks gadgets-presentations gadgets-grids namespaces gadgets-tracks gadgets-presentations
gadgets-workspace gadgets-frames help gadgets-buttons gadgets-workspace help gadgets-buttons
gadgets-search tools ; gadgets-search tools ;
IN: gadgets-browser IN: gadgets-browser

View File

@ -5,7 +5,7 @@ USING: namespaces arrays sequences io inference math kernel
generic prettyprint words gadgets opengl gadgets-panes generic prettyprint words gadgets opengl gadgets-panes
gadgets-labels gadgets-theme gadgets-presentations gadgets-labels gadgets-theme gadgets-presentations
gadgets-buttons gadgets-borders gadgets-scrolling gadgets-buttons gadgets-borders gadgets-scrolling
gadgets-frames gadgets-workspace optimizer models help ; gadgets-workspace optimizer models help ;
GENERIC: node>gadget* ( height node -- gadget ) GENERIC: node>gadget* ( height node -- gadget )

View File

@ -1,7 +1,7 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-help IN: gadgets-help
USING: gadgets gadgets-borders gadgets-buttons gadgets-frames USING: gadgets gadgets-borders gadgets-buttons
gadgets-panes gadgets-search gadgets-scrolling help kernel gadgets-panes gadgets-search gadgets-scrolling help kernel
models namespaces sequences gadgets-tracks gadgets-workspace ; models namespaces sequences gadgets-tracks gadgets-workspace ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-listener IN: gadgets-listener
USING: compiler arrays gadgets gadgets-frames gadgets-labels USING: compiler arrays gadgets gadgets-labels
gadgets-panes gadgets-scrolling gadgets-text gadgets-lists gadgets-panes gadgets-scrolling gadgets-text gadgets-lists
gadgets-search gadgets-theme gadgets-tracks gadgets-workspace gadgets-search gadgets-theme gadgets-tracks gadgets-workspace
generic hashtables tools io kernel listener math models generic hashtables tools io kernel listener math models

View File

@ -1,8 +1,8 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-search IN: gadgets-search
USING: arrays gadgets gadgets-frames gadgets-labels USING: arrays gadgets gadgets-labels gadgets-panes
gadgets-panes gadgets-scrolling gadgets-text gadgets-theme gadgets-scrolling gadgets-text gadgets-theme
generic help tools kernel models sequences words generic help tools kernel models sequences words
gadgets-borders gadgets-lists namespaces parser hashtables io gadgets-borders gadgets-lists namespaces parser hashtables io
completion styles ; completion styles ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-walker IN: gadgets-walker
USING: arrays errors gadgets gadgets-buttons gadgets-frames USING: arrays errors gadgets gadgets-buttons
gadgets-listener gadgets-panes gadgets-scrolling gadgets-text gadgets-listener gadgets-panes gadgets-scrolling gadgets-text
gadgets-tracks gadgets-workspace generic hashtables tools gadgets-tracks gadgets-workspace generic hashtables tools
interpreter io kernel kernel-internals listener math models interpreter io kernel kernel-internals listener math models

View File

@ -2,8 +2,7 @@
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets-workspace IN: gadgets-workspace
USING: help arrays compiler gadgets gadgets-books USING: help arrays compiler gadgets gadgets-books
gadgets-browser gadgets-buttons gadgets-browser gadgets-buttons gadgets-dataflow gadgets-help
gadgets-dataflow gadgets-frames gadgets-grids gadgets-help
gadgets-listener gadgets-presentations gadgets-walker gadgets-listener gadgets-presentations gadgets-walker
gadgets-workspace generic kernel math modules scratchpad gadgets-workspace generic kernel math modules scratchpad
sequences syntax words io namespaces hashtables sequences syntax words io namespaces hashtables

View File

@ -1,8 +1,8 @@
! Copyright (C) 2006 Slava Pestov. ! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets IN: gadgets
USING: arrays errors gadgets gadgets-buttons gadgets-frames USING: arrays errors gadgets gadgets-buttons
gadgets-grids gadgets-labels gadgets-panes gadgets-presentations gadgets-labels gadgets-panes gadgets-presentations
gadgets-scrolling gadgets-theme gadgets-viewports generic gadgets-scrolling gadgets-theme gadgets-viewports generic
hashtables io kernel math models namespaces prettyprint queues hashtables io kernel math models namespaces prettyprint queues
sequences test threads help sequences words ; sequences test threads help sequences words ;

View File

@ -1,7 +1,7 @@
! Copyright (C) 2005, 2006 Slava Pestov. ! Copyright (C) 2005, 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
IN: gadgets IN: gadgets
USING: arrays errors freetype gadgets-frames generic hashtables USING: arrays errors freetype generic hashtables
kernel math models namespaces opengl sequences ; kernel math models namespaces opengl sequences ;
! The world gadget is the top level gadget that all (visible) ! The world gadget is the top level gadget that all (visible)