Line gadgets now support min/max rows/cols; this obsoletes limited-scroller

db4
Slava Pestov 2009-02-15 04:01:57 -06:00
parent 074e3238f3
commit f8ab4be9da
6 changed files with 48 additions and 24 deletions

View File

@ -48,3 +48,6 @@ M: rect contains-point?
: rect-containing ( points -- rect )
[ vsupremum ] [ vinfimum ] bi
[ nip ] [ v- ] 2bi <rect> ;
: rect-min ( rect dim -- rect' )
[ rect-bounds ] dip vmin <rect> ;

View File

@ -1,7 +1,7 @@
USING: accessors ui.gadgets.editors tools.test kernel io
io.streams.plain definitions namespaces ui.gadgets
ui.gadgets.grids prettyprint documents ui.gestures tools.test.ui
models documents.elements ;
models documents.elements ui.gadgets.scrollers sequences ;
IN: ui.gadgets.editors.tests
[ "foo bar" ] [
@ -55,4 +55,6 @@ IN: ui.gadgets.editors.tests
[ ] [ <editor> com-join-lines ] unit-test
[ ] [ <editor> "A" over set-editor-string com-join-lines ] unit-test
[ "A B" ] [ <editor> "A\nB" over set-editor-string [ com-join-lines ] [ editor-string ] bi ] unit-test
[ "A B" ] [ <editor> "A\nB" over set-editor-string [ com-join-lines ] [ editor-string ] bi ] unit-test
[ 2 ] [ <editor> 20 >>min-rows 20 >>min-cols pref-viewport-dim length ] unit-test

View File

@ -11,8 +11,8 @@ ui.pens.solid ui.gadgets.line-support ui.text ui.gestures
math.rectangles splitting unicode.categories fonts grouping ;
IN: ui.gadgets.editors
TUPLE: editor < gadget
font caret-color selection-color
TUPLE: editor < line-gadget
caret-color
caret mark
focused? blink blink-alarm ;
@ -24,11 +24,10 @@ focused? blink blink-alarm ;
: editor-theme ( editor -- editor )
COLOR: red >>caret-color
selection-color >>selection-color
monospace-font >>font ; inline
: new-editor ( class -- editor )
new-gadget
new-line-gadget
<document> >>model
init-editor-locs
editor-theme ; inline

View File

@ -2,19 +2,26 @@
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays combinators fry kernel math math.functions math.order
math.ranges math.vectors namespaces opengl sequences ui.gadgets
ui.render ui.text ;
ui.render ui.text ui.gadgets.theme ui.gadgets.scrollers ;
IN: ui.gadgets.line-support
! Some code shared by table and editor gadgets
SLOT: font
TUPLE: line-gadget < gadget
font selection-color
min-rows max-rows
min-cols max-cols ;
: new-line-gadget ( class -- gadget )
new
selection-color >>selection-color ;
GENERIC: line-leading ( gadget -- n )
M: gadget line-leading font>> font-metrics leading>> ;
M: line-gadget line-leading font>> font-metrics leading>> ;
GENERIC: line-height ( gadget -- n )
M: gadget line-height font>> font-metrics height>> ;
M: line-gadget line-height font>> font-metrics height>> ;
: y>line ( y gadget -- n ) line-height /i ;
@ -50,4 +57,24 @@ GENERIC: draw-line ( line index gadget -- )
} cleave '[
0 over _ * >integer 2array
[ _ draw-line ] with-translation
] each-slice-index ;
] each-slice-index ;
<PRIVATE
: clamp ( dim unit min max -- dim' )
[ -1/0. or * ] [ 1/.0 or * ] bi-curry* bi
[ max ] [ min ] bi* ;
: line-gadget-width ( pref-dim gadget -- w )
[ first ] [ [ font>> "m" text-width ] [ min-cols>> ] [ max-cols>> ] tri ] bi* clamp ;
: line-gadget-height ( pref-dim gadget -- h )
[ second ] [ [ line-height ] [ min-rows>> ] [ max-rows>> ] tri ] bi* clamp ;
PRIVATE>
M: line-gadget pref-viewport-dim
[ pref-dim ] keep
[ line-gadget-width ]
[ line-gadget-height ]
2bi 2array ;

View File

@ -21,7 +21,7 @@ M: object prototype-row drop { "" } ;
M: object row-value drop ;
M: object row-color 2drop f ;
TUPLE: table < gadget
TUPLE: table < line-gadget
{ renderer initial: trivial-renderer }
filled-column column-alignment
{ action initial: [ drop ] }
@ -29,7 +29,7 @@ single-click?
{ hook initial: [ ] }
{ gap initial: 6 }
column-widths total-width
font selection-color focus-border-color
focus-border-color
{ mouse-color initial: COLOR: black }
{ column-line-color initial: COLOR: dark-gray }
selection-required?
@ -38,11 +38,10 @@ mouse-index
focused? ;
: <table> ( rows -- table )
table new-gadget
table new-line-gadget
swap >>model
f <model> >>selected-value
sans-serif-font >>font
selection-color >>selection-color
focus-border-color >>focus-border-color ;
<PRIVATE

View File

@ -50,11 +50,6 @@ M: vocab-completion completion-banner drop "Vocabularies" ;
M: char-completion completion-banner drop "Unicode code point names" ;
M: history-completion completion-banner drop "Input history" ;
GENERIC: completion-popup-width ( interactor completion-mode -- x )
M: object completion-popup-width 2drop 300 ;
M: history-completion completion-popup-width drop dim>> first ;
! Completion modes also implement the row renderer protocol
M: listener-completion row-columns drop present 1array ;
@ -148,13 +143,12 @@ GENERIC# accept-completion-hook 1 ( item popup -- )
t >>single-click?
transparent >>column-line-color
2 >>gap
10 >>min-cols
10 >>max-rows
dup '[ _ accept-completion ] >>action ;
: <completion-scroller> ( completion-popup -- scroller )
[ table>> ] [ interactor>> ] [ completion-mode>> ] tri completion-popup-width
[ <limited-scroller> ] [ 120 2array ] bi*
[ >>min-dim ] [ >>max-dim ] bi
COLOR: white <solid> >>interior ;
table>> <scroller> COLOR: white <solid> >>interior ;
: <completion-popup> ( interactor completion-mode -- popup )
[ vertical completion-popup new-track ] 2dip