diff --git a/modules/highgui/include/opencv2/highgui.hpp b/modules/highgui/include/opencv2/highgui.hpp index 2f005da5cf..16ef8c4a9e 100644 --- a/modules/highgui/include/opencv2/highgui.hpp +++ b/modules/highgui/include/opencv2/highgui.hpp @@ -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 diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index f9496f5335..9306f8ef5e 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -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)