• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/window/src/WindowInput.cpp

Go to the documentation of this file.
00001 #include "../pch.h"
00002 
00003 NAMESPACE_START
00004 
00005 bool Window::activateInput(::DEVICE type){
00006         return inputWindow.activateInput(type);
00007 }
00008 
00009 void Window::deactivateInput(::DEVICE type){
00010         inputWindow.deactivateInput(type);
00011 }
00012 
00013 uint Window::getDevices(::DeviceInfo* array, uint size){
00014         return inputWindow.getDevices(array, size);
00015 }
00016 
00017 ::pDevice Window::activateDevice(::DEVICE type, int ID){
00018         return inputWindow.activateDevice(type, ID);
00019 }
00020 
00021 void Window::deactivateDevice(::pDevice device){
00022         inputWindow.deactivateDevice(device);
00023 }
00024 
00025 void Window::loop(void){
00026         MSG msg;
00027         if(m_hWnd == 0) return;
00028         memset(&msg,0,sizeof(MSG));
00029 
00030         while(msg.message != WM_QUIT && IsOpen){
00031                 for(uint i=0, size = windowList.size(); i<size; i++){
00032                         m_curWindow = windowList.get(i);
00033                         if(PeekMessage(&msg, m_curWindow->m_hWnd, 0, 0, PM_REMOVE)){
00034                                 if(msg.message == WM_MOUSEMOVE){
00035                                         m_curWindow->m_mouseX = LOWORD(msg.lParam);
00036                                         m_curWindow->m_mouseY = HIWORD(msg.lParam);
00037                                 }else{
00038                                         TranslateMessage(&msg);
00039                                         DispatchMessage(&msg);
00040                                 }
00041                                 if(size != windowList.size()){
00042                                         size = windowList.size();
00043                                         i = 0;
00044                                 }
00045                         }else{
00046                                 for(uint i=0; i<m_curWindow->renderListeners.size(); i++)
00047                                         m_curWindow->renderListeners.get(i)->eventRender();
00048 				::wait(1);
00049                         }
00050                 }
00051         }
00052 }
00053 
00054 LRESULT CALLBACK Window::MessageHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
00055         // help macros
00056         #define CALL(__class)\
00057                 for(uint i=0; i<__class.size(); i++)\
00058                         __class.get(i)()
00059         // used vars
00060         POINT point;
00061         RECT rc;
00062 
00063         switch(msg){
00064                 // Darw
00065                 case WM_PAINT:
00066                         if(m_curWindow){
00067                                 for(uint i=0; i<m_curWindow->renderListeners.size(); i++)
00068                                         m_curWindow->renderListeners.get(i)->eventPaint();
00069                         }
00070                         break;
00071 
00072                 // Resize
00073                 case WM_SIZE:
00074                         if(m_curWindow){
00075                                 GetCursorPos(&point);
00076                                 m_curWindow->m_mouseX = point.x;
00077                                 m_curWindow->m_mouseY = point.y;
00078                                 GetWindowRect(hWnd, &rc);
00079                                 m_curWindow->m_mouseX -= rc.left;
00080                                 m_curWindow->m_mouseY -= rc.top;
00081 				::WindowSize wndSize = m_curWindow->getSize();
00082                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00083                                         m_curWindow->windowListeners.get(i)->eventWindowResize(wndSize.x, wndSize.y, wndSize.width, wndSize.height);
00084                         }
00085                         break;
00086 
00087                 //#ifdef DEBUG
00089                 //case WM_NCPAINT:{
00090                 //      if(m_curWindow->getStyle() != styleNormal)
00091                 //              break;
00092                 //      // draw default border
00093                 //      LRESULT rs = DefWindowProc(hWnd, msg, wParam, lParam);
00094                 //      // draw custum border ui
00095                 //      if(HDC hdc = GetDCEx(hWnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN)){
00096                 //              // Paint into this DC 
00097                 //              ReleaseDC(hWnd, hdc);
00098                 //      }
00099                 //      return rs;
00100                 //}
00101                 //#endif
00102 
00103                 // close window
00104                 case WM_CLOSE:
00105                         if(m_curWindow){
00106                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00107                                         m_curWindow->windowListeners.get(i)->eventWindowClose();
00108                                 if((HWND)m_curWindow->getWindow() == hWnd)
00109                                         m_curWindow->uninit();
00110                         }
00111                         return 0;
00112 
00113                 // Destroy Application
00114                 case WM_DESTROY:
00115                         for(uint i=0; i<windowList.size(); i++){
00116                                 if((HWND)windowList.get(i)->getWindow() == hWnd){
00117                                         windowList.get(i)->IsOpen = false;
00118                                         windowList.removeIndex(i);
00119                                         break;
00120                                 }
00121                         }
00122                         if(windowList.size() == 0){
00123                                 windowList.clear();
00124                                 PostQuitMessage(0);
00125                                 UnregisterClass(windowClassName, m_hInstance);
00126                                 m_wndClassCreated = false;
00127                         }
00128                         return 0;
00129 
00130                 // minimize / unminimize / maximize [/ close]
00131                 case WM_SYSCOMMAND:
00132                         if(m_curWindow){
00133                                 switch(wParam){
00134                                         case SC_MINIMIZE:
00135                                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00136                                                         m_curWindow->windowListeners.get(i)->eventWindowMinimize();
00137                                                 break;
00138                                         case SC_RESTORE:
00139                                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00140                                                         m_curWindow->windowListeners.get(i)->eventWindowUnminimize();
00141                                                 break;
00142                                         case SC_MAXIMIZE:
00143                                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00144                                                         m_curWindow->windowListeners.get(i)->eventWindowMaximize();
00145                                                 break;
00146                                         case SC_MOVE:
00147                                                 {	
00148 							::WindowSize wndSize = m_curWindow->getSize();
00149                                                         for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00150                                                                 m_curWindow->windowListeners.get(i)->eventWindowResize(wndSize.x, wndSize.y, wndSize.width, wndSize.height);
00151                                                 }
00152                                                 break;
00153                                         default: break;
00154                                 }
00155                         }
00156                         break;
00157 
00158                 // window is activated
00159                 // or deactivated
00160                 case WM_ACTIVATE:
00161                         if(m_curWindow){
00162                                 switch(wParam){
00163                                         case WA_ACTIVE:
00164                                         case WA_CLICKACTIVE:
00165                                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00166                                                         m_curWindow->windowListeners.get(i)->eventWindowFocus();
00167                                         case WA_INACTIVE:
00168                                                 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00169                                                         m_curWindow->windowListeners.get(i)->eventWindowLostFocus();
00170                                         default: break;
00171                                 }
00172                         }
00173                         break;
00174 
00175                 default: break;
00176         }
00177         return DefWindowProc(hWnd, msg, wParam, lParam);
00178         #undef CALL
00179 }
00180 
00181 NAMESPACE_END

Generated on Fri Jun 18 2010 17:48:40 for Cannonball by  doxygen 1.7.0