! Copyright (C) 2005, 2009 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. USING: accessors arrays assocs classes classes.tuple colors colors.constants combinators combinators.short-circuit combinators.smart fry kernel locals math math.rectangles math.vectors models namespaces opengl opengl.gl quotations sequences strings ui.commands ui.gadgets ui.gadgets.borders ui.gadgets.labels ui.gadgets.packs ui.gadgets.theme ui.gadgets.tracks ui.gadgets.worlds ui.gestures ui.pens ui.pens.image ui.pens.solid ui.pens.tile ; FROM: models => change-model ; IN: ui.gadgets.buttons TUPLE: button < border pressed? selected? quot tooltip ; : button-update ( button -- ) dup { [ mouse-clicked? ] [ button-rollover? ] } 1&& buttons-down? and >>pressed? relayout-1 ; : button-enter ( button -- ) dup dup tooltip>> [ swap show-status ] [ drop ] if* button-update ; : button-leave ( button -- ) dup "" swap show-status button-update ; : button-clicked ( button -- ) [ ] [ button-update ] [ button-rollover? ] tri [ dup quot>> call( button -- ) ] [ drop ] if ; button H{ { T{ button-up } [ button-clicked ] } { T{ button-down } [ button-update ] } { mouse-leave [ button-leave ] } { mouse-enter [ button-enter ] } } set-gestures : new-button ( label quot class -- button ) [ swap >label ] dip new-border swap >>quot ; inline :