Main Page | Class List | File List | Class Members

CMouseSimple.cpp

00001 
00044 /*-----------------------------------------------------------------------------------------------*/
00045 #include <stdio.h>
00046 #include <time.h>
00047 #include <GLut/glut.h>
00048 #include "CMouseSimple.h"
00049 
00050  
00051 /*-----------------------------------------------------------------------------------------------*/
00061 /*-----------------------------------------------------------------------------------------------*/
00062 #pragma warning(This function will be moved to a general purpose collection of (mostly) math functions!)
00063 float ConvertPixelToFloat(int pixel, int halfdimension)
00064 {
00065         return ((float)(pixel - halfdimension) / halfdimension);
00066 }
00067 
00068 
00069 /*-----------------------------------------------------------------------------------------------*/
00079 /*-----------------------------------------------------------------------------------------------*/
00080 #pragma warning(This function will be moved to a general purpose collection of (mostly) math functions!)
00081 int ConvertFloatToPixel(float coord, int halfdimension)
00082 {
00083         return (int)((coord * halfdimension) + halfdimension);
00084 }
00085 
00086 
00087 
00088 
00089 
00090 /*-----------------------------------------------------------------------------------------------*/
00095 /*-----------------------------------------------------------------------------------------------*/
00096 CMouseSimple *g_pMouseSimple = 0;
00097 
00098 
00099 /*-----------------------------------------------------------------------------------------------*/
00103 /*-----------------------------------------------------------------------------------------------*/
00104 CMouseSimple::CMouseSimple()
00105 {
00107         
00111         m_NumButtons = glutDeviceGet(GLUT_NUM_MOUSE_BUTTONS) + 1;
00112         
00113         m_DragTime = new time_t[m_NumButtons];
00114         m_Buttons = new bool[m_NumButtons];
00115         
00117         SetScreenSize(800, 600);
00118         SetLimitRegion(0, 0, 800, 600);
00119         SetMouseXY(0, 0);
00120 
00122         for(int i = 0; i < m_NumButtons; i++)
00123         {
00124                 m_Buttons[i] = false;
00125                 m_DragTime[i] = 0;
00126         }
00127 }
00128 
00129 
00130 /*-----------------------------------------------------------------------------------------------*/
00134 /*-----------------------------------------------------------------------------------------------*/
00135 CMouseSimple::~CMouseSimple()
00136 {
00137         delete m_Buttons;
00138         delete m_DragTime;
00139 }
00140 
00141 
00142 /*-----------------------------------------------------------------------------------------------*/
00150 /*-----------------------------------------------------------------------------------------------*/
00151 bool CMouseSimple::GetButton(int button)
00152 {
00153         if(button >= 0 && button < m_NumButtons)
00154                 return m_Buttons[button];
00155         return false;
00156 }
00157 
00158 
00159 /*-----------------------------------------------------------------------------------------------*/
00168 /*-----------------------------------------------------------------------------------------------*/
00169 bool CMouseSimple::SetButton(int button, bool state)
00170 {
00171         if(button>=0 && button < m_NumButtons)
00172         {
00173                 time_t tt;
00174                 bool oldstate = m_Buttons[button];
00175                 m_Buttons[button] = state;
00176                 if(state)
00177                 {
00178                         time(&tt);
00179                         m_DragTime[button] = tt;
00180                 }
00181                 else
00182                         m_DragTime[button] = 0;
00183                 return oldstate;
00184         }
00185         return false;
00186 }
00187 
00188 
00189 /*-----------------------------------------------------------------------------------------------*/
00196 /*-----------------------------------------------------------------------------------------------*/
00197 void CMouseSimple::SetMouseXY(int x, int y)
00198 {
00199         m_fX = ConvertPixelToFloat(x, m_iDisplayWidthHalf);
00200         m_fY = -ConvertPixelToFloat(y, m_iDisplayHeightHalf);
00201         m_X = x;
00202         m_Y = y;
00203 }
00204 
00205 
00206 /*-----------------------------------------------------------------------------------------------*/
00213 /*-----------------------------------------------------------------------------------------------*/
00214 void CMouseSimple::SetScreenSize(int w, int h)
00215 {
00216         m_iDisplayWidth = w;
00217         m_iDisplayHeight = h;
00218         m_iDisplayWidthHalf = w / 2;
00219         m_iDisplayHeightHalf = h / 2;
00220 }
00221 
00222 
00223 /*-----------------------------------------------------------------------------------------------*/
00231 /*-----------------------------------------------------------------------------------------------*/
00232 int CMouseSimple::GetDragTime(int button)
00233 {
00234         if(button >= 0 && button < m_NumButtons)
00235         {
00236                 time_t diff;
00237                 time(&diff);
00238                 diff -= m_DragTime[button];
00239                 return (int)diff;
00240         }
00241         return 0;
00242 }
00243 
00244 
00245 /*-----------------------------------------------------------------------------------------------*/
00253 /*-----------------------------------------------------------------------------------------------*/
00254 bool CMouseSimple::ButtonClick(int button)
00255 {
00256         if(button >= 0)// && button < m_NumButtons)
00257         {
00258                 time_t diff;
00259                 time(&diff);
00260                 diff -= m_DragTime[button];
00261                 if(diff < MINIMUM_DRAG_TIME)
00262                         return true;
00263         }
00264         return false;
00265 }
00266 
00267 
00268 /*-----------------------------------------------------------------------------------------------*/
00274 /*-----------------------------------------------------------------------------------------------*/
00275 void CMouseSimple::UnClickButton(int button)
00276 {
00277         if(button >= 0 && button < m_NumButtons)
00278                 m_DragTime[button] = 0;
00279 }
00280 
00281 
00282 /*-----------------------------------------------------------------------------------------------*/
00291 /*-----------------------------------------------------------------------------------------------*/
00292 void CMouseSimple::SetLimitRegion(int x1, int y1, int x2, int y2)
00293 {
00294         m_Limit[0] = x1;
00295         m_Limit[1] = y1;
00296         m_Limit[2] = x2;
00297         m_Limit[3] = y2;
00298         
00299 }
00300 
00301 
00302 /*-----------------------------------------------------------------------------------------------*/
00308 /*-----------------------------------------------------------------------------------------------*/
00309 bool CMouseSimple::LimitMouseToRegion(void)
00310 {
00311         bool limited = false;
00312         if(m_X < m_Limit[0])
00313         {
00314                 m_X = m_Limit[0]; 
00315                 limited = true;
00316         }
00317         else
00318         {
00319                 if(m_X > m_Limit[2])
00320                 {
00321                         m_X = m_Limit[2]; 
00322                         limited = true;
00323                 }
00324         }
00325         if(m_Y < m_Limit[1])
00326         {       
00327                 m_Y = m_Limit[1]; 
00328                 limited = true;
00329         }
00330         else
00331         {
00332                 if(m_Y > m_Limit[3])
00333                 {       
00334                         m_Y = m_Limit[3]; 
00335                         limited = true;
00336                 }
00337         }
00338         glutWarpPointer(m_X, m_Y);
00339         SetMouseXY(m_X,m_Y);
00340         return limited;
00341 }
00342 
00343 
00344 //END

Generated on Tue Dec 14 23:44:39 2004 for CMouseSimple by  doxygen 1.3.9.1