highgui: change waitKey() default behaviour
authorAlexander Alekhin <alexander.alekhin@intel.com>
Thu, 15 Dec 2016 11:17:38 +0000 (14:17 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Thu, 15 Dec 2016 11:17:38 +0000 (14:17 +0300)
The old behaviour is available via waitKeyEx() call or
via setting of OPENCV_LEGACY_WAITKEY environment variable

modules/highgui/include/opencv2/highgui.hpp
modules/highgui/src/window.cpp

index 2f005da..16ef8c4 100644 (file)
@@ -320,6 +320,15 @@ CV_EXPORTS_W void destroyAllWindows();
 
 CV_EXPORTS_W int startWindowThread();
 
+/** @brief Similar to #waitKey, but returns full key code.
+
+@note
+
+Key code is implementation specific and depends on used backend: QT/GTK/Win32/etc
+
+*/
+CV_EXPORTS_W int waitKeyEx(int delay = 0);
+
 /** @brief Waits for a pressed key.
 
 The function waitKey waits for a key event infinitely (when \f$\texttt{delay}\leq 0\f$ ) or for delay
index f9496f5..9306f8e 100644 (file)
@@ -201,11 +201,26 @@ double cv::getWindowProperty(const String& winname, int prop_id)
     return cvGetWindowProperty(winname.c_str(), prop_id);
 }
 
-int cv::waitKey(int delay)
+int cv::waitKeyEx(int delay)
 {
     return cvWaitKey(delay);
 }
 
+int cv::waitKey(int delay)
+{
+    int code = waitKeyEx(delay);
+#ifndef HAVE_WINRT
+    static int use_legacy = -1;
+    if (use_legacy < 0)
+    {
+        use_legacy = getenv("OPENCV_LEGACY_WAITKEY") != NULL ? 1 : 0;
+    }
+    if (use_legacy > 0)
+        return code;
+#endif
+    return code & 0xff;
+}
+
 int cv::createTrackbar(const String& trackbarName, const String& winName,
                    int* value, int count, TrackbarCallback callback,
                    void* userdata)