diff --git a/dtool/Config.pp b/dtool/Config.pp index 3abec127d9..ce682bb30a 100644 --- a/dtool/Config.pp +++ b/dtool/Config.pp @@ -425,6 +425,11 @@ // suspect a bug in Panda's memory management code. #define USE_DELETED_CHAIN 1 +// Define this if you are building on Windows 7 or better, and you +// want your Panda build to run only on Windows 7 or better, and you +// need to use the Windows touchinput interfaces. +#define HAVE_WIN_TOUCHINPUT + // Define this true to build the low-level native network // implementation. Normally this should be set true. #define WANT_NATIVE_NET 1 diff --git a/dtool/LocalSetup.pp b/dtool/LocalSetup.pp index 825bce2758..df2b4cafbf 100644 --- a/dtool/LocalSetup.pp +++ b/dtool/LocalSetup.pp @@ -717,6 +717,9 @@ $[cdefine __USE_LARGEFILE64] // To activate the DELETED_CHAIN macros. $[cdefine USE_DELETED_CHAIN] +// To build the Windows TOUCHINPUT interfaces (requires Windows 7). +$[cdefine HAVE_WIN_TOUCHINPUT] + // If we are to build the native net interfaces. $[cdefine WANT_NATIVE_NET] diff --git a/makepanda/makepanda.py b/makepanda/makepanda.py index 5821952c55..fe15ca4615 100755 --- a/makepanda/makepanda.py +++ b/makepanda/makepanda.py @@ -91,7 +91,8 @@ PkgListSet(["PYTHON", "DIRECT", # Python support "PANDAFX", # Some distortion special lenses "PANDAPARTICLESYSTEM", # Built in particle system "CONTRIB", # Experimental - "SSE2" # Compiler features + "SSE2", # Compiler features + "TOUCHINPUT", # Touchinput interface (requires Windows 7) ]) CheckPandaSourceTree() @@ -241,6 +242,16 @@ def parseopts(args): except: usage("Invalid setting for OPTIMIZE") + is_win7 = False + if sys.platform.startswith("win"): + if (STRMSPLATFORMVERSION not in ['winserver2003r2', 'win60A']): + platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder") + winver = sys.getwindowsversion() + if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1: + is_win7 = True + if not is_win7: + PkgDisable("TOUCHINPUT") + parseopts(sys.argv[1:]) ######################################################################## @@ -832,14 +843,9 @@ def CompileCxx(obj,src,opts): cmd += "/favor:blend " cmd += "/wd4996 /wd4275 /wd4267 /wd4101 /wd4273 " - # Enables Windows 7 mode if SDK is detected. - # But only if it is Windows 7 (0x601) and not e. g. Vista (0x600) - if (STRMSPLATFORMVERSION not in ['winserver2003r2', 'win60A']): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder") - winver = sys.getwindowsversion() - if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1: - cmd += "/DPANDA_WIN7 /DWINVER=0x601 " - + # Enable Windows 7 interfaces if we need Touchinput. + if PkgSkip("TOUCHINPUT") == 0: + cmd += "/DWINVER=0x601 " cmd += "/Fo" + obj + " /nologo /c" if (not is_64 and PkgSkip("SSE2") == 0): cmd += " /arch:SSE2" @@ -871,14 +877,9 @@ def CompileCxx(obj,src,opts): cmd += "/favor:blend " cmd += "/wd4996 /wd4275 /wd4267 /wd4101 /wd4273 " - # Enables Windows 7 mode if SDK is detected. - # But only if it is Windows 7 (0x601) and not e. g. Vista (0x600) - if (STRMSPLATFORMVERSION not in ['winserver2003r2', 'win60A']): - platsdk = GetRegistryKey("SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1", "InstallationFolder") - winver = sys.getwindowsversion() - if platsdk and os.path.isdir(platsdk) and winver[0] >= 6 and winver[1] >= 1: - cmd += "/DPANDA_WIN7 /DWINVER=0x601 " - + # Enable Windows 7 interfaces if we need Touchinput. + if PkgSkip("TOUCHINPUT") == 0: + cmd += "/DWINVER=0x601 " cmd += "/Fo" + obj + " /c" for x in ipath: cmd += " /I" + x for (opt,dir) in INCDIRECTORIES: @@ -1612,6 +1613,7 @@ DTOOL_CONFIG=[ ("REPORT_OPENSSL_ERRORS", '1', '1'), ("USE_PANDAFILESTREAM", '1', '1'), ("USE_DELETED_CHAIN", '1', '1'), + ("HAVE_WIN_TOUCHINPUT", 'UNDEF', 'UNDEF'), ("HAVE_GL", '1', 'UNDEF'), ("HAVE_GLES", 'UNDEF', 'UNDEF'), ("HAVE_GLES2", 'UNDEF', 'UNDEF'), @@ -1836,6 +1838,9 @@ def WriteConfigSettings(): if (PkgSkip("PYTHON") != 0): dtool_config["HAVE_ROCKET_PYTHON"] = 'UNDEF' + if (PkgSkip("TOUCHINPUT") == 0 and sys.platform.startswith("win")): + dtool_config["HAVE_WIN_TOUCHINPUT"] = '1' + if (GetOptimize() <= 3): dtool_config["HAVE_ROCKET_DEBUGGER"] = '1' diff --git a/panda/src/windisplay/winGraphicsWindow.cxx b/panda/src/windisplay/winGraphicsWindow.cxx index 8fcfea2d8f..5d97d650bf 100644 --- a/panda/src/windisplay/winGraphicsWindow.cxx +++ b/panda/src/windisplay/winGraphicsWindow.cxx @@ -104,7 +104,7 @@ WinGraphicsWindow(GraphicsEngine *engine, GraphicsPipe *pipe, _lalt_down = false; _ralt_down = false; _hparent = NULL; -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT _numTouches = 0; #endif } @@ -515,7 +515,7 @@ open_window() { set_focus(); // Register for Win7 touch events. -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT RegisterTouchWindow(_hWnd, 0); #endif @@ -2072,7 +2072,7 @@ window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { system_changed_properties(properties); break; -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT case WM_TOUCH: _numTouches = LOWORD(wparam); if(_numTouches > MAX_TOUCHES) @@ -2830,7 +2830,7 @@ bool WinGraphicsWindow::supports_window_procs() const{ //////////////////////////////////////////////////////////////////// bool WinGraphicsWindow:: is_touch_event(GraphicsWindowProcCallbackData* callbackData){ -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT return callbackData->get_msg() == WM_TOUCH; #else return false; @@ -2845,7 +2845,7 @@ is_touch_event(GraphicsWindowProcCallbackData* callbackData){ //////////////////////////////////////////////////////////////////// int WinGraphicsWindow:: get_num_touches(){ -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT return _numTouches; #else return 0; @@ -2860,7 +2860,7 @@ get_num_touches(){ //////////////////////////////////////////////////////////////////// TouchInfo WinGraphicsWindow:: get_touch_info(int index){ -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT TOUCHINPUT ti = _touches[index]; POINT point; point.x = TOUCH_COORD_TO_PIXEL(ti.x); diff --git a/panda/src/windisplay/winGraphicsWindow.h b/panda/src/windisplay/winGraphicsWindow.h index c36ca847b1..f3d0155c1c 100644 --- a/panda/src/windisplay/winGraphicsWindow.h +++ b/panda/src/windisplay/winGraphicsWindow.h @@ -181,7 +181,7 @@ private: typedef pset WinProcClasses; WinProcClasses _window_proc_classes; -#ifdef PANDA_WIN7 +#ifdef HAVE_WIN_TOUCHINPUT UINT _numTouches; TOUCHINPUT _touches[MAX_TOUCHES]; #endif