! 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 <<<<<<< HEAD:basis/ui/gadgets/buttons/buttons.factor 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.render math.geometry.rect locals alien.c-types specialized-arrays.float ; 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 ] } { 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 :