! Copyright (C) 2005, 2008 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays kernel math models namespaces sequences strings quotations assocs combinators classes colors classes.tuple opengl math.vectors ui.commands ui.gadgets ui.gadgets.borders ui.gadgets.labels ui.gadgets.theme ui.gadgets.tracks ui.gadgets.packs ui.gadgets.worlds ui.gestures ui.render math.geometry.rect ; IN: ui.gadgets.buttons TUPLE: button < border pressed? selected? quot ; : buttons-down? ( -- ? ) hand-buttons get-global empty? not ; : button-rollover? ( button -- ? ) hand-gadget get-global child? ; : mouse-clicked? ( gadget -- ? ) hand-clicked get-global child? ; : button-update ( button -- ) dup mouse-clicked? over button-rollover? and buttons-down? 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 : new-button ( label quot class -- button ) [ swap >label ] dip new-border swap >>quot ; inline :