! Copyright (C) 2005, 2009 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 colors.constants classes.tuple opengl opengl.gl 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.pens ui.pens.solid ui.pens.caching math.rectangles locals specialized-arrays.float fry combinators.smart ; 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 >>pressed? relayout-1 ; : if-clicked ( button quot -- ) [ dup button-update dup button-rollover? ] dip [ drop ] if ; : button-clicked ( button -- ) dup quot>> if-clicked ; button H{ { T{ button-up } [ button-clicked ] } { T{ button-down } [ button-update ] } { mouse-leave [ button-update ] } { mouse-enter [ button-update ] } } set-gestures : new-button ( label quot class -- button ) [ swap >label ] dip new-border swap >>quot ; inline :