/* * Copyright (c) 1987, 1988, 1989 Stanford University * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * Sensors describe input events of interest. */ #ifndef sensor_h #define sensor_h #include #include class Sensor : public Resource { public: Sensor(); Sensor(Sensor*); ~Sensor(); void Catch(EventType); void CatchButton(EventType, int); void CatchChannel(int); void CatchTimer(int, int); void Ignore(EventType); void IgnoreButton(EventType, int); void IgnoreChannel(int); void CatchRemote(); void IgnoreRemote(); virtual bool Interesting(Event&); protected: unsigned mask; unsigned down[8]; unsigned up[8]; #ifdef solaris static fd_set channels; static unsigned channels_mask; #else static unsigned channels; #endif static int maxchannel; bool timer; int sec, usec; int ButtonIndex (unsigned b); int ButtonFlag (unsigned b); void SetButton (unsigned a[], unsigned b); void ClearButton (unsigned a[], unsigned b); bool ButtonIsSet (unsigned a[], unsigned b); void SetMouseButtons (unsigned a[]); void ClearMouseButtons (unsigned a[]); bool MouseButtons (unsigned a[]); private: friend class Interactor; friend class Scene; }; extern Sensor* allEvents; extern Sensor* onoffEvents; extern Sensor* updownEvents; extern Sensor* noEvents; #endif