! 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 math namespaces sequences styles threads ; TUPLE: button rollover? pressed? quot ; : buttons-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? buttons-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 ] T{ button-up } set-action dup [ button-update ] T{ button-down } set-action dup [ button-update ] T{ mouse-leave } set-action [ button-update ] T{ mouse-enter } set-action ; C: button ( gadget quot -- button ) rot over set-gadget-delegate [ swap button-gestures ] keep ; : ( gadget quot -- button )