cvs
Slava Pestov 2005-10-26 01:52:26 +00:00
parent b1574b8152
commit 875c6826c8
15 changed files with 120 additions and 99 deletions

View File

@ -105,3 +105,12 @@ M: object tail ( index seq -- seq ) [ tail-slice ] keep like ;
: drop-prefix ( seq1 seq2 -- seq1 seq2 ) : drop-prefix ( seq1 seq2 -- seq1 seq2 )
2dup mismatch dup -1 = [ drop 2dup min-length ] when 2dup mismatch dup -1 = [ drop 2dup min-length ] when
tuck swap tail-slice >r swap tail-slice r> ; tuck swap tail-slice >r swap tail-slice r> ;
IN: strings
: completion? ( partial completion quot -- ? )
#! Test if 'partial' is a completion of 'completion', by
#! comparing each "-"-delimited chunk using 'quot'. The
#! quotation is usually either [ subseq? ] or [ swap head? ].
>r [ "-" split ] 2apply 2dup [ length ] 2apply <=
[ r> 2map [ ] all? ] [ r> 3drop f ] if ; inline

View File

@ -373,4 +373,4 @@ M: general-list tutorial-line
: <tutorial-button> : <tutorial-button>
"Tutorial" <label> "Tutorial" <label>
[ drop [ tutorial ] pane get pane-call ] <button> ; [ drop [ tutorial ] pane get pane-call ] <bevel-button> ;

View File

@ -89,7 +89,7 @@ USING: alien errors kernel math namespaces opengl sdl sequences ;
GL_LINE_LOOP (gl-poly) ; GL_LINE_LOOP (gl-poly) ;
: gl-set-clip ( loc dim -- ) : gl-set-clip ( loc dim -- )
dup first2 ( 1+ ) >r >r dup first2 1+ >r >r
over second swap second + height get swap - >r over second swap second + height get swap - >r
first r> r> r> glScissor ; first r> r> r> glScissor ;

View File

@ -14,9 +14,6 @@ IN: styles
SYMBOL: foreground ! Used for text and outline shapes. SYMBOL: foreground ! Used for text and outline shapes.
SYMBOL: background ! Used for filled shapes. SYMBOL: background ! Used for filled shapes.
SYMBOL: rollover-bg
SYMBOL: rollover
SYMBOL: reverse-video
SYMBOL: font SYMBOL: font
SYMBOL: font-size SYMBOL: font-size

View File

@ -2,7 +2,7 @@
! See http://factor.sf.net/license.txt for BSD license. ! See http://factor.sf.net/license.txt for BSD license.
IN: prettyprint IN: prettyprint
USING: generic hashtables io kernel lists math namespaces USING: generic hashtables io kernel lists math namespaces
sequences styles words ; sequences strings styles words ;
: declaration. ( word prop -- ) : declaration. ( word prop -- )
tuck word-name word-prop [ pprint-word ] [ drop ] if ; tuck word-name word-prop [ pprint-word ] [ drop ] if ;
@ -128,7 +128,7 @@ M: word class. drop ;
] with-pprint ; ] with-pprint ;
: (apropos) ( substring -- seq ) : (apropos) ( substring -- seq )
all-words [ word-name subseq? ] subset-with ; all-words [ word-name [ subseq? ] completion? ] subset-with ;
: apropos ( substring -- ) : apropos ( substring -- )
#! List all words that contain a string. #! List all words that contain a string.

View File

@ -35,7 +35,7 @@ TUPLE: book-browser book ;
: <book-button> ( polygon quot -- button ) : <book-button> ( polygon quot -- button )
\ find-book swons >r <polygon-gadget> dup icon-theme r> \ find-book swons >r <polygon-gadget> dup icon-theme r>
<button> ; <bevel-button> ;
: <book-buttons> ( book -- gadget ) : <book-buttons> ( book -- gadget )
[ [

View File

@ -5,25 +5,24 @@ USING: gadgets gadgets-borders gadgets-layouts gadgets-theme
generic io kernel lists math namespaces sequences sequences generic io kernel lists math namespaces sequences sequences
styles threads ; styles threads ;
TUPLE: button rollover? pressed? ;
: button-down? ( n -- ? ) hand get hand-buttons member? ; : button-down? ( n -- ? ) hand get hand-buttons member? ;
: mouse-over? ( gadget -- ? ) hand get hand-gadget child? ; : mouse-over? ( gadget -- ? ) hand get hand-gadget child? ;
: button-pressed? ( button -- ? ) : mouse-clicked? ( gadget -- ? ) hand get hand-clicked child? ;
#! Return true if the mouse was clicked on the button, and
#! is currently over the button.
dup mouse-over? 1 button-down? and
[ hand get hand-clicked child? ] [ drop f ] if ;
: button-update ( button -- ) : button-update ( button -- )
dup dup mouse-over? rollover set-paint-prop dup mouse-over? over set-button-rollover?
dup dup button-pressed? reverse-video set-paint-prop dup button-rollover? 1 button-down? and
over mouse-clicked? and over set-button-pressed?
relayout-1 ; relayout-1 ;
: button-clicked ( button -- ) : button-clicked ( button -- )
#! If the mouse is released while still inside the button, #! If the mouse is released while still inside the button,
#! fire an action gesture. #! fire an action gesture.
dup button-update dup mouse-over? dup button-update dup button-rollover?
[ [ action ] swap handle-gesture ] when drop ; [ [ action ] swap handle-gesture ] when drop ;
: button-action ( action -- quot ) : button-action ( action -- quot )
@ -36,18 +35,18 @@ styles threads ;
dup [ button-update ] [ mouse-leave ] set-action dup [ button-update ] [ mouse-leave ] set-action
[ button-update ] [ mouse-enter ] set-action ; [ button-update ] [ mouse-enter ] set-action ;
TUPLE: button ;
C: button ( gadget quot -- button ) C: button ( gadget quot -- button )
rot <border> dup button-theme rot <border> over set-gadget-delegate
over set-gadget-delegate
[ swap button-gestures ] keep ; [ swap button-gestures ] keep ;
: <roll-button> ( gadget quot -- button )
>r dup roll-button-theme dup r> button-gestures ;
: <highlight-button> ( gadget quot -- button ) : <highlight-button> ( gadget quot -- button )
dupd button-gestures ; <button> @{ 0 0 0 }@ over set-border-size ;
: <roll-button> ( gadget quot -- button )
<highlight-button> dup roll-button-theme ;
: <bevel-button> ( gadget quot -- button )
<button> dup bevel-button-theme ;
: repeat-button-down ( button -- ) : repeat-button-down ( button -- )
dup 100 add-timer button-clicked ; dup 100 add-timer button-clicked ;
@ -62,6 +61,21 @@ C: button ( gadget quot -- button )
: <repeat-button> ( gadget quot -- button ) : <repeat-button> ( gadget quot -- button )
#! Button that calls the quotation every 100ms as long as #! Button that calls the quotation every 100ms as long as
#! the mouse is held down. #! the mouse is held down.
<button> dup repeat-actions ; <bevel-button> dup repeat-actions ;
M: button tick ( ms object -- ) nip button-clicked ; M: button tick ( ms object -- ) nip button-clicked ;
TUPLE: button-paint plain rollover pressed ;
: button-paint ( button paint -- button paint )
@{
@{ [ over button-pressed? ] [ button-paint-pressed ] }@
@{ [ over button-rollover? ] [ button-paint-rollover ] }@
@{ [ t ] [ button-paint-plain ] }@
}@ cond ;
M: button-paint draw-interior ( button paint -- )
button-paint draw-interior ;
M: button-paint draw-boundary ( button paint -- )
button-paint draw-boundary ;

View File

@ -144,8 +144,7 @@ M: editor layout* ( editor -- )
M: editor label-text ( editor -- string ) M: editor label-text ( editor -- string )
editor-text ; editor-text ;
M: editor draw-gadget* ( editor -- ) M: editor draw-gadget* ( editor -- ) draw-label ;
dup delegate draw-gadget* draw-label ;
: set-possibilities ( possibilities editor -- ) : set-possibilities ( possibilities editor -- )
#! Set completion possibilities. #! Set completion possibilities.

View File

@ -22,10 +22,10 @@ M: label pref-dim ( label -- dim )
label-size ; label-size ;
: draw-label ( label -- ) : draw-label ( label -- )
dup fg gl-color dup gadget-font swap label-text draw-string ; dup foreground paint-prop gl-color
dup gadget-font swap label-text draw-string ;
M: label draw-gadget* ( label -- ) M: label draw-gadget* ( label -- ) draw-label ;
dup delegate draw-gadget* draw-label ;
M: label set-message ( string/f label -- ) M: label set-message ( string/f label -- )
set-label-text* ; set-label-text* ;

View File

@ -140,16 +140,12 @@ M: document-elt prev-elt* 3drop 0 ;
history-index get dup 1+ history-length >= history-index get dup 1+ history-length >=
[ drop ] [ 1+ goto-history ] if ; [ drop ] [ 1+ goto-history ] if ;
: completion? ( partial completion -- ? )
[ "-" split ] 2apply 2dup [ length ] 2apply <=
[ [ swap head? ] 2map [ ] all? ] [ 2drop f ] if ;
: completions ( -- seq ) : completions ( -- seq )
<< word-elt >> prev-elt@ 2dup = [ << word-elt >> prev-elt@ 2dup = [
2drop f 2drop f
] [ ] [
line-text get subseq line-text get subseq possibilities get
possibilities get [ completion? ] subset-with [ [ swap head? ] completion? ] subset-with
] if ; ] if ;
: complete ( completion -- ) : complete ( completion -- )

View File

@ -63,8 +63,7 @@ C: display ( -- display )
1/2 <x-splitter> ; 1/2 <x-splitter> ;
: <status-bar> ( -- gadget ) : <status-bar> ( -- gadget )
"" <label> dup solid-interior "" <label> dup solid-interior dup reverse-video-theme ;
dup t reverse-video set-paint-prop ;
: listener-application ( -- ) : listener-application ( -- )
t t <pane> dup pane global set-hash t t <pane> dup pane global set-hash

View File

@ -5,11 +5,27 @@ io kernel lists math namespaces opengl sdl sequences strings
styles vectors ; styles vectors ;
IN: gadgets IN: gadgets
GENERIC: draw-gadget* ( gadget -- )
M: gadget draw-gadget* ( gadget -- ) drop ;
SYMBOL: interior
SYMBOL: boundary
GENERIC: draw-interior ( gadget interior -- )
GENERIC: draw-boundary ( gadget boundary -- )
SYMBOL: clip SYMBOL: clip
: visible-children ( gadget -- seq ) clip get swap children-on ; : visible-children ( gadget -- seq ) clip get swap children-on ;
GENERIC: draw-gadget* ( gadget -- ) DEFER: draw-gadget
: (draw-gadget) ( gadget -- )
dup dup interior paint-prop* draw-interior
dup dup boundary paint-prop* draw-boundary
dup draw-gadget*
visible-children [ draw-gadget ] each ;
: do-clip ( gadget -- ) : do-clip ( gadget -- )
>absolute clip [ rect-intersect dup ] change >absolute clip [ rect-intersect dup ] change
@ -24,12 +40,9 @@ GENERIC: draw-gadget* ( gadget -- )
: draw-gadget ( gadget -- ) : draw-gadget ( gadget -- )
clip get over inside? [ clip get over inside? [
[ [
dup do-clip [ dup do-clip [ dup (draw-gadget) ] with-translation
dup draw-gadget*
visible-children [ draw-gadget ] each
] with-translation
] with-scope ] with-scope
] [ drop ] if ; ] when drop ;
: paint-prop* ( gadget key -- value ) swap gadget-paint ?hash ; : paint-prop* ( gadget key -- value ) swap gadget-paint ?hash ;
@ -51,24 +64,7 @@ GENERIC: draw-gadget* ( gadget -- )
: add-paint ( gadget hash -- ) : add-paint ( gadget hash -- )
dup [ >r init-paint r> hash-update ] [ 2drop ] if ; dup [ >r init-paint r> hash-update ] [ 2drop ] if ;
: fg ( gadget -- color )
dup reverse-video paint-prop
background foreground ? paint-prop ;
: bg ( gadget -- color )
dup reverse-video paint-prop [
foreground
] [
dup rollover paint-prop rollover-bg background ?
] if paint-prop ;
! Pen paint properties ! Pen paint properties
SYMBOL: interior
SYMBOL: boundary
GENERIC: draw-interior ( gadget interior -- )
GENERIC: draw-boundary ( gadget boundary -- )
M: f draw-interior 2drop ; M: f draw-interior 2drop ;
M: f draw-boundary 2drop ; M: f draw-boundary 2drop ;
@ -76,28 +72,14 @@ M: f draw-boundary 2drop ;
TUPLE: solid ; TUPLE: solid ;
: rect>screen ( shape -- x1 y1 x2 y2 ) : rect>screen ( shape -- x1 y1 x2 y2 )
>r origin get dup r> rect-dim v+ >r origin get dup r> rect-dim v+ [ first2 ] 2apply ;
[ first2 ] 2apply ( [ 1 - ] 2apply ) ;
! Solid pen ! Solid pen
M: solid draw-interior M: solid draw-interior
drop dup bg gl-color rect-dim gl-fill-rect ; drop dup background paint-prop gl-color rect-dim gl-fill-rect ;
M: solid draw-boundary M: solid draw-boundary
drop dup fg gl-color rect-dim ( @{ 1 1 0 }@ v- ) gl-rect ; drop dup foreground paint-prop gl-color rect-dim gl-rect ;
! Rollover only
TUPLE: rollover-only ;
C: rollover-only << solid >> over set-delegate ;
M: rollover-only draw-interior ( gadget interior -- )
over rollover paint-prop
[ delegate draw-interior ] [ 2drop ] if ;
M: rollover-only draw-boundary ( gadget boundary -- )
over rollover paint-prop
[ delegate draw-boundary ] [ 2drop ] if ;
! Gradient pen ! Gradient pen
TUPLE: gradient colors ; TUPLE: gradient colors ;
@ -106,19 +88,14 @@ M: gradient draw-interior ( gadget gradient -- )
over gadget-orientation swap gradient-colors rot rect-dim over gadget-orientation swap gradient-colors rot rect-dim
gl-gradient ; gl-gradient ;
M: gadget draw-gadget* ( gadget -- )
dup
dup interior paint-prop* draw-interior
dup boundary paint-prop* draw-boundary ;
! Polygon pen ! Polygon pen
TUPLE: polygon points ; TUPLE: polygon points ;
M: polygon draw-boundary ( gadget polygon -- ) M: polygon draw-boundary ( gadget polygon -- )
swap fg gl-color polygon-points gl-poly ; swap foreground paint-prop gl-color polygon-points gl-poly ;
M: polygon draw-interior ( gadget polygon -- ) M: polygon draw-interior ( gadget polygon -- )
swap bg gl-color polygon-points gl-fill-poly ; swap background paint-prop gl-color polygon-points gl-fill-poly ;
: arrow-up @{ @{ 3 0 0 }@ @{ 6 6 0 }@ @{ 0 6 0 }@ }@ ; : arrow-up @{ @{ 3 0 0 }@ @{ 6 6 0 }@ @{ 0 6 0 }@ }@ ;
: arrow-right @{ @{ 0 0 0 }@ @{ 6 3 0 }@ @{ 0 6 0 }@ }@ ; : arrow-right @{ @{ 0 0 0 }@ @{ 6 3 0 }@ @{ 0 6 0 }@ }@ ;

View File

@ -28,15 +28,15 @@ TUPLE: command-button object ;
<menu> show-hand-menu ; <menu> show-hand-menu ;
C: command-button ( gadget object -- button ) C: command-button ( gadget object -- button )
[ set-command-button-object ] keep [
set-command-button-object
[ command-menu ] <roll-button>
] keep
[ set-gadget-delegate ] keep [ set-gadget-delegate ] keep
dup [ command-menu ] button-gestures
dup roll-button-theme
dup menu-button-actions ; dup menu-button-actions ;
M: command-button gadget-help ( button -- string ) M: command-button gadget-help ( button -- string )
command-button-object command-button-object dup word? [ synopsis ] [ summary ] if ;
dup word? [ synopsis ] [ summary ] if ;
: init-commands ( gadget -- gadget ) : init-commands ( gadget -- gadget )
dup presented paint-prop [ <command-button> ] when* ; dup presented paint-prop [ <command-button> ] when* ;

View File

@ -55,7 +55,9 @@ SYMBOL: slider-changed
: <thumb> ( vector -- thumb ) : <thumb> ( vector -- thumb )
<gadget> [ set-gadget-orientation ] keep <gadget> [ set-gadget-orientation ] keep
t over set-gadget-root? dup button-theme dup thumb-actions ; t over set-gadget-root?
dup thumb-theme
dup thumb-actions ;
: slide-by ( amount gadget -- ) : slide-by ( amount gadget -- )
#! The gadget can be any child of a slider. #! The gadget can be any child of a slider.

View File

@ -1,5 +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-buttons
DEFER: <button-paint>
IN: gadgets-theme IN: gadgets-theme
USING: arrays gadgets kernel sequences styles ; USING: arrays gadgets kernel sequences styles ;
@ -9,20 +12,44 @@ USING: arrays gadgets kernel sequences styles ;
: solid-boundary ( gadget -- ) : solid-boundary ( gadget -- )
<< solid >> boundary set-paint-prop ; << solid >> boundary set-paint-prop ;
: button-theme ( gadget -- ) : plain-gradient
<< gradient f @{ << gradient f @{
@{ 240 240 240 }@ @{ 240 240 240 }@
@{ 192 192 192 }@ @{ 192 192 192 }@
@{ 192 192 192 }@ @{ 192 192 192 }@
@{ 96 96 96 }@ @{ 96 96 96 }@
}@ >> interior set-paint-prop ; }@ >> ;
: rollover-gradient
<< gradient f @{
@{ 255 255 255 }@
@{ 216 216 216 }@
@{ 216 216 216 }@
@{ 112 112 112 }@
}@ >> ;
: pressed-gradient
<< gradient f @{
@{ 112 112 112 }@
@{ 216 216 216 }@
@{ 216 216 216 }@
@{ 255 255 255 }@
}@ >> ;
: bevel-button-theme ( gadget -- )
plain-gradient rollover-gradient pressed-gradient
<button-paint> interior set-paint-prop ;
: thumb-theme ( thumb -- )
plain-gradient interior set-paint-prop ;
: editor-theme ( editor -- ) : editor-theme ( editor -- )
bold font-style set-paint-prop ; bold font-style set-paint-prop ;
: roll-button-theme ( button -- ) : roll-button-theme ( button -- )
dup <rollover-only> interior set-paint-prop dup << button-paint f f << solid >> << solid >> >> boundary set-paint-prop
<rollover-only> boundary set-paint-prop ; dup << button-paint f f f << solid >> >> interior set-paint-prop
@{ 236 230 232 }@ background set-paint-prop ;
: caret-theme ( caret -- ) : caret-theme ( caret -- )
dup solid-interior dup solid-interior
@ -36,8 +63,12 @@ USING: arrays gadgets kernel sequences styles ;
}@ >> interior set-paint-prop }@ >> interior set-paint-prop
light-gray background set-paint-prop ; light-gray background set-paint-prop ;
: reverse-video-theme ( gadget -- )
dup black background set-paint-prop
white foreground set-paint-prop ;
: divider-theme ( divider -- ) : divider-theme ( divider -- )
dup solid-interior t reverse-video set-paint-prop ; dup solid-interior reverse-video-theme ;
: display-title-theme : display-title-theme
dup @{ 216 232 255 }@ background set-paint-prop dup @{ 216 232 255 }@ background set-paint-prop
@ -50,15 +81,12 @@ USING: arrays gadgets kernel sequences styles ;
: icon-theme ( gadget -- ) : icon-theme ( gadget -- )
dup gray background set-paint-prop dup gray background set-paint-prop
dup light-gray rollover-bg set-paint-prop
gray foreground set-paint-prop ; gray foreground set-paint-prop ;
: world-theme : world-theme
{{ {{
[[ background @{ 255 255 255 }@ ]] [[ background @{ 255 255 255 }@ ]]
[[ rollover-bg @{ 236 230 232 }@ ]]
[[ foreground @{ 0 0 0 }@ ]] [[ foreground @{ 0 0 0 }@ ]]
[[ reverse-video f ]]
[[ font "Monospaced" ]] [[ font "Monospaced" ]]
[[ font-size 12 ]] [[ font-size 12 ]]
[[ font-style plain ]] [[ font-style plain ]]