factor/extra/ui/gadgets/borders/borders.factor

46 lines
1.2 KiB
Factor
Raw Normal View History

2007-09-20 18:09:08 -04:00
! Copyright (C) 2005, 2007 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays ui.gadgets generic hashtables kernel math
namespaces vectors sequences math.vectors ;
IN: ui.gadgets.borders
2007-10-31 20:26:12 -04:00
TUPLE: border size fill ;
2007-09-20 18:09:08 -04:00
: <border> ( child gap -- border )
dup 2array { 0 0 } border boa
2007-10-31 20:26:12 -04:00
<gadget> over set-delegate
tuck add-gadget ;
2007-09-20 18:09:08 -04:00
M: border pref-dim*
[ border-size 2 v*n ] keep
gadget-child pref-dim v+ ;
2007-10-31 20:26:12 -04:00
: border-major-rect ( border -- rect )
dup border-size swap rect-dim over 2 v*n v- <rect> ;
: border-minor-rect ( major border -- rect )
gadget-child pref-dim
2007-11-04 17:32:01 -05:00
[ >r rect-bounds r> v- [ 2 / >fixnum ] map v+ ] keep
<rect> ;
2007-10-31 20:26:12 -04:00
: scale-rect ( rect vec -- loc dim )
2008-03-29 21:36:58 -04:00
[ v* ] curry >r rect-bounds r> bi@ ;
2007-10-31 20:26:12 -04:00
: average-rects ( rect1 rect2 weight -- rect )
tuck >r >r scale-rect r> r> { 1 1 } swap v- scale-rect
swapd v+ >r v+ r> <rect> ;
: border-child-rect ( border -- rect )
dup border-major-rect
dup pick border-minor-rect
rot border-fill
average-rects ;
2007-09-20 18:09:08 -04:00
M: border layout*
2007-10-31 20:26:12 -04:00
dup border-child-rect swap gadget-child
over rect-loc over set-rect-loc
swap rect-dim swap set-layout-dim ;
2007-09-20 18:09:08 -04:00
M: border focusable-child*
gadget-child ;