/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkEventSink_DEFINED #define SkEventSink_DEFINED #include "SkRefCnt.h" #include "SkEvent.h" /** \class SkEventSink SkEventSink is the base class for all objects that receive SkEvents. */ class SkEventSink : public SkRefCnt { public: SkEventSink(); virtual ~SkEventSink(); /** * Returns this eventsink's unique ID. Use this to post SkEvents to * this eventsink. */ SkEventSinkID getSinkID() const { return fID; } /** * Call this to pass an event to this object for processing. Returns true if the * event was handled. */ bool doEvent(const SkEvent&); /** Returns true if the sink (or one of its subclasses) understands the event as a query. If so, the sink may modify the event to communicate its "answer". */ bool doQuery(SkEvent* query); /** * Returns the matching eventsink, or null if not found */ static SkEventSink* FindSink(SkEventSinkID); protected: /** Override this to handle events in your subclass. Be sure to call the inherited version for events that you don't handle. */ virtual bool onEvent(const SkEvent&); virtual bool onQuery(SkEvent*); private: SkEventSinkID fID; // for our private link-list SkEventSink* fNextSink; typedef SkRefCnt INHERITED; }; #endif