[ line-text get x>offset caret set ] with-editor ;
: click-editor ( editor -- )
- hand
- 2dup relative shape-x pick set-caret-x
- request-focus ;
+ dup hand relative shape-x over set-caret-x request-focus ;
: editor-actions ( editor -- )
[
GENERIC: user-input* ( ch gadget -- ? )
M: gadget user-input* 2drop t ;
+
+GENERIC: focusable-child* ( gadget -- gadget/t )
+
+M: gadget focusable-child* drop t ;
+
+: focusable-child ( gadget -- gadget )
+ dup focusable-child*
+ dup t = [ drop ] [ nip focusable-child ] ifte ;
#! Called when a gadget is removed or added.
[ dup shape-x swap shape-y ] keep move-hand ;
-: request-focus ( gadget hand -- )
- dup >r hand-focus
+: request-focus ( gadget -- )
+ focusable-child
+ hand hand-focus
2dup lose-focus
- swap dup r> set-hand-focus
+ swap dup hand set-hand-focus
gain-focus ;
<plain-gadget> add-layer
- <console> "Stack display goes here" <label> <y-splitter>
+ <console> dup
+ "Stack display goes here" <label> <y-splitter>
3/4 over set-splitter-split add-layer
+
+ request-focus
] bind
: <pile> { 0 1 0 } <pack> ;
-: <line-pile> 0 1 <pile> ;
+: <line-pile> 0 0 <pile> ;
: <shelf> { 1 0 0 } <pack> ;
-: <line-shelf> 0 1 <shelf> ;
+: <line-shelf> 0 0 <shelf> ;
M: pack orientation pack-vector ;
C: pane ( -- pane )
<line-pile> over set-delegate
<line-pile> over add-output
- "" <label> over set-pane-current
+ <line-shelf> over set-pane-current
"" <editor> over set-pane-input
dup init-active-line
dup pane-paint
dup pane-actions ;
+M: pane focusable-child* ( pane -- editor )
+ pane-input ;
+
: pane-write-1 ( style text pane -- )
[ <presentation> ] keep pane-current add-gadget ;
dup viewport-origin
swap gadget-child dup prefer set-gadget-loc ;
+M: viewport focusable-child* ( viewport -- gadget )
+ gadget-child ;
+
: visible-portion ( viewport -- vector )
dup shape-dim { 1 1 1 } vmax
swap viewport-dim { 1 1 1 } vmax
dup scroller-viewport <x-slider> over add-x-slider
dup scroller-viewport <y-slider> over add-y-slider
dup scroller-actions ;
+
+M: scroller focusable-child* ( viewport -- gadget )
+ scroller-viewport ;