UI cleanups

slava 2006-05-20 02:29:01 +00:00
parent d0b79a9419
commit 49d2eed42a
8 changed files with 83 additions and 70 deletions

View File

@ -33,8 +33,11 @@
+ ui/help: + ui/help:
- track:
- don't allow negative dimensions
- support removing items
- fix round-off error
- zooming doesn't work - zooming doesn't work
- sort out various round-off issues
- implement handlers for open, quit events, and whatever else - implement handlers for open, quit events, and whatever else
- fix top level window positioning - fix top level window positioning
- changing window titles - changing window titles

View File

@ -3,17 +3,11 @@ USING: gadgets gadgets-editors gadgets-labels gadgets-layouts
gadgets-panes gadgets-scrolling gadgets-theme generic inspector gadgets-panes gadgets-scrolling gadgets-theme generic inspector
kernel ; kernel ;
TUPLE: apropos-gadget pane input ; TUPLE: apropos-gadget scroller input ;
: apropos-pane ( gadget -- pane ) : apropos-pane ( gadget -- pane )
[ apropos-gadget? ] find-parent apropos-gadget-pane ; [ apropos-gadget? ] find-parent
apropos-gadget-scroller scroller-gadget ;
: add-apropos-gadget-pane ( pane gadget -- )
2dup set-apropos-gadget-pane
>r <scroller> r> @center frame-add ;
: add-apropos-gadget-input ( input gadget -- )
2dup set-apropos-gadget-input @top frame-add ;
: <prompt> ( quot -- editor ) : <prompt> ( quot -- editor )
"" <editor> [ "" <editor> [
@ -24,11 +18,14 @@ TUPLE: apropos-gadget pane input ;
dup commit-editor-text dup commit-editor-text
swap apropos-pane [ apropos ] with-pane ; swap apropos-pane [ apropos ] with-pane ;
: <apropos-prompt> ( -- gadget )
[ show-apropos ] <prompt> dup faint-boundary ;
C: apropos-gadget ( -- ) C: apropos-gadget ( -- )
<frame> over set-delegate {
<pane> over add-apropos-gadget-pane { [ <pane> <scroller> ] set-apropos-gadget-scroller @center }
[ show-apropos ] <prompt> dup faint-boundary { [ <apropos-prompt> ] set-apropos-gadget-input @top }
over add-apropos-gadget-input ; } make-frame ;
M: apropos-gadget pref-dim* drop { 350 200 0 } ; M: apropos-gadget pref-dim* drop { 350 200 0 } ;

View File

@ -1,8 +1,8 @@
! Copyright (C) 2005 Slava Pestov. ! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license. ! See http://factor.sf.net/license.txt for BSD license.
IN: gadgets-layouts IN: gadgets-layouts
USING: arrays gadgets generic kernel math namespaces USING: arrays gadgets generic kernel math namespaces sequences
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.
@ -83,3 +83,20 @@ M: frame layout* ( frame -- dim )
swap reduce-grid [ second ] map swap reduce-grid [ second ] map
2dup 2dup
] keep rect-dim fill-center 3dup position-grid resize-grid ; ] keep rect-dim fill-center 3dup position-grid resize-grid ;
: frame-add-spec ( { quot setter loc } -- )
first3 >r >r call
frame get 2dup r> dup [ execute ] [ 3drop ] if
r> execute frame-add ;
: build-frame ( gadget specs -- )
#! Specs is an array of triples { quot setter loc }.
#! The setter has stack effect ( new gadget -- ),
#! the loc is @center, @top, etc.
[ swap frame set [ frame-add-spec ] each ] with-scope ;
: make-frame ( gadget specs -- gadget )
#! Specs is an array of triples { quot setter loc }.
#! The setter has stack effect ( new gadget -- ),
#! the loc is @center, @top, etc.
over [ delegate>frame build-frame ] keep ;

View File

@ -7,7 +7,10 @@ gadgets-theme generic hashtables io jedit
kernel listener math namespaces parser prettyprint kernel listener math namespaces parser prettyprint
sequences styles threads words ; sequences styles threads words ;
TUPLE: listener-gadget pane stack ; TUPLE: listener-gadget scroller stack ;
: listener-gadget-pane ( listener -- pane )
listener-gadget-scroller scroller-gadget ;
: usable-words ( -- words ) : usable-words ( -- words )
use get hash-concat hash-values ; use get hash-concat hash-values ;
@ -50,12 +53,10 @@ TUPLE: listener-gadget pane stack ;
[ >r clear r> listener-thread ] in-thread drop ; [ >r clear r> listener-thread ] in-thread drop ;
C: listener-gadget ( -- gadget ) C: listener-gadget ( -- gadget )
dup delegate>frame {
<input-pane> dup pick set-listener-gadget-pane { [ <stack-bar> ] set-listener-gadget-stack @top }
<scroller> over @center frame-add { [ <input-pane> <scroller> ] set-listener-gadget-scroller @center }
<stack-bar> dup pick set-listener-gadget-stack } make-frame dup start-listener ;
over @top frame-add
dup start-listener ;
M: listener-gadget pref-dim* drop { 600 600 0 } ; M: listener-gadget pref-dim* drop { 600 600 0 } ;

View File

@ -71,12 +71,6 @@ M: viewport layout* ( viewport -- )
M: viewport focusable-child* ( viewport -- gadget ) M: viewport focusable-child* ( viewport -- gadget )
gadget-child ; gadget-child ;
: add-viewport 2dup set-scroller-viewport @center frame-add ;
: add-x-slider 2dup set-scroller-x @bottom frame-add ;
: add-y-slider 2dup set-scroller-y @right frame-add ;
: scroll-to ( gadget -- ) : scroll-to ( gadget -- )
#! Scroll the scroller that contains this gadget, if any, so #! Scroll the scroller that contains this gadget, if any, so
#! that the gadget becomes visible. #! that the gadget becomes visible.
@ -94,11 +88,15 @@ M: viewport focusable-child* ( viewport -- gadget )
C: scroller ( gadget -- scroller ) C: scroller ( gadget -- scroller )
#! Wrap a scrolling pane around the gadget. #! Wrap a scrolling pane around the gadget.
dup delegate>frame {
[ >r <viewport> r> add-viewport ] keep { [ <viewport> ] set-scroller-viewport @center }
<x-slider> over add-x-slider { [ <x-slider> ] set-scroller-x @bottom }
<y-slider> over add-y-slider { [ <y-slider> ] set-scroller-y @right }
dup scroller-actions ; } make-frame dup scroller-actions ;
M: scroller focusable-child* ( scroller -- viewport ) M: scroller focusable-child* ( scroller -- viewport )
scroller-viewport ; scroller-viewport ;
: scroller-gadget ( scroller -- gadget )
#! Gadget being scrolled.
scroller-viewport gadget-child ;

View File

@ -108,44 +108,46 @@ M: elevator layout* ( elevator -- )
: slide-by-line ( -1/1 slider -- ) >r 32 * r> slide-by ; : slide-by-line ( -1/1 slider -- ) >r 32 * r> slide-by ;
: slider-vertical? gadget-orientation { 0 1 0 } = ; : <slide-button> ( vector polygon amount -- )
: <slide-button> ( orientation polygon amount -- )
>r { 0.5 0.5 0.5 1.0 } swap <polygon-gadget> r> >r { 0.5 0.5 0.5 1.0 } swap <polygon-gadget> r>
[ swap slide-by-line ] curry <repeat-button> [ swap slide-by-line ] curry <repeat-button>
[ set-gadget-orientation ] keep ; [ set-gadget-orientation ] keep ;
: <up-button> ( slider orientation -- button ) : <left-button> { 0 1 0 } arrow-left -1 <slide-button> ;
swap slider-vertical? arrow-up arrow-left ? -1 : <right-button> { 0 1 0 } arrow-right 1 <slide-button> ;
<slide-button> ;
: add-up { 1 1 1 } over gadget-orientation v- first2 frame-add ; : build-x-slider ( slider -- slider )
{
{ [ <left-button> ] f @left }
{ [ { 0 1 0 } <elevator> ] set-slider-elevator @center }
{ [ <right-button> ] f @right }
} build-frame ;
: <down-button> ( slider orientation -- button ) : <up-button> { 1 0 0 } arrow-up -1 <slide-button> ;
swap slider-vertical? arrow-down arrow-right ? 1 : <down-button> { 1 0 0 } arrow-down 1 <slide-button> ;
<slide-button> ;
: add-down { 1 1 1 } over gadget-orientation v+ first2 frame-add ; : build-y-slider ( slider -- slider )
{
{ [ <up-button> ] f @top }
{ [ { 1 0 0 } <elevator> ] set-slider-elevator @center }
{ [ <down-button> ] f @bottom }
} build-frame ;
: add-elevator 2dup set-slider-elevator @center frame-add ; : add-thumb ( slider vector -- )
<thumb> swap 2dup slider-elevator add-gadget
: add-thumb 2dup slider-elevator add-gadget set-slider-thumb ; set-slider-thumb ;
: slider-opposite ( slider -- vector )
gadget-orientation { 1 1 0 } swap v- ;
C: slider ( vector -- slider ) C: slider ( vector -- slider )
dup delegate>frame dup delegate>frame
[ set-gadget-orientation ] keep [ set-gadget-orientation ] keep
0 over set-slider-value 0 over set-slider-value
0 over set-slider-page 0 over set-slider-page
0 over set-slider-max 0 over set-slider-max ;
dup slider-opposite
dup <elevator> pick add-elevator
2dup <up-button> pick add-up
2dup <down-button> pick add-down
<thumb> over add-thumb ;
: <x-slider> ( -- slider ) { 1 0 0 } <slider> ; : <x-slider> ( -- slider )
{ 1 0 0 } <slider> dup build-x-slider
dup { 0 1 0 } add-thumb ;
: <y-slider> ( -- slider ) { 0 1 0 } <slider> ; : <y-slider> ( -- slider )
{ 0 1 0 } <slider> dup build-y-slider
dup { 1 0 0 } add-thumb ;

View File

@ -9,7 +9,7 @@ math namespaces opengl sequences ;
! fonts: mapping font tuples to sprite vectors ! fonts: mapping font tuples to sprite vectors
! handle: native resource ! handle: native resource
TUPLE: world status focus fonts handle ; TUPLE: world gadget status focus fonts handle ;
: free-fonts ( world -- ) : free-fonts ( world -- )
dup world-handle select-gl-context dup world-handle select-gl-context
@ -19,18 +19,16 @@ TUPLE: world status focus fonts handle ;
: font-sprites ( font world -- sprites ) : font-sprites ( font world -- sprites )
world-fonts [ drop V{ } clone ] cache ; world-fonts [ drop V{ } clone ] cache ;
: add-status ( status world -- )
[ set-world-status ] 2keep @bottom frame-add ;
DEFER: request-focus DEFER: request-focus
C: world ( gadget status -- world ) C: world ( gadget status -- world )
dup delegate>frame {
{ [ ] set-world-status @bottom }
{ [ ] f @center }
} make-frame
t over set-gadget-root? t over set-gadget-root?
H{ } clone over set-world-fonts H{ } clone over set-world-fonts
[ add-status ] keep dup world-gadget request-focus ;
[ @center frame-add ] 2keep
swap request-focus ;
GENERIC: find-world ( gadget -- world ) GENERIC: find-world ( gadget -- world )

View File

@ -18,9 +18,6 @@ static bool in_page(void *fault, void *i_area, CELL area_size, int offset)
void signal_handler(int signal, siginfo_t* siginfo, void* uap) void signal_handler(int signal, siginfo_t* siginfo, void* uap)
{ {
printf("fucked\n");
fflush(stdout);
if(in_page(siginfo->si_addr, (void *) ds_bot, 0, -1)) if(in_page(siginfo->si_addr, (void *) ds_bot, 0, -1))
general_error(ERROR_DS_UNDERFLOW,F,F,false); general_error(ERROR_DS_UNDERFLOW,F,F,false);
else if(in_page(siginfo->si_addr, (void *) ds_bot, ds_size, 0)) else if(in_page(siginfo->si_addr, (void *) ds_bot, ds_size, 0))