ui.gadgets.line-support: common code for gadgets that display a vertical list of lines

db4
Slava Pestov 2009-02-07 18:14:18 -06:00
parent 06eb14573b
commit f4ae56a85b
4 changed files with 56 additions and 0 deletions

View File

@ -0,0 +1 @@
Slava Pestov

View File

@ -0,0 +1,4 @@
! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: tools.test ui.gadgets.line-support ;
IN: ui.gadgets.line-support.tests

View File

@ -0,0 +1,50 @@
! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays combinators fry kernel math math.order
math.ranges math.vectors namespaces opengl sequences ui.gadgets
ui.render ui.text ;
IN: ui.gadgets.line-support
! Some code shared by table and editor gadgets
SLOT: font
: line-height ( gadget -- n )
font>> "" text-height ;
: y>line ( y gadget -- n )
line-height /i ;
: line>y ( n gadget -- y )
line-height * ;
: validate-line ( m gadget -- n )
control-value [ drop f ] [ length 1- min 0 max ] if-empty ;
: visible-line ( gadget quot -- n )
'[
[ clip get @ origin get [ second ] bi@ - ] dip
y>line
] keep validate-line ; inline
: first-visible-line ( gadget -- n )
[ loc>> ] visible-line ;
: last-visible-line ( gadget -- n )
[ [ loc>> ] [ dim>> ] bi v+ ] visible-line 1+ ;
: each-slice-index ( from to seq quot -- )
[ [ <slice> ] [ drop [a,b) ] 3bi ] dip 2each ; inline
GENERIC: draw-line ( line index gadget -- )
: draw-lines ( gadget -- )
{
[ first-visible-line ]
[ last-visible-line ]
[ control-value ]
[ line-height ]
[ ]
} cleave '[
0 over _ * 2array
[ _ draw-line ] with-translation
] each-slice-index ;

View File

@ -0,0 +1 @@
Code shared between table and editor gadgets