|
|
- #ifdef _WIN32
- /*
- Copyright (c) 2012 Advanced Micro Devices, Inc.
-
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- //Originally written by Erwin Coumans
-
-
- #include "Win32Window.h"
-
- #include "OpenGLInclude.h"
-
- #include <wchar.h>
- static InternalData2* sData = 0;
-
- #include "Win32InternalWindowData.h"
-
-
- enum
- {
- INTERNAL_SHIFT_MODIFIER=1,
- INTERNAL_ALT_MODIFIER=2,
- INTERNAL_CONTROL_MODIFIER=4,
- };
-
- void Win32Window::pumpMessage()
- {
- MSG msg;
- // check for messages
- //'if' instead of 'while' can make mainloop smoother.
- //@todo: use separate threads for input and rendering
- while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
- {
-
- // handle or dispatch messages
- if ( msg.message == WM_QUIT )
- {
- m_data->m_quit = TRUE;
- }
- else
- {
- TranslateMessage( &msg );
- DispatchMessage( &msg );
- }
-
- // gDemoApplication->displayCallback();
-
-
- };
- }
-
- int getSpecialKeyFromVirtualKeycode(int virtualKeyCode)
- {
- int keycode = -1;
- if (virtualKeyCode >= 'A' && virtualKeyCode <= 'Z')
- {
- return virtualKeyCode+32;//todo: fix the ascii A vs a input
- }
-
- switch (virtualKeyCode)
- {
- case VK_RETURN: {keycode = B3G_RETURN; break; };
- case VK_F1: {keycode = B3G_F1; break;}
- case VK_F2: {keycode = B3G_F2; break;}
- case VK_F3: {keycode = B3G_F3; break;}
- case VK_F4: {keycode = B3G_F4; break;}
- case VK_F5: {keycode = B3G_F5; break;}
- case VK_F6: {keycode = B3G_F6; break;}
- case VK_F7: {keycode = B3G_F7; break;}
- case VK_F8: {keycode = B3G_F8; break;}
- case VK_F9: {keycode = B3G_F9; break;}
- case VK_F10: {keycode= B3G_F10; break;}
-
- //case VK_SPACE: {keycode= ' '; break;}
-
- case VK_NEXT: {keycode= B3G_PAGE_DOWN; break;}
- case VK_PRIOR: {keycode= B3G_PAGE_UP; break;}
-
- case VK_INSERT: {keycode= B3G_INSERT; break;}
- case VK_BACK: {keycode= B3G_BACKSPACE; break;}
- case VK_DELETE: {keycode= B3G_DELETE; break;}
-
- case VK_END:{keycode= B3G_END; break;}
- case VK_HOME:{keycode= B3G_HOME; break;}
- case VK_LEFT:{keycode= B3G_LEFT_ARROW; break;}
- case VK_UP:{keycode= B3G_UP_ARROW; break;}
- case VK_RIGHT:{keycode= B3G_RIGHT_ARROW; break;}
- case VK_DOWN:{keycode= B3G_DOWN_ARROW; break;}
- case VK_SHIFT:{keycode=B3G_SHIFT;break;}
- case VK_MENU:{keycode=B3G_ALT;break;}
- case VK_CONTROL:{keycode=B3G_CONTROL;break;}
- default:
- {
- //keycode = MapVirtualKey( virtualKeyCode, MAPVK_VK_TO_CHAR ) & 0x0000FFFF;
- }
- };
-
- return keycode;
- }
-
-
- int getAsciiCodeFromVirtualKeycode(int virtualKeyCode)
- {
- int keycode = 0xffffffff;
-
- if (virtualKeyCode >= 'a' && virtualKeyCode <= 'z')
- {
- return virtualKeyCode;
- }
-
- if (virtualKeyCode >= 'A' && virtualKeyCode <= 'Z')
- {
- return virtualKeyCode+32;//todo: fix the ascii A vs a input
- }
-
- return keycode;
- }
-
- bool Win32Window::isModifierKeyPressed(int key)
- {
- bool isPressed = false;
-
- switch (key)
- {
- case B3G_ALT:
- {
- isPressed = ((sData->m_internalKeyModifierFlags&INTERNAL_ALT_MODIFIER)!=0);
- break;
- };
- case B3G_SHIFT:
- {
- isPressed = ((sData->m_internalKeyModifierFlags&INTERNAL_SHIFT_MODIFIER)!=0);
- break;
- };
- case B3G_CONTROL:
- {
- isPressed = ((sData->m_internalKeyModifierFlags&INTERNAL_CONTROL_MODIFIER)!=0);
- break;
- };
-
- default:
- {
- }
- };
- return isPressed;//m_internalKeyModifierFlags
- }
-
-
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- //printf("msg = %d\n", message);
- switch (message)
- {
-
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- BeginPaint(hWnd, &ps);
- EndPaint(hWnd, &ps);
- }
- return 1;
-
- case WM_ERASEBKGND:
- return 1;
-
- case WM_CLOSE:
- if (sData)
- sData->m_quit = true;
- //PostQuitMessage(0);
- return 1;
-
- case WM_DESTROY:
- if (sData)
- sData->m_quit = true;
- //PostQuitMessage(0);
- return 1;
-
- case WM_SYSKEYUP:
- case WM_KEYUP:
- {
-
- int keycode = getSpecialKeyFromVirtualKeycode(wParam);
- switch (keycode)
- {
- case B3G_ALT:
- {
- sData->m_internalKeyModifierFlags&=~INTERNAL_ALT_MODIFIER;
- break;
- };
- case B3G_SHIFT:
- {
- sData->m_internalKeyModifierFlags &= ~INTERNAL_SHIFT_MODIFIER;
- break;
- };
- case B3G_CONTROL:
- {
- sData->m_internalKeyModifierFlags &=~INTERNAL_CONTROL_MODIFIER;
- break;
- };
- }
-
- if (keycode>=0 && sData && sData->m_keyboardCallback )
- {
- int state=0;
- (*sData->m_keyboardCallback)(keycode,state);
- }
- return 0;
- }
- case WM_CHAR:
- {
- //skip 'enter' key, it is processed in WM_KEYUP/WM_KEYDOWN
- int keycode = getAsciiCodeFromVirtualKeycode(wParam);
- if (keycode < 0)
- {
- if (sData && sData->m_keyboardCallback && ((HIWORD(lParam) & KF_REPEAT) == 0))
- {
- int state = 1;
- (*sData->m_keyboardCallback)(wParam, state);
- }
- }
- return 0;
- }
- case WM_SYSKEYDOWN:
- case WM_KEYDOWN:
- {
- int keycode = getSpecialKeyFromVirtualKeycode(wParam);
- switch (keycode)
- {
- case B3G_ALT:
- {
- sData->m_internalKeyModifierFlags|=INTERNAL_ALT_MODIFIER;
- break;
- };
- case B3G_SHIFT:
- {
- sData->m_internalKeyModifierFlags |= INTERNAL_SHIFT_MODIFIER;
- break;
- };
- case B3G_CONTROL:
- {
- sData->m_internalKeyModifierFlags |=INTERNAL_CONTROL_MODIFIER;
- break;
- };
- }
- if (keycode>=0 && sData && sData->m_keyboardCallback)// && ((HIWORD(lParam) & KF_REPEAT) == 0))
- {
- int state = 1;
- (*sData->m_keyboardCallback)(keycode,state);
- return 1;
- }
- return 0;
- }
-
- case WM_MBUTTONUP:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- if (sData)
- {
- sData->m_mouseMButton=0;
- sData->m_mouseXpos = xPos;
- sData->m_mouseYpos = yPos;
- if (sData && sData->m_mouseButtonCallback)
- (*sData->m_mouseButtonCallback)(1,0,xPos,yPos);
- }
- break;
- }
- case WM_MBUTTONDOWN:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- if (sData)
- {
- sData->m_mouseMButton=1;
- sData->m_mouseXpos = xPos;
- sData->m_mouseYpos = yPos;
- if (sData && sData->m_mouseButtonCallback)
- (*sData->m_mouseButtonCallback)(1,1,xPos,yPos);
- }
- break;
- }
-
- case WM_LBUTTONUP:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- if (sData)
- {
- sData->m_mouseLButton=0;
- sData->m_mouseXpos = xPos;
- sData->m_mouseYpos = yPos;
-
- if (sData && sData->m_mouseButtonCallback)
- (*sData->m_mouseButtonCallback)(0,0,xPos,yPos);
-
- }
- // gDemoApplication->mouseFunc(0,1,xPos,yPos);
- break;
- }
- case WM_LBUTTONDOWN:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- if (sData)
- {
- sData->m_mouseLButton=1;
- sData->m_mouseXpos = xPos;
- sData->m_mouseYpos = yPos;
-
- if (sData && sData->m_mouseButtonCallback)
- (*sData->m_mouseButtonCallback)(0,1,xPos,yPos);
- }
- break;
- }
-
- case 0x020e://WM_MOUSEWHEEL_LEFT_RIGHT
- {
-
- int zDelta = (short)HIWORD(wParam);
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- //m_cameraDistance -= zDelta*0.01;
- if (sData && sData->m_wheelCallback)
- (*sData->m_wheelCallback)(-float(zDelta)*0.05f,0);
- return 1;
- break;
- }
- case 0x020A://WM_MOUSEWHEEL:
- {
-
- int zDelta = (short)HIWORD(wParam);
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- //m_cameraDistance -= zDelta*0.01;
- if (sData && sData->m_wheelCallback)
- (*sData->m_wheelCallback)(0,float(zDelta)*0.05f);
- return 1;
- break;
- }
-
- case WM_MOUSEMOVE:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- sData->m_mouseXpos = xPos;
- sData->m_mouseYpos = yPos;
-
- if (sData && sData->m_mouseMoveCallback)
- (*sData->m_mouseMoveCallback)(xPos,yPos);
-
- break;
- }
- case WM_RBUTTONUP:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- sData->m_mouseRButton = 1;
-
- if (sData && sData->m_mouseButtonCallback)
- (*sData->m_mouseButtonCallback)(2,0,sData->m_mouseXpos,sData->m_mouseYpos);
-
- //gDemoApplication->mouseFunc(2,1,xPos,yPos);
- break;
- }
- case WM_RBUTTONDOWN:
- {
- int xPos = LOWORD(lParam);
- int yPos = HIWORD(lParam);
- sData->m_mouseRButton = 0;
- if (sData && sData->m_mouseButtonCallback)
- (*sData->m_mouseButtonCallback)(2,1,sData->m_mouseXpos,sData->m_mouseYpos);
-
- break;
- }
- case WM_QUIT:
- {
- return 0;
- break;
- }
- case WM_SIZE: // Size Action Has Taken Place
-
- RECT clientRect;
- GetClientRect(hWnd,&clientRect);
-
- switch (wParam) // Evaluate Size Action
- {
-
- case SIZE_MINIMIZED: // Was Window Minimized?
- return 0; // Return
-
- case SIZE_MAXIMIZED: // Was Window Maximized?
- case SIZE_RESTORED: // Was Window Restored?
- RECT wr;
- GetWindowRect(hWnd,&wr);
-
- sData->m_fullWindowWidth = wr.right-wr.left;
- sData->m_fullWindowHeight = wr.bottom-wr.top;//LOWORD (lParam) HIWORD (lParam);
- sData->m_openglViewportWidth = clientRect.right;
- sData->m_openglViewportHeight = clientRect.bottom;
- glViewport(0, 0, sData->m_openglViewportWidth, sData->m_openglViewportHeight);
-
- if (sData->m_resizeCallback)
- (*sData->m_resizeCallback)(sData->m_openglViewportWidth,sData->m_openglViewportHeight);
- //if (sOpenGLInitialized)
- //{
- // //gDemoApplication->reshape(sWidth,sHeight);
- //}
- return 0; // Return
- }
- break;
-
- default:{
-
-
- }
- };
-
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
-
-
-
- void Win32Window::setWindowTitle(const char* titleChar)
- {
-
- wchar_t windowTitle[1024];
- swprintf(windowTitle, 1024, L"%hs", titleChar);
-
- DWORD dwResult;
-
- #ifdef _WIN64
- SetWindowTextW(m_data->m_hWnd, windowTitle);
- #else
- SendMessageTimeoutW(m_data->m_hWnd, WM_SETTEXT, 0,
- reinterpret_cast<LPARAM>(windowTitle),
- SMTO_ABORTIFHUNG, 2000, &dwResult);
- #endif
- }
-
- void Win32Window::createWindow(const b3gWindowConstructionInfo& ci)
- {
- int oglViewportWidth = ci.m_width;
- int oglViewportHeight = ci.m_height;
- bool fullscreen = ci.m_fullscreen;
- int colorBitsPerPixel = ci.m_colorBitsPerPixel;
- void* windowHandle = ci.m_windowHandle;
-
- // get handle to exe file
- HINSTANCE hInstance = GetModuleHandle(0);
-
-
- // create the window if we need to and we do not use the null device
- if (!windowHandle)
- {
- #ifdef UNICODE
- const wchar_t * ClassName = L"DeviceWin32";
- const wchar_t* emptyString= L"";
- #else
- const char* ClassName = "DeviceWin32";
- const char* emptyString = "";
- #endif
- // Register Class
- WNDCLASSEX wcex;
- wcex.cbSize = sizeof(WNDCLASSEX);
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon( NULL, IDI_APPLICATION ); //(HICON)LoadImage(hInstance, "bullet_ico.ico", IMAGE_ICON, 0,0, LR_LOADTRANSPARENT);//LR_LOADFROMFILE);
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wcex.lpszMenuName = 0;
- wcex.lpszClassName = ClassName;
- wcex.hIconSm = 0;
-
- // if there is an icon, load it
- // wcex.hIcon = (HICON)LoadImage(hInstance, "bullet.ico", IMAGE_ICON, 0,0, LR_LOADFROMFILE);
-
- RegisterClassEx(&wcex);
-
- // calculate client size
-
- RECT clientSize;
- clientSize.top = 0;
- clientSize.left = 0;
- clientSize.right = oglViewportWidth;
- clientSize.bottom = oglViewportHeight;
-
- DWORD style = WS_POPUP;
-
- if (!fullscreen)
- style = WS_SYSMENU | WS_BORDER | WS_CAPTION | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX;
-
- AdjustWindowRect(&clientSize, style, false);
-
- m_data->m_fullWindowWidth = clientSize.right - clientSize.left;
- m_data->m_fullWindowHeight = clientSize.bottom - clientSize.top;
-
- int windowLeft = (GetSystemMetrics(SM_CXSCREEN) - m_data->m_fullWindowWidth) / 2;
- int windowTop = (GetSystemMetrics(SM_CYSCREEN) - m_data->m_fullWindowHeight) / 2;
-
- if (fullscreen)
- {
- windowLeft = 0;
- windowTop = 0;
- }
-
- // create window
-
- m_data->m_hWnd = CreateWindow( ClassName, emptyString, style, windowLeft, windowTop,
- m_data->m_fullWindowWidth, m_data->m_fullWindowHeight,NULL, NULL, hInstance, NULL);
-
-
- RECT clientRect;
- GetClientRect(m_data->m_hWnd,&clientRect);
-
-
-
- ShowWindow(m_data->m_hWnd, SW_SHOW);
- UpdateWindow(m_data->m_hWnd);
-
- MoveWindow(m_data->m_hWnd, windowLeft, windowTop, m_data->m_fullWindowWidth, m_data->m_fullWindowHeight, TRUE);
-
- GetClientRect(m_data->m_hWnd,&clientRect);
- int w = clientRect.right-clientRect.left;
- int h = clientRect.bottom-clientRect.top;
- // printf("actual client OpenGL viewport width / height = %d, %d\n",w,h);
- m_data->m_openglViewportHeight = h;
- m_data->m_openglViewportWidth = w;
-
- }
- else if (windowHandle)
- {
- // attach external window
- m_data->m_hWnd = static_cast<HWND>(windowHandle);
- RECT r;
- GetWindowRect(m_data->m_hWnd, &r);
- m_data->m_fullWindowWidth = r.right - r.left;
- m_data->m_fullWindowHeight= r.bottom - r.top;
-
-
- //sFullScreen = false;
- //sExternalWindow = true;
- }
-
-
- if (fullscreen)
- {
- DEVMODE dm;
- memset(&dm, 0, sizeof(dm));
- dm.dmSize = sizeof(dm);
- // use default values from current setting
- EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
- m_data->m_oldScreenWidth = dm.dmPelsWidth;
- m_data->m_oldHeight = dm.dmPelsHeight;
- m_data->m_oldBitsPerPel = dm.dmBitsPerPel;
-
- dm.dmPelsWidth = oglViewportWidth;
- dm.dmPelsHeight = oglViewportHeight;
- if (colorBitsPerPixel)
- {
- dm.dmBitsPerPel = colorBitsPerPixel;
- }
- dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
-
- LONG res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
- if (res != DISP_CHANGE_SUCCESSFUL)
- { // try again without forcing display frequency
- dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
- res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
- }
-
- }
-
-
- }
-
-
- void Win32Window::switchFullScreen(bool fullscreen,int width,int height,int colorBitsPerPixel)
- {
-
- LONG res;
- DEVMODE dm;
- memset(&dm, 0, sizeof(dm));
- dm.dmSize = sizeof(dm);
- // use default values from current setting
- EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
-
- dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
-
- if (fullscreen && !m_data->m_oldScreenWidth)
- {
- m_data->m_oldScreenWidth = dm.dmPelsWidth;
- m_data->m_oldHeight = dm.dmPelsHeight;
- m_data->m_oldBitsPerPel = dm.dmBitsPerPel;
-
- if (width && height)
- {
- dm.dmPelsWidth = width;
- dm.dmPelsHeight = height;
- } else
- {
- dm.dmPelsWidth = m_data->m_fullWindowWidth;
- dm.dmPelsHeight = m_data->m_fullWindowHeight;
- }
- if (colorBitsPerPixel)
- {
- dm.dmBitsPerPel = colorBitsPerPixel;
- }
- } else
- {
- if (m_data->m_oldScreenWidth)
- {
- dm.dmPelsWidth = m_data->m_oldScreenWidth;
- dm.dmPelsHeight= m_data->m_oldHeight;
- dm.dmBitsPerPel = m_data->m_oldBitsPerPel;
- }
- }
-
- if (fullscreen)
- {
-
- res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
- if (!res)
- {
- dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
- res = ChangeDisplaySettings(&dm, CDS_FULLSCREEN);
- }
-
- DWORD style = WS_POPUP;
- SetWindowLong(m_data->m_hWnd, GWL_STYLE, style);
-
- MoveWindow(m_data->m_hWnd, 0, 0, m_data->m_fullWindowWidth, m_data->m_fullWindowHeight, TRUE);
-
- SetWindowPos(m_data->m_hWnd, NULL,0,0, (int)width, (int)height,
- SWP_FRAMECHANGED |SWP_SHOWWINDOW);//|SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOOWNERZORDER | SWP_NOREPOSITION | SWP_NOZORDER);
-
-
- } else
- {
- res = ChangeDisplaySettings(&dm, 0);
-
- DWORD style = WS_SYSMENU | WS_BORDER | WS_CAPTION | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SIZEBOX;
- SetWindowLong(m_data->m_hWnd, GWL_STYLE, style);
-
- SetWindowPos(m_data->m_hWnd, NULL,0,0, (int)width, (int)height,
- SWP_FRAMECHANGED |SWP_SHOWWINDOW);
- //|SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOOWNERZORDER | SWP_NOREPOSITION | SWP_NOZORDER);
-
- }
-
-
- }
-
-
-
- Win32Window::Win32Window()
- {
- m_data = new InternalData2();
- sData = m_data;
-
- }
-
- Win32Window::~Win32Window()
- {
- setKeyboardCallback(0);
- setMouseMoveCallback(0);
- setMouseButtonCallback(0);
- setWheelCallback(0);
- setResizeCallback(0);
-
- sData = 0;
- delete m_data;
-
- }
-
- void Win32Window::setRenderCallback( b3RenderCallback renderCallback)
- {
-
- }
-
- void Win32Window::closeWindow()
- {
- setKeyboardCallback(0);
- setMouseMoveCallback(0);
- setMouseButtonCallback(0);
- setWheelCallback(0);
- setResizeCallback(0);
- setRenderCallback(0);
-
-
- DestroyWindow(this->m_data->m_hWnd);
- }
-
- void Win32Window::getMouseCoordinates(int& x, int& y)
- {
- x = m_data->m_mouseXpos;
- y = m_data->m_mouseYpos;
-
- }
-
- void Win32Window::runMainLoop()
- {
-
- }
-
-
- void Win32Window::startRendering()
- {
- pumpMessage();
-
- // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); //clear buffers
-
- //glCullFace(GL_BACK);
- //glFrontFace(GL_CCW);
- // glEnable(GL_DEPTH_TEST);
-
-
-
- }
-
-
- void Win32Window::renderAllObjects()
- {
- }
-
- void Win32Window::endRendering()
- {
- SwapBuffers( m_data->m_hDC );
- }
-
- float Win32Window::getTimeInSeconds()
- {
- return 0.f;
- }
-
- void Win32Window::setDebugMessage(int x,int y,const char* message)
- {
- }
-
- void Win32Window::setRequestExit()
- {
- m_data->m_quit = true;
- }
- bool Win32Window::requestedExit() const
- {
- return m_data->m_quit;
- }
-
- void Win32Window::setWheelCallback(b3WheelCallback wheelCallback)
- {
- m_data->m_wheelCallback = wheelCallback;
- }
-
- void Win32Window::setMouseMoveCallback(b3MouseMoveCallback mouseCallback)
- {
- m_data->m_mouseMoveCallback = mouseCallback;
- }
-
- void Win32Window::setMouseButtonCallback(b3MouseButtonCallback mouseCallback)
- {
- m_data->m_mouseButtonCallback = mouseCallback;
- }
-
- void Win32Window::setResizeCallback(b3ResizeCallback resizeCallback)
- {
- m_data->m_resizeCallback = resizeCallback;
- if (m_data->m_resizeCallback)
- (*m_data->m_resizeCallback)(m_data->m_openglViewportWidth,m_data->m_openglViewportHeight);
- }
-
- void Win32Window::setKeyboardCallback( b3KeyboardCallback keyboardCallback)
- {
- m_data->m_keyboardCallback = keyboardCallback;
-
- }
-
- b3KeyboardCallback Win32Window::getKeyboardCallback()
- {
- return m_data->m_keyboardCallback;
- }
-
- b3MouseMoveCallback Win32Window::getMouseMoveCallback()
- {
- return m_data->m_mouseMoveCallback;
- }
- b3MouseButtonCallback Win32Window::getMouseButtonCallback()
- {
- return m_data->m_mouseButtonCallback;
- }
- b3ResizeCallback Win32Window::getResizeCallback()
- {
- return m_data->m_resizeCallback;
- }
- b3WheelCallback Win32Window::getWheelCallback()
- {
- return m_data->m_wheelCallback;
- }
- #endif
-
|