From 952c5c128f9efaea89d41d882c4ea3ade7df4591 Mon Sep 17 00:00:00 2001 From: zakk Date: Fri, 26 Aug 2005 04:48:05 +0000 Subject: Itsa me, quake3io! git-svn-id: svn://svn.icculus.org/quake3/trunk@2 edf5b092-35ff-0310-97b2-ce42778d08ea --- q3radiant/WIN_Z.CPP | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100755 q3radiant/WIN_Z.CPP (limited to 'q3radiant/WIN_Z.CPP') diff --git a/q3radiant/WIN_Z.CPP b/q3radiant/WIN_Z.CPP new file mode 100755 index 0000000..caac0d0 --- /dev/null +++ b/q3radiant/WIN_Z.CPP @@ -0,0 +1,192 @@ +/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + +This file is part of Quake III Arena source code. + +Quake III Arena source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Quake III Arena source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Foobar; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ +// win_cam.c -- windows specific camera view code + +#include "stdafx.h" +#include "qe3.h" + +static HDC s_hdcZ; +static HGLRC s_hglrcZ; + +/* +============ +WZ_WndProc +============ +*/ +LONG WINAPI WZ_WndProc ( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + int fwKeys, xPos, yPos; + RECT rect; + + GetClientRect(hWnd, &rect); + + switch (uMsg) + { + + case WM_DESTROY: + QEW_StopGL( hWnd, s_hglrcZ, s_hdcZ ); + return 0; + + case WM_CREATE: + s_hdcZ = GetDC(hWnd); + QEW_SetupPixelFormat( s_hdcZ, false); + if ( ( s_hglrcZ = wglCreateContext( s_hdcZ ) ) == 0 ) + Error( "wglCreateContext in WZ_WndProc failed" ); + + if (!wglMakeCurrent( s_hdcZ, s_hglrcZ )) + Error ("wglMakeCurrent in WZ_WndProc failed"); + + if (!wglShareLists( g_qeglobals.d_hglrcBase, s_hglrcZ ) ) + Error( "wglShareLists in WZ_WndProc failed" ); + return 0; + + case WM_PAINT: + { + PAINTSTRUCT ps; + + BeginPaint(hWnd, &ps); + + if ( !wglMakeCurrent( s_hdcZ, s_hglrcZ ) ) + Error ("wglMakeCurrent failed"); + QE_CheckOpenGLForErrors(); + + Z_Draw (); + SwapBuffers(s_hdcZ); + + EndPaint(hWnd, &ps); + } + return 0; + + + case WM_KEYDOWN: + QE_KeyDown (wParam); + return 0; + + case WM_MBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_LBUTTONDOWN: + if (GetTopWindow(g_qeglobals.d_hwndMain) != hWnd) + BringWindowToTop(hWnd); + + SetFocus( g_qeglobals.d_hwndZ ); + SetCapture( g_qeglobals.d_hwndZ ); + fwKeys = wParam; // key flags + xPos = (short)LOWORD(lParam); // horizontal position of cursor + yPos = (short)HIWORD(lParam); // vertical position of cursor + yPos = (int)rect.bottom - 1 - yPos; + Z_MouseDown (xPos, yPos, fwKeys); + return 0; + + case WM_MBUTTONUP: + case WM_RBUTTONUP: + case WM_LBUTTONUP: + fwKeys = wParam; // key flags + xPos = (short)LOWORD(lParam); // horizontal position of cursor + yPos = (short)HIWORD(lParam); // vertical position of cursor + yPos = (int)rect.bottom - 1 - yPos; + Z_MouseUp (xPos, yPos, fwKeys); + if (! (fwKeys & (MK_LBUTTON|MK_RBUTTON|MK_MBUTTON))) + ReleaseCapture (); + return 0; + + case WM_GETMINMAXINFO: + { + MINMAXINFO *pmmi = (LPMINMAXINFO) lParam; + + pmmi->ptMinTrackSize.x = ZWIN_WIDTH; + return 0; + } + + case WM_MOUSEMOVE: + fwKeys = wParam; // key flags + xPos = (short)LOWORD(lParam); // horizontal position of cursor + yPos = (short)HIWORD(lParam); // vertical position of cursor + yPos = (int)rect.bottom - 1 - yPos; + Z_MouseMoved (xPos, yPos, fwKeys); + return 0; + + case WM_SIZE: + z.width = rect.right; + z.height = rect.bottom; + InvalidateRect( g_qeglobals.d_hwndZ, NULL, false); + return 0; + + case WM_NCCALCSIZE:// don't let windows copy pixels + DefWindowProc (hWnd, uMsg, wParam, lParam); + return WVR_REDRAW; + + case WM_KILLFOCUS: + case WM_SETFOCUS: + SendMessage( hWnd, WM_NCACTIVATE, uMsg == WM_SETFOCUS, 0 ); + return 0; + + case WM_CLOSE: + /* call destroy window to cleanup and go away */ + DestroyWindow (hWnd); + return 0; + } + + return DefWindowProc (hWnd, uMsg, wParam, lParam); +} + + +/* +============== +WZ_Create +============== +*/ +void WZ_Create (HINSTANCE hInstance) +{ + WNDCLASS wc; + memset (&wc, 0, sizeof(wc)); + wc.style = CS_NOCLOSE; + wc.lpfnWndProc = (WNDPROC)WZ_WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = 0; + wc.hCursor = LoadCursor (NULL,IDC_ARROW); + wc.hbrBackground = NULL; + wc.lpszMenuName = NULL; + wc.lpszClassName = Z_WINDOW_CLASS; + + if (!RegisterClass (&wc) ) + Error ("WCam_Register: failed"); + + g_qeglobals.d_hwndZ = CreateWindow (Z_WINDOW_CLASS , + "Z", + QE3_STYLE, + 0,20,ZWIN_WIDTH,screen_height-38, // size + g_qeglobals.d_hwndMain, // parent + 0, // no menu + hInstance, + NULL); + if (!g_qeglobals.d_hwndZ) + Error ("Couldn't create zwindow"); + + LoadWindowState(g_qeglobals.d_hwndZ, "zwindow"); + ShowWindow (g_qeglobals.d_hwndZ, SW_SHOWDEFAULT); +} -- cgit v1.2.3