! Copyright (C) 2005, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. IN: gadgets-buttons USING: gadgets gadgets-borders gadgets-labels gadgets-theme generic io kernel math models namespaces sequences strings styles threads words ; TUPLE: button rollover? pressed? selected? 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 H{ { T{ button-up } [ button-clicked ] } { T{ button-down } [ button-update ] } { T{ mouse-leave } [ button-update ] } { T{ mouse-enter } [ button-update ] } } set-gestures GENERIC: >label ( obj -- gadget ) M: string >label