ui.gadgets.editors: rename min-width and max-width slots of field to min-cols and max-cols, re-use line-support code, more accurate dimension calculation that takes field border size into account
parent
d2be75b083
commit
6b672a11fa
|
@ -1,6 +1,6 @@
|
||||||
IN: ui.gadgets.borders.tests
|
IN: ui.gadgets.borders.tests
|
||||||
USING: tools.test accessors namespaces kernel
|
USING: tools.test accessors namespaces kernel ui.gadgets
|
||||||
ui.gadgets ui.gadgets.borders math.rectangles ;
|
ui.gadgets.borders ui.gadgets.borders.private math.rectangles ;
|
||||||
|
|
||||||
[ { 110 210 } ] [ <gadget> { 100 200 } >>dim { 5 5 } <border> pref-dim ] unit-test
|
[ { 110 210 } ] [ <gadget> { 100 200 } >>dim { 5 5 } <border> pref-dim ] unit-test
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2005, 2009 Slava Pestov.
|
! Copyright (C) 2005, 2009 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays ui.gadgets kernel math
|
USING: accessors arrays ui.gadgets kernel math fry
|
||||||
namespaces vectors sequences math.vectors math.rectangles ;
|
namespaces vectors sequences math.vectors math.rectangles ;
|
||||||
IN: ui.gadgets.borders
|
IN: ui.gadgets.borders
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ TUPLE: border < gadget
|
||||||
{ min-dim initial: { 0 0 } } ;
|
{ min-dim initial: { 0 0 } } ;
|
||||||
|
|
||||||
: new-border ( child class -- border )
|
: new-border ( child class -- border )
|
||||||
new-gadget swap add-gadget ; inline
|
new swap add-gadget ; inline
|
||||||
|
|
||||||
: <border> ( child gap -- border )
|
: <border> ( child gap -- border )
|
||||||
swap border new-border
|
swap border new-border
|
||||||
|
@ -20,14 +20,18 @@ TUPLE: border < gadget
|
||||||
: <filled-border> ( child gap -- border )
|
: <filled-border> ( child gap -- border )
|
||||||
<border> { 1 1 } >>fill ;
|
<border> { 1 1 } >>fill ;
|
||||||
|
|
||||||
|
: border-pref-dim ( border child-dim -- pref-dim )
|
||||||
|
'[ size>> 2 v*n _ v+ ] [ min-dim>> ] bi vmax ;
|
||||||
|
|
||||||
M: border pref-dim*
|
M: border pref-dim*
|
||||||
[ [ size>> 2 v*n ] [ gadget-child pref-dim ] bi v+ ]
|
dup gadget-child pref-dim border-pref-dim ;
|
||||||
[ min-dim>> ] bi vmax ;
|
|
||||||
|
|
||||||
M: border baseline
|
M: border baseline
|
||||||
[ size>> second ] [ gadget-child baseline ] bi
|
[ size>> second ] [ gadget-child baseline ] bi
|
||||||
dup [ + ] [ nip ] if ;
|
dup [ + ] [ nip ] if ;
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
: border-major-dim ( border -- dim )
|
: border-major-dim ( border -- dim )
|
||||||
[ dim>> ] [ size>> 2 v*n ] bi v- ;
|
[ dim>> ] [ size>> 2 v*n ] bi v- ;
|
||||||
|
|
||||||
|
@ -47,6 +51,8 @@ M: border baseline
|
||||||
: border-child-rect ( border -- rect )
|
: border-child-rect ( border -- rect )
|
||||||
dup border-dim [ border-loc ] keep <rect> ;
|
dup border-dim [ border-loc ] keep <rect> ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
M: border layout*
|
M: border layout*
|
||||||
[ border-child-rect ] [ gadget-child ] bi set-rect-bounds ;
|
[ border-child-rect ] [ gadget-child ] bi set-rect-bounds ;
|
||||||
|
|
||||||
|
|
|
@ -555,9 +555,11 @@ TUPLE: source-editor < multiline-editor ;
|
||||||
'[ _ _ elt-string ] <filter> ;
|
'[ _ _ elt-string ] <filter> ;
|
||||||
|
|
||||||
! Fields wrap an editor
|
! Fields wrap an editor
|
||||||
TUPLE: field < wrapper editor min-width max-width ;
|
TUPLE: field < border editor min-cols max-cols ;
|
||||||
|
|
||||||
: field-theme ( gadget -- gadget )
|
: field-theme ( gadget -- gadget )
|
||||||
|
{ 2 2 } >>size
|
||||||
|
{ 1 0 } >>fill
|
||||||
COLOR: gray <solid> >>boundary ; inline
|
COLOR: gray <solid> >>boundary ; inline
|
||||||
|
|
||||||
: <field-border> ( gadget -- border )
|
: <field-border> ( gadget -- border )
|
||||||
|
@ -566,16 +568,18 @@ TUPLE: field < wrapper editor min-width max-width ;
|
||||||
field-theme ;
|
field-theme ;
|
||||||
|
|
||||||
: new-field ( class -- gadget )
|
: new-field ( class -- gadget )
|
||||||
[ <editor> dup <field-border> ] dip new-wrapper swap >>editor ; inline
|
[ <editor> ] dip new-border
|
||||||
|
dup gadget-child >>editor
|
||||||
|
field-theme ; inline
|
||||||
|
|
||||||
: column-width ( editor n -- width )
|
! For line-gadget-width
|
||||||
[ editor>> font>> ] [ CHAR: \s <string> ] bi* text-width ;
|
M: field font>> editor>> font>> ;
|
||||||
|
|
||||||
M: field pref-dim*
|
M: field pref-dim*
|
||||||
[ call-next-method ]
|
dup
|
||||||
[ dup min-width>> dup [ column-width 0 2array vmax ] [ 2drop ] if ]
|
[ editor>> pref-dim ] keep
|
||||||
[ dup max-width>> dup [ column-width 1/0. 2array vmin ] [ 2drop ] if ]
|
[ line-gadget-width ] [ drop second ] 2bi 2array
|
||||||
tri ;
|
border-pref-dim ;
|
||||||
|
|
||||||
TUPLE: model-field < field field-model ;
|
TUPLE: model-field < field field-model ;
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ TUPLE: browser-gadget < tool pane scroller search-field ;
|
||||||
|
|
||||||
: <search-field> ( browser -- field )
|
: <search-field> ( browser -- field )
|
||||||
'[ _ search-browser ] <action-field>
|
'[ _ search-browser ] <action-field>
|
||||||
10 >>min-width
|
10 >>min-cols
|
||||||
10 >>max-width ;
|
10 >>max-cols ;
|
||||||
|
|
||||||
: <browser-toolbar> ( browser -- toolbar )
|
: <browser-toolbar> ( browser -- toolbar )
|
||||||
horizontal <track>
|
horizontal <track>
|
||||||
|
|
Loading…
Reference in New Issue