2005-02-03 22:21:51 -05:00
|
|
|
! Copyright (C) 2005 Slava Pestov.
|
|
|
|
! See http://factor.sf.net/license.txt for BSD license.
|
2005-08-31 21:06:13 -04:00
|
|
|
IN: gadgets-buttons
|
2006-05-31 18:45:11 -04:00
|
|
|
USING: gadgets gadgets-borders gadgets-theme generic io kernel
|
|
|
|
math namespaces sequences styles threads ;
|
2005-02-03 22:21:51 -05:00
|
|
|
|
2006-06-17 03:51:06 -04:00
|
|
|
TUPLE: button rollover? pressed? selected? quot ;
|
2005-10-25 21:52:26 -04:00
|
|
|
|
2006-05-18 22:01:38 -04:00
|
|
|
: buttons-down? ( -- ? )
|
2006-03-19 00:30:57 -05:00
|
|
|
hand-buttons get-global empty? not ;
|
2005-02-19 23:25:21 -05:00
|
|
|
|
2006-03-19 00:30:57 -05:00
|
|
|
: mouse-over? ( gadget -- ? )
|
|
|
|
hand-gadget get-global child? ;
|
2005-02-05 22:51:41 -05:00
|
|
|
|
2006-03-19 00:30:57 -05:00
|
|
|
: mouse-clicked? ( gadget -- ? )
|
|
|
|
hand-clicked get-global child? ;
|
2005-02-05 22:51:41 -05:00
|
|
|
|
|
|
|
: button-update ( button -- )
|
2005-10-25 21:52:26 -04:00
|
|
|
dup mouse-over? over set-button-rollover?
|
2006-05-18 22:01:38 -04:00
|
|
|
dup mouse-clicked? buttons-down? and
|
2006-03-26 16:36:05 -05:00
|
|
|
over button-rollover? and over set-button-pressed?
|
2005-09-25 20:41:49 -04:00
|
|
|
relayout-1 ;
|
2005-02-05 22:51:41 -05:00
|
|
|
|
2006-03-25 17:41:40 -05:00
|
|
|
: if-clicked ( button quot -- )
|
2006-03-26 16:36:05 -05:00
|
|
|
>r dup button-update dup button-rollover? r> [ drop ] if ;
|
2005-02-05 22:51:41 -05:00
|
|
|
|
2006-03-25 17:41:40 -05:00
|
|
|
: button-clicked ( button -- )
|
|
|
|
dup button-quot if-clicked ;
|
2005-05-03 19:00:52 -04:00
|
|
|
|
2006-05-26 17:40:41 -04:00
|
|
|
M: button gadget-gestures
|
|
|
|
drop H{
|
|
|
|
{ T{ button-up } [ button-clicked ] }
|
|
|
|
{ T{ button-down } [ button-update ] }
|
|
|
|
{ T{ mouse-leave } [ button-update ] }
|
|
|
|
{ T{ mouse-enter } [ button-update ] }
|
|
|
|
} ;
|
2005-07-17 02:49:07 -04:00
|
|
|
|
2005-08-27 15:12:37 -04:00
|
|
|
C: button ( gadget quot -- button )
|
2005-12-17 20:03:41 -05:00
|
|
|
rot <default-border> over set-gadget-delegate
|
2006-05-26 17:40:41 -04:00
|
|
|
[ set-button-quot ] keep ;
|
2005-08-26 00:55:56 -04:00
|
|
|
|
2005-10-25 21:52:26 -04:00
|
|
|
: <highlight-button> ( gadget quot -- button )
|
2006-06-23 00:06:53 -04:00
|
|
|
<button> { 0 0 } over set-border-size ;
|
2005-10-25 21:52:26 -04:00
|
|
|
|
2005-08-26 21:42:43 -04:00
|
|
|
: <roll-button> ( gadget quot -- button )
|
2005-10-25 21:52:26 -04:00
|
|
|
<highlight-button> dup roll-button-theme ;
|
2005-09-27 00:44:38 -04:00
|
|
|
|
2005-10-25 21:52:26 -04:00
|
|
|
: <bevel-button> ( gadget quot -- button )
|
|
|
|
<button> dup bevel-button-theme ;
|
2005-08-27 15:12:37 -04:00
|
|
|
|
|
|
|
: repeat-button-down ( button -- )
|
|
|
|
dup 100 add-timer button-clicked ;
|
|
|
|
|
|
|
|
: repeat-button-up ( button -- )
|
|
|
|
dup button-update remove-timer ;
|
|
|
|
|
2006-05-26 17:40:41 -04:00
|
|
|
TUPLE: repeat-button ;
|
2005-08-27 15:12:37 -04:00
|
|
|
|
2006-05-26 17:40:41 -04:00
|
|
|
M: repeat-button gadget-gestures
|
|
|
|
drop H{
|
|
|
|
{ T{ button-down } [ repeat-button-down ] }
|
|
|
|
{ T{ button-up } [ repeat-button-up ] }
|
|
|
|
{ T{ mouse-leave } [ button-update ] }
|
|
|
|
{ T{ mouse-enter } [ button-update ] }
|
|
|
|
} ;
|
|
|
|
|
|
|
|
C: repeat-button ( gadget quot -- button )
|
2005-08-27 15:12:37 -04:00
|
|
|
#! Button that calls the quotation every 100ms as long as
|
|
|
|
#! the mouse is held down.
|
2006-05-26 17:40:41 -04:00
|
|
|
[ >r <bevel-button> r> set-gadget-delegate ] keep ;
|
2005-08-27 15:12:37 -04:00
|
|
|
|
2006-05-26 17:40:41 -04:00
|
|
|
M: repeat-button tick ( ms object -- ) nip button-clicked ;
|
2005-10-25 21:52:26 -04:00
|
|
|
|
2006-06-17 03:51:06 -04:00
|
|
|
TUPLE: button-paint plain rollover pressed selected ;
|
2005-10-25 21:52:26 -04:00
|
|
|
|
|
|
|
: button-paint ( button paint -- button paint )
|
2005-10-29 23:25:38 -04:00
|
|
|
{
|
|
|
|
{ [ over button-pressed? ] [ button-paint-pressed ] }
|
2006-06-17 03:51:06 -04:00
|
|
|
{ [ over button-selected? ] [ button-paint-selected ] }
|
2005-10-29 23:25:38 -04:00
|
|
|
{ [ over button-rollover? ] [ button-paint-rollover ] }
|
|
|
|
{ [ t ] [ button-paint-plain ] }
|
|
|
|
} cond ;
|
2005-10-25 21:52:26 -04:00
|
|
|
|
|
|
|
M: button-paint draw-interior ( button paint -- )
|
|
|
|
button-paint draw-interior ;
|
|
|
|
|
|
|
|
M: button-paint draw-boundary ( button paint -- )
|
|
|
|
button-paint draw-boundary ;
|