! Copyright (C) 2005 Slava Pestov. ! See http://factor.sf.net/license.txt for BSD license. IN: gadgets-buttons USING: gadgets gadgets-borders gadgets-layouts gadgets-theme generic io kernel lists math namespaces sequences sequences styles threads ; TUPLE: button rollover? pressed? quot ; : button-down? ( -- ? ) hand-buttons get-global empty? not ; : mouse-over? ( gadget -- ? ) hand-gadget get-global child? ; : mouse-clicked? ( gadget -- ? ) hand-clicked get-global child? ; : button-update ( button -- ) dup mouse-over? over set-button-rollover? dup mouse-clicked? button-down? and over button-rollover? and over set-button-pressed? relayout-1 ; : if-clicked ( button quot -- ) >r dup button-update dup button-rollover? r> [ drop ] if ; : button-clicked ( button -- ) dup button-quot if-clicked ; : button-gestures ( button quot -- ) over set-button-quot dup [ button-clicked ] [ button-up ] set-action dup [ button-update ] [ button-down ] set-action dup [ button-update ] [ mouse-leave ] set-action [ button-update ] [ mouse-enter ] set-action ; C: button ( gadget quot -- button ) rot over set-gadget-delegate [ swap button-gestures ] keep ; : ( gadget quot -- button )