ui.*: Use new accessors
parent
e9f8379564
commit
04f8eaf220
|
@ -1,6 +1,8 @@
|
||||||
! Copyright (C) 2006, 2007 Slava Pestov.
|
! Copyright (C) 2006, 2007 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
|
||||||
USING: kernel accessors ui.gadgets ui.gestures namespaces ;
|
USING: kernel accessors ui.gadgets ui.gestures namespaces ;
|
||||||
|
|
||||||
IN: ui.clipboards
|
IN: ui.clipboards
|
||||||
|
|
||||||
! Two text transfer buffers
|
! Two text transfer buffers
|
||||||
|
@ -14,7 +16,7 @@ M: object paste-clipboard
|
||||||
|
|
||||||
GENERIC: copy-clipboard ( string gadget clipboard -- )
|
GENERIC: copy-clipboard ( string gadget clipboard -- )
|
||||||
|
|
||||||
M: object copy-clipboard nip (>>contents) ;
|
M: object copy-clipboard nip set-clipboard-contents ;
|
||||||
|
|
||||||
SYMBOL: clipboard
|
SYMBOL: clipboard
|
||||||
SYMBOL: selection
|
SYMBOL: selection
|
||||||
|
|
|
@ -16,12 +16,35 @@ HELP: init-freetype
|
||||||
{ $notes "Do not call this word if you are using the UI." } ;
|
{ $notes "Do not call this word if you are using the UI." } ;
|
||||||
|
|
||||||
HELP: font
|
HELP: font
|
||||||
{ $class-description "A font which has been loaded by FreeType. Font instances have the following slots:"
|
|
||||||
{ $list
|
{ $class-description
|
||||||
{ { $link font-ascent } ", " { $link font-descent } ", " { $link font-height } " - metrics." }
|
|
||||||
{ { $link font-handle } " - alien pointer to an " { $snippet "FT_Face" } "." }
|
"A font which has been loaded by FreeType. Font instances have the following slots:"
|
||||||
{ { $link font-widths } " - sequence of character widths. Use " { $link char-width } " and " { $link string-width } " to compute string widths instead of reading this sequence directly." }
|
|
||||||
}
|
{
|
||||||
|
$list
|
||||||
|
{
|
||||||
|
{ $snippet "ascent" } ", "
|
||||||
|
{ $snippet "descent" } ", "
|
||||||
|
{ $snippet "height" } " - metrics."
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
{ $snippet "handle" }
|
||||||
|
" - alien pointer to an "
|
||||||
|
{ $snippet "FT_Face" } "."
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
{ $snippet "widths" }
|
||||||
|
" - sequence of character widths. Use "
|
||||||
|
{ $snippet "width" }
|
||||||
|
" and "
|
||||||
|
{ $snippet "width" }
|
||||||
|
" to compute string widths instead of reading this sequence directly."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
HELP: close-freetype
|
HELP: close-freetype
|
||||||
|
|
|
@ -33,7 +33,7 @@ ascent descent height handle widths ;
|
||||||
|
|
||||||
M: font hashcode* drop font hashcode* ;
|
M: font hashcode* drop font hashcode* ;
|
||||||
|
|
||||||
: close-font ( font -- ) font-handle FT_Done_Face ;
|
: close-font ( font -- ) handle>> FT_Done_Face ;
|
||||||
|
|
||||||
: close-freetype ( -- )
|
: close-freetype ( -- )
|
||||||
global [
|
global [
|
||||||
|
@ -111,11 +111,11 @@ M: freetype-renderer open-font ( font -- open-font )
|
||||||
freetype drop open-fonts get [ <font> ] cache ;
|
freetype drop open-fonts get [ <font> ] cache ;
|
||||||
|
|
||||||
: load-glyph ( font char -- glyph )
|
: load-glyph ( font char -- glyph )
|
||||||
>r font-handle dup r> 0 FT_Load_Char
|
>r handle>> dup r> 0 FT_Load_Char
|
||||||
freetype-error face-glyph ;
|
freetype-error face-glyph ;
|
||||||
|
|
||||||
: char-width ( open-font char -- w )
|
: char-width ( open-font char -- w )
|
||||||
over font-widths [
|
over widths>> [
|
||||||
dupd load-glyph glyph-hori-advance ft-ceil
|
dupd load-glyph glyph-hori-advance ft-ceil
|
||||||
] cache nip ;
|
] cache nip ;
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ M: freetype-renderer string-width ( open-font string -- w )
|
||||||
0 -rot [ char-width + ] with each ;
|
0 -rot [ char-width + ] with each ;
|
||||||
|
|
||||||
M: freetype-renderer string-height ( open-font string -- h )
|
M: freetype-renderer string-height ( open-font string -- h )
|
||||||
drop font-height ;
|
drop height>> ;
|
||||||
|
|
||||||
: glyph-size ( glyph -- dim )
|
: glyph-size ( glyph -- dim )
|
||||||
dup glyph-hori-advance ft-ceil
|
dup glyph-hori-advance ft-ceil
|
||||||
|
@ -166,7 +166,7 @@ M: freetype-renderer string-height ( open-font string -- h )
|
||||||
|
|
||||||
: glyph-texture-loc ( glyph font -- loc )
|
: glyph-texture-loc ( glyph font -- loc )
|
||||||
over glyph-hori-bearing-x ft-floor -rot
|
over glyph-hori-bearing-x ft-floor -rot
|
||||||
font-ascent swap glyph-hori-bearing-y - ft-floor 2array ;
|
ascent>> swap glyph-hori-bearing-y - ft-floor 2array ;
|
||||||
|
|
||||||
: glyph-texture-size ( glyph -- dim )
|
: glyph-texture-size ( glyph -- dim )
|
||||||
[ glyph-bitmap-width next-power-of-2 ]
|
[ glyph-bitmap-width next-power-of-2 ]
|
||||||
|
|
|
@ -5,7 +5,7 @@ IN: ui.gadgets.books
|
||||||
|
|
||||||
TUPLE: book < gadget ;
|
TUPLE: book < gadget ;
|
||||||
|
|
||||||
: hide-all ( book -- ) gadget-children [ hide-gadget ] each ;
|
: hide-all ( book -- ) children>> [ hide-gadget ] each ;
|
||||||
|
|
||||||
: current-page ( book -- gadget ) [ control-value ] keep nth-gadget ;
|
: current-page ( book -- gadget ) [ control-value ] keep nth-gadget ;
|
||||||
|
|
||||||
|
|
|
@ -119,9 +119,9 @@ M: checkmark-paint draw-interior
|
||||||
black <solid>
|
black <solid>
|
||||||
black <checkmark-paint>
|
black <checkmark-paint>
|
||||||
<button-paint>
|
<button-paint>
|
||||||
over set-gadget-interior
|
over (>>interior)
|
||||||
black <solid>
|
black <solid>
|
||||||
swap set-gadget-boundary ;
|
swap (>>boundary) ;
|
||||||
|
|
||||||
: <checkmark> ( -- gadget )
|
: <checkmark> ( -- gadget )
|
||||||
<gadget>
|
<gadget>
|
||||||
|
@ -165,9 +165,9 @@ M: radio-paint draw-boundary
|
||||||
black <radio-paint>
|
black <radio-paint>
|
||||||
black <radio-paint>
|
black <radio-paint>
|
||||||
<button-paint>
|
<button-paint>
|
||||||
over set-gadget-interior
|
over (>>interior)
|
||||||
black <radio-paint>
|
black <radio-paint>
|
||||||
swap set-gadget-boundary ;
|
swap (>>boundary) ;
|
||||||
|
|
||||||
: <radio-knob> ( -- gadget )
|
: <radio-knob> ( -- gadget )
|
||||||
<gadget>
|
<gadget>
|
||||||
|
|
|
@ -121,7 +121,7 @@ M: editor ungraft*
|
||||||
line-height 0 swap 2array ;
|
line-height 0 swap 2array ;
|
||||||
|
|
||||||
: scroll>caret ( editor -- )
|
: scroll>caret ( editor -- )
|
||||||
dup gadget-graft-state second [
|
dup graft-state>> second [
|
||||||
dup caret-loc over caret-dim { 1 0 } v+ <rect>
|
dup caret-loc over caret-dim { 1 0 } v+ <rect>
|
||||||
over scroll>rect
|
over scroll>rect
|
||||||
] when drop ;
|
] when drop ;
|
||||||
|
|
|
@ -150,7 +150,7 @@ DEFER: relayout
|
||||||
: invalidate* ( gadget -- )
|
: invalidate* ( gadget -- )
|
||||||
\ invalidate* over (>>layout-state)
|
\ invalidate* over (>>layout-state)
|
||||||
dup forget-pref-dim
|
dup forget-pref-dim
|
||||||
dup gadget-root?
|
dup root?>>
|
||||||
[ layout-later ] [ parent>> [ relayout ] when* ] if ;
|
[ layout-later ] [ parent>> [ relayout ] when* ] if ;
|
||||||
|
|
||||||
: relayout ( gadget -- )
|
: relayout ( gadget -- )
|
||||||
|
|
|
@ -77,13 +77,14 @@ M: grid pref-dim*
|
||||||
M: grid layout* dup compute-grid grid-layout ;
|
M: grid layout* dup compute-grid grid-layout ;
|
||||||
|
|
||||||
M: grid children-on ( rect gadget -- seq )
|
M: grid children-on ( rect gadget -- seq )
|
||||||
dup gadget-children empty? [
|
dup children>> empty?
|
||||||
2drop f
|
[ 2drop f ]
|
||||||
] [
|
[
|
||||||
{ 0 1 } swap grid>>
|
{ 0 1 } swap grid>>
|
||||||
[ 0 <column> fast-children-on ] keep
|
[ 0 <column> fast-children-on ] keep
|
||||||
<slice> concat
|
<slice> concat
|
||||||
] if ;
|
]
|
||||||
|
if ;
|
||||||
|
|
||||||
M: grid gadget-text*
|
M: grid gadget-text*
|
||||||
grid>>
|
grid>>
|
||||||
|
|
|
@ -23,7 +23,7 @@ TUPLE: incremental < pack cursor ;
|
||||||
{ 0 0 } >>cursor ;
|
{ 0 0 } >>cursor ;
|
||||||
|
|
||||||
M: incremental pref-dim*
|
M: incremental pref-dim*
|
||||||
dup gadget-layout-state [
|
dup layout-state>> [
|
||||||
dup call-next-method over set-incremental-cursor
|
dup call-next-method over set-incremental-cursor
|
||||||
] when incremental-cursor ;
|
] when incremental-cursor ;
|
||||||
|
|
||||||
|
@ -31,13 +31,13 @@ M: incremental pref-dim*
|
||||||
[
|
[
|
||||||
swap rect-dim swap incremental-cursor
|
swap rect-dim swap incremental-cursor
|
||||||
2dup v+ >r vmax r>
|
2dup v+ >r vmax r>
|
||||||
] keep gadget-orientation set-axis ;
|
] keep orientation>> set-axis ;
|
||||||
|
|
||||||
: update-cursor ( gadget incremental -- )
|
: update-cursor ( gadget incremental -- )
|
||||||
[ next-cursor ] keep set-incremental-cursor ;
|
[ next-cursor ] keep set-incremental-cursor ;
|
||||||
|
|
||||||
: incremental-loc ( gadget incremental -- )
|
: incremental-loc ( gadget incremental -- )
|
||||||
dup incremental-cursor swap gadget-orientation v*
|
dup incremental-cursor swap orientation>> v*
|
||||||
swap set-rect-loc ;
|
swap set-rect-loc ;
|
||||||
|
|
||||||
: prefer-incremental ( gadget -- )
|
: prefer-incremental ( gadget -- )
|
||||||
|
@ -51,11 +51,11 @@ M: incremental pref-dim*
|
||||||
2dup incremental-loc
|
2dup incremental-loc
|
||||||
tuck update-cursor
|
tuck update-cursor
|
||||||
dup prefer-incremental
|
dup prefer-incremental
|
||||||
gadget-parent [ invalidate* ] when* ;
|
parent>> [ invalidate* ] when* ;
|
||||||
|
|
||||||
: clear-incremental ( incremental -- )
|
: clear-incremental ( incremental -- )
|
||||||
not-in-layout
|
not-in-layout
|
||||||
dup (clear-gadget)
|
dup (clear-gadget)
|
||||||
dup forget-pref-dim
|
dup forget-pref-dim
|
||||||
{ 0 0 } over set-incremental-cursor
|
{ 0 0 } over set-incremental-cursor
|
||||||
gadget-parent [ relayout ] when* ;
|
parent>> [ relayout ] when* ;
|
||||||
|
|
|
@ -29,11 +29,11 @@ M: labelled-gadget focusable-child* labelled-gadget-content ;
|
||||||
gray close-box <polygon-gadget> swap <bevel-button> ;
|
gray close-box <polygon-gadget> swap <bevel-button> ;
|
||||||
|
|
||||||
: title-theme ( gadget -- )
|
: title-theme ( gadget -- )
|
||||||
{ 1 0 } over set-gadget-orientation
|
{ 1 0 } over (>>orientation)
|
||||||
T{ gradient f {
|
T{ gradient f {
|
||||||
T{ rgba f 0.65 0.65 1.0 1.0 }
|
T{ rgba f 0.65 0.65 1.0 1.0 }
|
||||||
T{ rgba f 0.65 0.45 1.0 1.0 }
|
T{ rgba f 0.65 0.45 1.0 1.0 }
|
||||||
} } swap set-gadget-interior ;
|
} } swap (>>interior) ;
|
||||||
|
|
||||||
: <title-label> ( text -- label ) <label> dup title-theme ;
|
: <title-label> ( text -- label ) <label> dup title-theme ;
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ M: list model-changed
|
||||||
bound-index ;
|
bound-index ;
|
||||||
|
|
||||||
: selected-rect ( list -- rect )
|
: selected-rect ( list -- rect )
|
||||||
dup list-index swap gadget-children ?nth ;
|
dup list-index swap children>> ?nth ;
|
||||||
|
|
||||||
M: list draw-gadget*
|
M: list draw-gadget*
|
||||||
origin get [
|
origin get [
|
||||||
|
@ -98,7 +98,7 @@ M: list focusable-child* drop t ;
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: select-gadget ( gadget list -- )
|
: select-gadget ( gadget list -- )
|
||||||
swap over gadget-children index
|
swap over children>> index
|
||||||
[ swap select-index ] [ drop ] if* ;
|
[ swap select-index ] [ drop ] if* ;
|
||||||
|
|
||||||
: clamp-loc ( point max -- point )
|
: clamp-loc ( point max -- point )
|
||||||
|
|
|
@ -30,7 +30,7 @@ TUPLE: pack < gadget
|
||||||
nip ;
|
nip ;
|
||||||
|
|
||||||
: pack-layout ( pack sizes -- )
|
: pack-layout ( pack sizes -- )
|
||||||
round-dims over gadget-children
|
round-dims over children>>
|
||||||
>r dupd packed-dims r> 2dup [ (>>dim) ] 2each
|
>r dupd packed-dims r> 2dup [ (>>dim) ] 2each
|
||||||
>r packed-locs r> [ set-rect-loc ] 2each ;
|
>r packed-locs r> [ set-rect-loc ] 2each ;
|
||||||
|
|
||||||
|
@ -49,14 +49,14 @@ TUPLE: pack < gadget
|
||||||
|
|
||||||
: pack-pref-dim ( gadget sizes -- dim )
|
: pack-pref-dim ( gadget sizes -- dim )
|
||||||
over pack-gap over gap-dims >r max-dim r>
|
over pack-gap over gap-dims >r max-dim r>
|
||||||
rot gadget-orientation set-axis ;
|
rot orientation>> set-axis ;
|
||||||
|
|
||||||
M: pack pref-dim*
|
M: pack pref-dim*
|
||||||
dup gadget-children pref-dims pack-pref-dim ;
|
dup children>> pref-dims pack-pref-dim ;
|
||||||
|
|
||||||
M: pack layout*
|
M: pack layout*
|
||||||
dup gadget-children pref-dims pack-layout ;
|
dup children>> pref-dims pack-layout ;
|
||||||
|
|
||||||
M: pack children-on ( rect gadget -- seq )
|
M: pack children-on ( rect gadget -- seq )
|
||||||
dup gadget-orientation swap gadget-children
|
dup orientation>> swap children>>
|
||||||
[ fast-children-on ] keep <slice> ;
|
[ fast-children-on ] keep <slice> ;
|
||||||
|
|
|
@ -83,7 +83,7 @@ TUPLE: pane-stream pane ;
|
||||||
C: <pane-stream> pane-stream
|
C: <pane-stream> pane-stream
|
||||||
|
|
||||||
: smash-line ( current -- gadget )
|
: smash-line ( current -- gadget )
|
||||||
dup gadget-children {
|
dup children>> {
|
||||||
{ [ dup empty? ] [ 2drop "" <label> ] }
|
{ [ dup empty? ] [ 2drop "" <label> ] }
|
||||||
{ [ dup length 1 = ] [ nip first ] }
|
{ [ dup length 1 = ] [ nip first ] }
|
||||||
[ drop ]
|
[ drop ]
|
||||||
|
@ -121,7 +121,7 @@ M: style-stream write-gadget
|
||||||
output-stream get print-gadget ;
|
output-stream get print-gadget ;
|
||||||
|
|
||||||
: ?nl ( stream -- )
|
: ?nl ( stream -- )
|
||||||
dup pane-stream-pane pane-current gadget-children empty?
|
dup pane-stream-pane pane-current children>> empty?
|
||||||
[ dup stream-nl ] unless drop ;
|
[ dup stream-nl ] unless drop ;
|
||||||
|
|
||||||
: with-pane ( pane quot -- )
|
: with-pane ( pane quot -- )
|
||||||
|
@ -258,7 +258,7 @@ M: pane-stream make-block-stream
|
||||||
table-gap [ over set-grid-gap ] apply-style ;
|
table-gap [ over set-grid-gap ] apply-style ;
|
||||||
|
|
||||||
: apply-table-border-style ( style grid -- style grid )
|
: apply-table-border-style ( style grid -- style grid )
|
||||||
table-border [ <grid-lines> over set-gadget-boundary ]
|
table-border [ <grid-lines> over (>>boundary) ]
|
||||||
apply-style ;
|
apply-style ;
|
||||||
|
|
||||||
: styled-grid ( style grid -- grid )
|
: styled-grid ( style grid -- grid )
|
||||||
|
@ -336,7 +336,7 @@ M: pack sloppy-pick-up* ( loc gadget -- n )
|
||||||
[ orientation>> ] [ children>> ] bi (fast-children-on) ;
|
[ orientation>> ] [ children>> ] bi (fast-children-on) ;
|
||||||
|
|
||||||
M: gadget sloppy-pick-up*
|
M: gadget sloppy-pick-up*
|
||||||
gadget-children [ inside? ] with find-last drop ;
|
children>> [ inside? ] with find-last drop ;
|
||||||
|
|
||||||
M: f sloppy-pick-up*
|
M: f sloppy-pick-up*
|
||||||
2drop f ;
|
2drop f ;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2005, 2007 Slava Pestov
|
! Copyright (C) 2005, 2007 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: arrays ui.gadgets ui.gadgets.labels ui.render kernel math
|
USING: accessors arrays ui.gadgets ui.gadgets.labels ui.render kernel math
|
||||||
namespaces sequences math.order math.geometry.rect ;
|
namespaces sequences math.order math.geometry.rect ;
|
||||||
IN: ui.gadgets.paragraphs
|
IN: ui.gadgets.paragraphs
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ TUPLE: paragraph < gadget margin ;
|
||||||
|
|
||||||
: <paragraph> ( margin -- gadget )
|
: <paragraph> ( margin -- gadget )
|
||||||
paragraph new-gadget
|
paragraph new-gadget
|
||||||
{ 1 0 } over set-gadget-orientation
|
{ 1 0 } over (>>orientation)
|
||||||
[ set-paragraph-margin ] keep ;
|
[ set-paragraph-margin ] keep ;
|
||||||
|
|
||||||
SYMBOL: x SYMBOL: max-x
|
SYMBOL: x SYMBOL: max-x
|
||||||
|
|
|
@ -29,7 +29,7 @@ TUPLE: slider < frame elevator thumb saved line ;
|
||||||
dup slider-page over slider-max 1 max / 1 min
|
dup slider-page over slider-max 1 max / 1 min
|
||||||
over elevator-length * min-thumb-dim max
|
over elevator-length * min-thumb-dim max
|
||||||
over slider-elevator rect-dim
|
over slider-elevator rect-dim
|
||||||
rot gadget-orientation v. min ;
|
rot orientation>> v. min ;
|
||||||
|
|
||||||
: slider-scale ( slider -- n )
|
: slider-scale ( slider -- n )
|
||||||
#! A scaling factor such that if x is a slider co-ordinate,
|
#! A scaling factor such that if x is a slider co-ordinate,
|
||||||
|
@ -49,7 +49,7 @@ TUPLE: thumb < gadget ;
|
||||||
find-slider dup slider-value swap set-slider-saved ;
|
find-slider dup slider-value swap set-slider-saved ;
|
||||||
|
|
||||||
: do-drag ( thumb -- )
|
: do-drag ( thumb -- )
|
||||||
find-slider drag-loc over gadget-orientation v.
|
find-slider drag-loc over orientation>> v.
|
||||||
over screen>slider swap [ slider-saved + ] keep
|
over screen>slider swap [ slider-saved + ] keep
|
||||||
gadget-model set-range-value ;
|
gadget-model set-range-value ;
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ thumb H{
|
||||||
|
|
||||||
: compute-direction ( elevator -- -1/1 )
|
: compute-direction ( elevator -- -1/1 )
|
||||||
dup find-slider swap hand-click-rel
|
dup find-slider swap hand-click-rel
|
||||||
over gadget-orientation v.
|
over orientation>> v.
|
||||||
over screen>slider
|
over screen>slider
|
||||||
swap slider-value - sgn ;
|
swap slider-value - sgn ;
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ elevator H{
|
||||||
lowered-gradient >>interior ;
|
lowered-gradient >>interior ;
|
||||||
|
|
||||||
: (layout-thumb) ( slider n -- n thumb )
|
: (layout-thumb) ( slider n -- n thumb )
|
||||||
over gadget-orientation n*v swap slider-thumb ;
|
over orientation>> n*v swap slider-thumb ;
|
||||||
|
|
||||||
: thumb-loc ( slider -- loc )
|
: thumb-loc ( slider -- loc )
|
||||||
dup slider-value swap slider>screen ;
|
dup slider-value swap slider>screen ;
|
||||||
|
@ -109,7 +109,7 @@ elevator H{
|
||||||
: layout-thumb-dim ( slider -- )
|
: layout-thumb-dim ( slider -- )
|
||||||
dup dup thumb-dim (layout-thumb) >r
|
dup dup thumb-dim (layout-thumb) >r
|
||||||
>r dup rect-dim r>
|
>r dup rect-dim r>
|
||||||
rot gadget-orientation set-axis [ ceiling ] map
|
rot orientation>> set-axis [ ceiling ] map
|
||||||
r> (>>dim) ;
|
r> (>>dim) ;
|
||||||
|
|
||||||
: layout-thumb ( slider -- )
|
: layout-thumb ( slider -- )
|
||||||
|
@ -124,7 +124,7 @@ M: elevator layout*
|
||||||
: <slide-button> ( vector polygon amount -- button )
|
: <slide-button> ( vector polygon amount -- button )
|
||||||
>r gray swap <polygon-gadget> r>
|
>r gray swap <polygon-gadget> r>
|
||||||
[ swap find-slider slide-by-line ] curry <repeat-button>
|
[ swap find-slider slide-by-line ] curry <repeat-button>
|
||||||
[ set-gadget-orientation ] keep ;
|
[ (>>orientation) ] keep ;
|
||||||
|
|
||||||
: elevator, ( gadget orientation -- gadget )
|
: elevator, ( gadget orientation -- gadget )
|
||||||
tuck <elevator> >>elevator
|
tuck <elevator> >>elevator
|
||||||
|
@ -157,5 +157,5 @@ M: elevator layout*
|
||||||
|
|
||||||
M: slider pref-dim*
|
M: slider pref-dim*
|
||||||
dup call-next-method
|
dup call-next-method
|
||||||
swap gadget-orientation [ 40 v*n ] keep
|
swap orientation>> [ 40 v*n ] keep
|
||||||
set-axis ;
|
set-axis ;
|
||||||
|
|
|
@ -41,8 +41,7 @@ M: viewport model-changed
|
||||||
swap gadget-child set-rect-loc ;
|
swap gadget-child set-rect-loc ;
|
||||||
|
|
||||||
: visible-dim ( gadget -- dim )
|
: visible-dim ( gadget -- dim )
|
||||||
dup gadget-parent viewport? [
|
dup parent>> viewport?
|
||||||
gadget-parent rect-dim viewport-gap 2 v*n v-
|
[ parent>> rect-dim viewport-gap 2 v*n v- ]
|
||||||
] [
|
[ rect-dim ]
|
||||||
rect-dim
|
if ;
|
||||||
] if ;
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ M: f world-status ;
|
||||||
: hide-status ( gadget -- ) f swap show-status ;
|
: hide-status ( gadget -- ) f swap show-status ;
|
||||||
|
|
||||||
: (request-focus) ( child world ? -- )
|
: (request-focus) ( child world ? -- )
|
||||||
pick gadget-parent pick eq? [
|
pick parent>> pick eq? [
|
||||||
>r >r dup gadget-parent dup r> r>
|
>r >r dup parent>> dup r> r>
|
||||||
[ (request-focus) ] keep
|
[ (request-focus) ] keep
|
||||||
] unless focus-child ;
|
] unless focus-child ;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ M: world layout*
|
||||||
|
|
||||||
M: world focusable-child* gadget-child ;
|
M: world focusable-child* gadget-child ;
|
||||||
|
|
||||||
M: world children-on nip gadget-children ;
|
M: world children-on nip children>> ;
|
||||||
|
|
||||||
: (draw-world) ( world -- )
|
: (draw-world) ( world -- )
|
||||||
dup world-handle [
|
dup world-handle [
|
||||||
|
|
|
@ -157,15 +157,15 @@ SYMBOL: drag-timer
|
||||||
|
|
||||||
: focus-child ( child gadget ? -- )
|
: focus-child ( child gadget ? -- )
|
||||||
[
|
[
|
||||||
dup gadget-focus [
|
dup focus>> [
|
||||||
dup send-lose-focus
|
dup send-lose-focus
|
||||||
f swap t focus-child
|
f swap t focus-child
|
||||||
] when*
|
] when*
|
||||||
dupd set-gadget-focus [
|
dupd (>>focus) [
|
||||||
send-gain-focus
|
send-gain-focus
|
||||||
] when*
|
] when*
|
||||||
] [
|
] [
|
||||||
set-gadget-focus
|
(>>focus)
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
: modifier ( mod modifiers -- seq )
|
: modifier ( mod modifiers -- seq )
|
||||||
|
@ -244,7 +244,7 @@ SYMBOL: drag-timer
|
||||||
drop ;
|
drop ;
|
||||||
|
|
||||||
: world-focus ( world -- gadget )
|
: world-focus ( world -- gadget )
|
||||||
dup gadget-focus [ world-focus ] [ ] ?if ;
|
dup focus>> [ world-focus ] [ ] ?if ;
|
||||||
|
|
||||||
: send-action ( world gesture -- )
|
: send-action ( world gesture -- )
|
||||||
swap world-focus send-gesture drop ;
|
swap world-focus send-gesture drop ;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2005, 2007 Slava Pestov.
|
! Copyright (C) 2005, 2007 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien arrays hashtables io kernel math namespaces opengl
|
USING: accessors alien arrays hashtables io kernel math namespaces opengl
|
||||||
opengl.gl opengl.glu sequences strings io.styles vectors
|
opengl.gl opengl.glu sequences strings io.styles vectors
|
||||||
combinators math.vectors ui.gadgets colors
|
combinators math.vectors ui.gadgets colors
|
||||||
math.order math.geometry.rect ;
|
math.order math.geometry.rect ;
|
||||||
|
@ -60,7 +60,7 @@ DEFER: draw-gadget
|
||||||
: (draw-gadget) ( gadget -- )
|
: (draw-gadget) ( gadget -- )
|
||||||
[
|
[
|
||||||
dup translate
|
dup translate
|
||||||
dup dup gadget-interior draw-interior
|
dup dup interior>> draw-interior
|
||||||
dup draw-gadget*
|
dup draw-gadget*
|
||||||
dup visible-children [ draw-gadget ] each
|
dup visible-children [ draw-gadget ] each
|
||||||
dup gadget-boundary draw-boundary
|
dup gadget-boundary draw-boundary
|
||||||
|
@ -79,8 +79,8 @@ DEFER: draw-gadget
|
||||||
|
|
||||||
: draw-gadget ( gadget -- )
|
: draw-gadget ( gadget -- )
|
||||||
{
|
{
|
||||||
{ [ dup gadget-visible? not ] [ drop ] }
|
{ [ dup visible?>> not ] [ drop ] }
|
||||||
{ [ dup gadget-clipped? not ] [ (draw-gadget) ] }
|
{ [ dup clipped?>> not ] [ (draw-gadget) ] }
|
||||||
[ [ (draw-gadget) ] with-clipping ]
|
[ [ (draw-gadget) ] with-clipping ]
|
||||||
} cond ;
|
} cond ;
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ C: <gradient> gradient
|
||||||
|
|
||||||
M: gradient draw-interior
|
M: gradient draw-interior
|
||||||
origin get [
|
origin get [
|
||||||
over gadget-orientation
|
over orientation>>
|
||||||
swap gradient-colors
|
swap gradient-colors
|
||||||
rot rect-dim
|
rot rect-dim
|
||||||
gl-gradient
|
gl-gradient
|
||||||
|
@ -139,7 +139,7 @@ M: polygon draw-interior
|
||||||
: <polygon-gadget> ( color points -- gadget )
|
: <polygon-gadget> ( color points -- gadget )
|
||||||
dup max-dim
|
dup max-dim
|
||||||
>r <polygon> <gadget> r> over set-rect-dim
|
>r <polygon> <gadget> r> over set-rect-dim
|
||||||
[ set-gadget-interior ] keep ;
|
[ (>>interior) ] keep ;
|
||||||
|
|
||||||
! Font rendering
|
! Font rendering
|
||||||
SYMBOL: font-renderer
|
SYMBOL: font-renderer
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
! Copyright (C) 2007 Slava Pestov.
|
! Copyright (C) 2007 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: namespaces sequences kernel math arrays io ui.gadgets
|
USING: accessors namespaces sequences kernel math arrays io ui.gadgets
|
||||||
generic combinators ;
|
generic combinators ;
|
||||||
IN: ui.traverse
|
IN: ui.traverse
|
||||||
|
|
||||||
TUPLE: node value children ;
|
TUPLE: node value children ;
|
||||||
|
|
||||||
: traverse-step ( path gadget -- path' gadget' )
|
: traverse-step ( path gadget -- path' gadget' )
|
||||||
>r unclip r> gadget-children ?nth ;
|
>r unclip r> children>> ?nth ;
|
||||||
|
|
||||||
: make-node ( quot -- ) { } make node boa , ; inline
|
: make-node ( quot -- ) { } make node boa , ; inline
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ TUPLE: node value children ;
|
||||||
nip ,
|
nip ,
|
||||||
] [
|
] [
|
||||||
[
|
[
|
||||||
2dup gadget-children swap first head-slice %
|
2dup children>> swap first head-slice %
|
||||||
tuck traverse-step traverse-to-path
|
tuck traverse-step traverse-to-path
|
||||||
] make-node
|
] make-node
|
||||||
] if
|
] if
|
||||||
|
@ -34,7 +34,7 @@ TUPLE: node value children ;
|
||||||
] [
|
] [
|
||||||
[
|
[
|
||||||
2dup traverse-step traverse-from-path
|
2dup traverse-step traverse-from-path
|
||||||
tuck gadget-children swap first 1+ tail-slice %
|
tuck children>> swap first 1+ tail-slice %
|
||||||
] make-node
|
] make-node
|
||||||
] if
|
] if
|
||||||
] if ;
|
] if ;
|
||||||
|
@ -43,7 +43,7 @@ TUPLE: node value children ;
|
||||||
traverse-step traverse-from-path ;
|
traverse-step traverse-from-path ;
|
||||||
|
|
||||||
: (traverse-middle) ( frompath topath gadget -- )
|
: (traverse-middle) ( frompath topath gadget -- )
|
||||||
>r >r first 1+ r> first r> gadget-children <slice> % ;
|
>r >r first 1+ r> first r> children>> <slice> % ;
|
||||||
|
|
||||||
: traverse-post ( topath gadget -- )
|
: traverse-post ( topath gadget -- )
|
||||||
traverse-step traverse-to-path ;
|
traverse-step traverse-to-path ;
|
||||||
|
|
|
@ -90,21 +90,21 @@ SYMBOL: ui-hook
|
||||||
V{ } clone windows set-global ;
|
V{ } clone windows set-global ;
|
||||||
|
|
||||||
: restore-gadget-later ( gadget -- )
|
: restore-gadget-later ( gadget -- )
|
||||||
dup gadget-graft-state {
|
dup graft-state>> {
|
||||||
{ { f f } [ ] }
|
{ { f f } [ ] }
|
||||||
{ { f t } [ ] }
|
{ { f t } [ ] }
|
||||||
{ { t t } [
|
{ { t t } [
|
||||||
{ f f } over set-gadget-graft-state
|
{ f f } over (>>graft-state)
|
||||||
] }
|
] }
|
||||||
{ { t f } [
|
{ { t f } [
|
||||||
dup unqueue-graft
|
dup unqueue-graft
|
||||||
{ f f } over set-gadget-graft-state
|
{ f f } over (>>graft-state)
|
||||||
] }
|
] }
|
||||||
} case graft-later ;
|
} case graft-later ;
|
||||||
|
|
||||||
: restore-gadget ( gadget -- )
|
: restore-gadget ( gadget -- )
|
||||||
dup restore-gadget-later
|
dup restore-gadget-later
|
||||||
gadget-children [ restore-gadget ] each ;
|
children>> [ restore-gadget ] each ;
|
||||||
|
|
||||||
: restore-world ( world -- )
|
: restore-world ( world -- )
|
||||||
dup reset-world restore-gadget ;
|
dup reset-world restore-gadget ;
|
||||||
|
@ -133,9 +133,9 @@ SYMBOL: ui-hook
|
||||||
[ dup update-hand draw-world ] each ;
|
[ dup update-hand draw-world ] each ;
|
||||||
|
|
||||||
: notify ( gadget -- )
|
: notify ( gadget -- )
|
||||||
dup gadget-graft-state
|
dup graft-state>>
|
||||||
dup first { f f } { t t } ?
|
dup first { f f } { t t } ?
|
||||||
pick set-gadget-graft-state {
|
pick (>>graft-state) {
|
||||||
{ { f t } [ dup activate-control graft* ] }
|
{ { f t } [ dup activate-control graft* ] }
|
||||||
{ { t f } [ dup deactivate-control ungraft* ] }
|
{ { t f } [ dup deactivate-control ungraft* ] }
|
||||||
} case ;
|
} case ;
|
||||||
|
|
Loading…
Reference in New Issue