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:
- track:
- don't allow negative dimensions
- support removing items
- fix round-off error
- zooming doesn't work
- sort out various round-off issues
- implement handlers for open, quit events, and whatever else
- fix top level window positioning
- 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
kernel ;
TUPLE: apropos-gadget pane input ;
TUPLE: apropos-gadget scroller input ;
: apropos-pane ( gadget -- pane )
[ apropos-gadget? ] find-parent apropos-gadget-pane ;
: 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 ;
[ apropos-gadget? ] find-parent
apropos-gadget-scroller scroller-gadget ;
: <prompt> ( quot -- editor )
"" <editor> [
@ -24,11 +18,14 @@ TUPLE: apropos-gadget pane input ;
dup commit-editor-text
swap apropos-pane [ apropos ] with-pane ;
: <apropos-prompt> ( -- gadget )
[ show-apropos ] <prompt> dup faint-boundary ;
C: apropos-gadget ( -- )
<frame> over set-delegate
<pane> over add-apropos-gadget-pane
[ show-apropos ] <prompt> dup faint-boundary
over add-apropos-gadget-input ;
{
{ [ <pane> <scroller> ] set-apropos-gadget-scroller @center }
{ [ <apropos-prompt> ] set-apropos-gadget-input @top }
} make-frame ;
M: apropos-gadget pref-dim* drop { 350 200 0 } ;

View File

@ -1,8 +1,8 @@
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: gadgets-layouts
USING: arrays gadgets generic kernel math namespaces
sequences ;
USING: arrays gadgets generic kernel math namespaces sequences
words ;
! A frame arranges gadgets in a 3x3 grid, where the center
! gadgets gets left-over space.
@ -83,3 +83,20 @@ M: frame layout* ( frame -- dim )
swap reduce-grid [ second ] map
2dup
] 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
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 )
use get hash-concat hash-values ;
@ -50,12 +53,10 @@ TUPLE: listener-gadget pane stack ;
[ >r clear r> listener-thread ] in-thread drop ;
C: listener-gadget ( -- gadget )
dup delegate>frame
<input-pane> dup pick set-listener-gadget-pane
<scroller> over @center frame-add
<stack-bar> dup pick set-listener-gadget-stack
over @top frame-add
dup start-listener ;
{
{ [ <stack-bar> ] set-listener-gadget-stack @top }
{ [ <input-pane> <scroller> ] set-listener-gadget-scroller @center }
} make-frame dup start-listener ;
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 )
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 the scroller that contains this gadget, if any, so
#! that the gadget becomes visible.
@ -94,11 +88,15 @@ M: viewport focusable-child* ( viewport -- gadget )
C: scroller ( gadget -- scroller )
#! Wrap a scrolling pane around the gadget.
dup delegate>frame
[ >r <viewport> r> add-viewport ] keep
<x-slider> over add-x-slider
<y-slider> over add-y-slider
dup scroller-actions ;
{
{ [ <viewport> ] set-scroller-viewport @center }
{ [ <x-slider> ] set-scroller-x @bottom }
{ [ <y-slider> ] set-scroller-y @right }
} make-frame dup scroller-actions ;
M: scroller focusable-child* ( 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 ;
: slider-vertical? gadget-orientation { 0 1 0 } = ;
: <slide-button> ( orientation polygon amount -- )
: <slide-button> ( vector polygon amount -- )
>r { 0.5 0.5 0.5 1.0 } swap <polygon-gadget> r>
[ swap slide-by-line ] curry <repeat-button>
[ set-gadget-orientation ] keep ;
: <up-button> ( slider orientation -- button )
swap slider-vertical? arrow-up arrow-left ? -1
<slide-button> ;
: <left-button> { 0 1 0 } arrow-left -1 <slide-button> ;
: <right-button> { 0 1 0 } arrow-right 1 <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 )
swap slider-vertical? arrow-down arrow-right ? 1
<slide-button> ;
: <up-button> { 1 0 0 } arrow-up -1 <slide-button> ;
: <down-button> { 1 0 0 } arrow-down 1 <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 2dup slider-elevator add-gadget set-slider-thumb ;
: slider-opposite ( slider -- vector )
gadget-orientation { 1 1 0 } swap v- ;
: add-thumb ( slider vector -- )
<thumb> swap 2dup slider-elevator add-gadget
set-slider-thumb ;
C: slider ( vector -- slider )
dup delegate>frame
[ set-gadget-orientation ] keep
0 over set-slider-value
0 over set-slider-page
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 ;
0 over set-slider-max ;
: <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
! handle: native resource
TUPLE: world status focus fonts handle ;
TUPLE: world gadget status focus fonts handle ;
: free-fonts ( world -- )
dup world-handle select-gl-context
@ -19,18 +19,16 @@ TUPLE: world status focus fonts handle ;
: font-sprites ( font world -- sprites )
world-fonts [ drop V{ } clone ] cache ;
: add-status ( status world -- )
[ set-world-status ] 2keep @bottom frame-add ;
DEFER: request-focus
C: world ( gadget status -- world )
dup delegate>frame
{
{ [ ] set-world-status @bottom }
{ [ ] f @center }
} make-frame
t over set-gadget-root?
H{ } clone over set-world-fonts
[ add-status ] keep
[ @center frame-add ] 2keep
swap request-focus ;
dup world-gadget request-focus ;
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)
{
printf("fucked\n");
fflush(stdout);
if(in_page(siginfo->si_addr, (void *) ds_bot, 0, -1))
general_error(ERROR_DS_UNDERFLOW,F,F,false);
else if(in_page(siginfo->si_addr, (void *) ds_bot, ds_size, 0))