mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge branch 4.x
This commit is contained in:
@@ -34,7 +34,20 @@
|
||||
#include <opencv2\highgui\highgui_winrt.hpp>
|
||||
#include "window_winrt_bridge.hpp"
|
||||
|
||||
#define CV_WINRT_NO_GUI_ERROR( funcname ) CV_Error(cv::Error::StsNotImplemented, "The function is not implemented")
|
||||
#define CV_WINRT_NO_GUI_ERROR( funcname ) \
|
||||
{ \
|
||||
cvError( cv::Error::StsNotImplemented, funcname, \
|
||||
"The function is not implemented. ", \
|
||||
__FILE__, __LINE__ ); \
|
||||
}
|
||||
|
||||
#ifdef CV_ERROR
|
||||
#undef CV_ERROR
|
||||
#define CV_ERROR( Code, Msg ) \
|
||||
{ \
|
||||
cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ ); \
|
||||
};
|
||||
#endif
|
||||
|
||||
/********************************** WinRT Specific API Implementation ******************************************/
|
||||
|
||||
@@ -70,6 +83,8 @@ void showImageImpl(const char* name, InputArray arr)
|
||||
|
||||
int namedWindowImpl(const char* name, int flags)
|
||||
{
|
||||
CV_UNUSED(flags);
|
||||
|
||||
if (!name)
|
||||
CV_Error(cv::Error::StsNullPtr, "NULL name");
|
||||
|
||||
@@ -94,8 +109,6 @@ void destroyAllWindowsImpl()
|
||||
int createTrackbar2Impl(const char* trackbar_name, const char* window_name,
|
||||
int* val, int count, CvTrackbarCallback2 on_notify, void* userdata)
|
||||
{
|
||||
int pos = 0;
|
||||
|
||||
if (!window_name || !trackbar_name)
|
||||
CV_Error(cv::Error::StsNullPtr, "NULL window or trackbar name");
|
||||
|
||||
@@ -167,7 +180,7 @@ int getTrackbarPosImpl(const char* trackbar_name, const char* window_name)
|
||||
CvTrackbar* trackbar = HighguiBridge::getInstance().findTrackbarByName(trackbar_name, window_name);
|
||||
|
||||
if (trackbar)
|
||||
pos = trackbar->getPosition();
|
||||
pos = (int)trackbar->getPosition();
|
||||
|
||||
return pos;
|
||||
}
|
||||
@@ -179,11 +192,11 @@ int waitKeyImpl(int delay)
|
||||
CV_WINRT_NO_GUI_ERROR("waitKeyImpl");
|
||||
|
||||
// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms724411(v=vs.85).aspx
|
||||
int time0 = GetTickCount64();
|
||||
//int time0 = GetTickCount64();
|
||||
|
||||
for (;;)
|
||||
{
|
||||
CvWindow* window;
|
||||
// CvWindow* window;
|
||||
|
||||
if (delay <= 0)
|
||||
{
|
||||
@@ -194,6 +207,7 @@ int waitKeyImpl(int delay)
|
||||
|
||||
void setMouseCallbackImpl(const char* window_name, CvMouseCallback on_mouse, void* param)
|
||||
{
|
||||
CV_UNUSED(on_mouse); CV_UNUSED(param);
|
||||
CV_WINRT_NO_GUI_ERROR("setMouseCallbackImpl");
|
||||
|
||||
if (!window_name)
|
||||
@@ -210,19 +224,23 @@ void setMouseCallbackImpl(const char* window_name, CvMouseCallback on_mouse, voi
|
||||
|
||||
void moveWindowImpl(const char* name, int x, int y)
|
||||
{
|
||||
CV_UNUSED(name); CV_UNUSED(x); CV_UNUSED(y);
|
||||
CV_WINRT_NO_GUI_ERROR("moveWindowImpl");
|
||||
}
|
||||
|
||||
void resizeWindowImpl(const char* name, int width, int height)
|
||||
{
|
||||
CV_UNUSED(name); CV_UNUSED(width); CV_UNUSED(height);
|
||||
CV_WINRT_NO_GUI_ERROR("resizeWindowImpl");
|
||||
}
|
||||
|
||||
void cvSetModeWindow_WinRT(const char* name, double prop_value) {
|
||||
CV_UNUSED(name); CV_UNUSED(prop_value);
|
||||
CV_WINRT_NO_GUI_ERROR("cvSetModeWindow");
|
||||
}
|
||||
|
||||
double cvGetModeWindow_WinRT(const char* name) {
|
||||
CV_UNUSED(name);
|
||||
CV_WINRT_NO_GUI_ERROR("cvGetModeWindow");
|
||||
return cv::Error::StsNotImplemented;
|
||||
}
|
||||
|
||||
@@ -64,9 +64,9 @@ HighguiBridge& HighguiBridge::getInstance()
|
||||
return instance;
|
||||
}
|
||||
|
||||
void HighguiBridge::setContainer(Windows::UI::Xaml::Controls::Panel^ container)
|
||||
void HighguiBridge::setContainer(Windows::UI::Xaml::Controls::Panel^ container_)
|
||||
{
|
||||
this->container = container;
|
||||
this->container = container_;
|
||||
}
|
||||
|
||||
CvWindow* HighguiBridge::findWindowByName(cv::String name)
|
||||
@@ -190,9 +190,9 @@ void CvTrackbar::setMinPosition(double pos)
|
||||
slider->Minimum = pos;
|
||||
}
|
||||
|
||||
void CvTrackbar::setSlider(Slider^ slider) {
|
||||
if (slider)
|
||||
this->slider = slider;
|
||||
void CvTrackbar::setSlider(Slider^ slider_) {
|
||||
if (slider_)
|
||||
this->slider = slider_;
|
||||
}
|
||||
|
||||
double CvTrackbar::getPosition()
|
||||
@@ -219,6 +219,7 @@ Slider^ CvTrackbar::getSlider()
|
||||
|
||||
CvWindow::CvWindow(cv::String name, int flags) : name(name)
|
||||
{
|
||||
CV_UNUSED(flags);
|
||||
this->page = (Page^)Windows::UI::Xaml::Markup::XamlReader::Load(const_cast<Platform::String^>(markupContent));
|
||||
this->sliderMap = new std::map<cv::String, CvTrackbar*>();
|
||||
|
||||
@@ -246,14 +247,15 @@ CvWindow::CvWindow(cv::String name, int flags) : name(name)
|
||||
|
||||
CvWindow::~CvWindow() {}
|
||||
|
||||
void CvWindow::createSlider(cv::String name, int* val, int count, CvTrackbarCallback2 on_notify, void* userdata)
|
||||
void CvWindow::createSlider(cv::String name_, int* val, int count, CvTrackbarCallback2 on_notify, void* userdata)
|
||||
{
|
||||
CvTrackbar* trackbar = findTrackbarByName(name);
|
||||
CV_UNUSED(userdata);
|
||||
CvTrackbar* trackbar = findTrackbarByName(name_);
|
||||
|
||||
// Creating slider if name is new or reusing the existing one
|
||||
Slider^ slider = !trackbar ? ref new Slider() : trackbar->getSlider();
|
||||
|
||||
slider->Header = HighguiBridge::getInstance().convertString(name);
|
||||
slider->Header = HighguiBridge::getInstance().convertString(name_);
|
||||
|
||||
// Making slider the same size as the image control or setting minimal size.
|
||||
// This is added to cover potential edge cases because:
|
||||
@@ -282,26 +284,26 @@ void CvWindow::createSlider(cv::String name, int* val, int count, CvTrackbarCall
|
||||
if (!sliderPanel) return;
|
||||
|
||||
// Adding slider to the list for current window
|
||||
CvTrackbar* trackbar = new CvTrackbar(name, slider, this);
|
||||
trackbar->callback = on_notify;
|
||||
CvTrackbar* trackbar_ = new CvTrackbar(name_, slider, this);
|
||||
trackbar_->callback = on_notify;
|
||||
slider->ValueChanged +=
|
||||
ref new Controls::Primitives::RangeBaseValueChangedEventHandler(
|
||||
[=](Platform::Object^ sender,
|
||||
Windows::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs^ e)
|
||||
{
|
||||
Slider^ slider = (Slider^)sender;
|
||||
trackbar->callback(slider->Value, nullptr);
|
||||
trackbar_->callback((int)slider->Value, nullptr);
|
||||
});
|
||||
this->sliderMap->insert(std::pair<cv::String, CvTrackbar*>(name, trackbar));
|
||||
this->sliderMap->insert(std::pair<cv::String, CvTrackbar*>(name_, trackbar_));
|
||||
|
||||
// Adding slider to the window
|
||||
sliderPanel->Children->Append(slider);
|
||||
}
|
||||
}
|
||||
|
||||
CvTrackbar* CvWindow::findTrackbarByName(cv::String name)
|
||||
CvTrackbar* CvWindow::findTrackbarByName(cv::String name_)
|
||||
{
|
||||
auto search = sliderMap->find(name);
|
||||
auto search = sliderMap->find(name_);
|
||||
if (search != sliderMap->end()) {
|
||||
return search->second;
|
||||
}
|
||||
@@ -343,12 +345,12 @@ Page^ CvWindow::getPage()
|
||||
}
|
||||
|
||||
//TODO: prototype, not in use yet
|
||||
void CvWindow::createButton(cv::String name)
|
||||
void CvWindow::createButton(cv::String name_)
|
||||
{
|
||||
if (!buttonPanel) return;
|
||||
|
||||
Button^ b = ref new Button();
|
||||
b->Content = HighguiBridge::getInstance().convertString(name);
|
||||
b->Content = HighguiBridge::getInstance().convertString(name_);
|
||||
b->Width = 260;
|
||||
b->Height = 80;
|
||||
b->Click += ref new Windows::UI::Xaml::RoutedEventHandler(
|
||||
|
||||
@@ -113,7 +113,6 @@ private:
|
||||
|
||||
// Meyers singleton
|
||||
HighguiBridge(const HighguiBridge &);
|
||||
void operator=(HighguiBridge &);
|
||||
HighguiBridge() {
|
||||
windowsMap = new std::map<cv::String, CvWindow*>();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user