00001 /* 00002 Copyright (c) 2010, The Cinder Project: http://libcinder.org 00003 All rights reserved. 00004 00005 Redistribution and use in source and binary forms, with or without modification, are permitted provided that 00006 the following conditions are met: 00007 00008 * Redistributions of source code must retain the above copyright notice, this list of conditions and 00009 the following disclaimer. 00010 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and 00011 the following disclaimer in the documentation and/or other materials provided with the distribution. 00012 00013 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED 00014 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00015 PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 00016 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 00017 TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00018 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00019 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00020 POSSIBILITY OF SUCH DAMAGE. 00021 */ 00022 00023 #pragma once 00024 00025 #include "cinder/Cinder.h" 00026 #include "cinder/app/Event.h" 00027 #include "cinder/Vector.h" 00028 00029 #include <vector> 00030 00031 namespace cinder { namespace app { 00032 00034 class TouchEvent : public Event { 00035 public: 00036 class Touch { 00037 public: 00038 Touch( const Vec2f &pos, const Vec2f &prevPos, uint32_t id, double time, void *native ) 00039 : mPos( pos ), mPrevPos( prevPos ), mId( id ), mTime( time ), mNative( native ) {} 00040 00042 float getX() const { return mPos.x; } 00044 float getY() const { return mPos.y; } 00046 Vec2f getPos() const { return mPos; } 00048 float getPrevX() const { return mPrevPos.x; } 00050 float getPrevY() const { return mPrevPos.y; } 00052 Vec2f getPrevPos() const { return mPrevPos; } 00054 uint32_t getId() const { return mId; } 00056 double getTime() const { return mTime; } 00058 const void* getNative() const { return mNative; } 00059 00060 private: 00061 Vec2f mPos, mPrevPos; 00062 uint32_t mId; 00063 double mTime; 00064 void *mNative; 00065 }; 00066 00067 TouchEvent() : Event() {} 00068 TouchEvent( const std::vector<Touch> &touches ) 00069 : Event(), mTouches( touches ) 00070 {} 00071 00073 const std::vector<Touch>& getTouches() const { return mTouches; } 00074 00075 private: 00076 std::vector<Touch> mTouches; 00077 }; 00078 00079 inline std::ostream& operator<<( std::ostream &out, const TouchEvent::Touch &touch ) 00080 { 00081 out << touch.getId() << ": " << touch.getPos() << " @ " << touch.getTime() << "s"; 00082 return out; 00083 } 00084 00085 inline std::ostream& operator<<( std::ostream &out, const TouchEvent &event ) 00086 { 00087 out << "{" << std::endl; 00088 for( std::vector<TouchEvent::Touch>::const_iterator tIt = event.getTouches().begin(); tIt != event.getTouches().end(); ++tIt ) 00089 out << " " << *tIt << std::endl; 00090 out << "}"; 00091 return out; 00092 } 00093 00094 } } // namespace cinder::app