Table gadget rendered differently when no focus

db4
Slava Pestov 2009-01-12 22:16:57 -06:00
parent 52d6ee7041
commit 79548f5963
2 changed files with 23 additions and 16 deletions

View File

@ -19,7 +19,8 @@ M: object row-value drop ;
TUPLE: table < gadget
renderer filled-column column-alignment action
column-widths total-width
font text-color selection-color mouse-color column-line-color
font text-color selection-color focus-border-color
mouse-color column-line-color
selected-index selected-value
mouse-index
focused? ;
@ -32,6 +33,7 @@ focused? ;
f <model> >>selected-value
sans-serif-font >>font
selection-color >>selection-color
focus-border-color >>focus-border-color
dark-gray >>column-line-color
black >>mouse-color
black >>text-color ;
@ -78,25 +80,28 @@ M: table layout*
[ [ line-height ] dip * 0 swap 2array ]
[ drop [ dim>> first ] [ line-height ] bi 2array ] 2bi <rect> ;
: highlight-row ( table row color filled? -- )
[ dup ] 2dip '[
_ gl-color
row-rect rect-bounds swap [
_ [ gl-fill-rect ] [ gl-rect ] if
] with-translation
: highlight-row ( table row color quot -- )
[ [ row-rect rect-bounds ] dip gl-color ] dip
'[ _ @ ] with-translation ; inline
: draw-selected-row ( table row -- )
over selection-color>> [ gl-fill-rect ] highlight-row ;
: draw-focused-row ( table row -- )
over focused?>> [
over focus-border-color>> [ gl-rect ] highlight-row
] [ 2drop ] if ;
: draw-selected ( table -- )
{
[ ]
[ selected-index>> ]
[ selection-color>> ]
[ focused?>> ]
} cleave
highlight-row ;
dup selected-index>> dup
[ [ draw-selected-row ] [ draw-focused-row ] 2bi ]
[ 2drop ]
if ;
: draw-moused ( table -- )
[ ] [ mouse-index>> ] [ mouse-color>> ] tri f highlight-row ;
dup mouse-index>> dup [
over mouse-color>> [ gl-rect ] highlight-row
] [ 2drop ] if ;
: column-offsets ( table -- xs )
0 [ table-gap + + ] accumulate nip ;

View File

@ -15,7 +15,9 @@ IN: ui.gadgets.theme
: faint-boundary ( gadget -- gadget )
colors:gray solid-boundary ; inline
: selection-color ( -- color ) light-purple ;
: selection-color ( -- color ) light-purple ; inline
: focus-border-color ( -- color ) medium-purple ; inline
: plain-gradient ( -- gradient )
{