提交 77f54e0f 编写于 作者: V Vadim Pisarevsky

Merge pull request #6161 from mshabunin:fix-mac-sliders

...@@ -49,6 +49,10 @@ ...@@ -49,6 +49,10 @@
# error utility.hpp header must be compiled as C++ # error utility.hpp header must be compiled as C++
#endif #endif
#if defined(check)
# warning Detected Apple 'check' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
#endif
#include "opencv2/core.hpp" #include "opencv2/core.hpp"
namespace cv namespace cv
......
...@@ -230,8 +230,10 @@ CV_IMPL void cvShowImage( const char* name, const CvArr* arr) ...@@ -230,8 +230,10 @@ CV_IMPL void cvShowImage( const char* name, const CvArr* arr)
//Set new view size considering sliders (reserve height and min width) //Set new view size considering sliders (reserve height and min width)
NSRect vrectNew = vrectOld; NSRect vrectNew = vrectOld;
int slider_height = 0; int slider_height = 0;
for(NSString *key in [window sliders]) { if ([window respondsToSelector:@selector(sliders)]) {
slider_height += [[[window sliders] valueForKey:key] frame].size.height; for(NSString *key in [window sliders]) {
slider_height += [[[window sliders] valueForKey:key] frame].size.height;
}
} }
vrectNew.size.height = [[[window contentView] image] size].height + slider_height; vrectNew.size.height = [[[window contentView] image] size].height + slider_height;
vrectNew.size.width = std::max<int>([[[window contentView] image] size].width, MIN_SLIDER_WIDTH); vrectNew.size.width = std::max<int>([[[window contentView] image] size].width, MIN_SLIDER_WIDTH);
...@@ -331,9 +333,12 @@ CV_IMPL int cvCreateTrackbar2(const char* trackbar_name, ...@@ -331,9 +333,12 @@ CV_IMPL int cvCreateTrackbar2(const char* trackbar_name,
NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init];
int res = cvCreateTrackbar(trackbar_name, window_name, val, count, NULL); int res = cvCreateTrackbar(trackbar_name, window_name, val, count, NULL);
if(res) { if(res) {
CVSlider *slider = [[cvGetWindow(window_name) sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; CVWindow *window = cvGetWindow(window_name);
[slider setCallback2:on_notify2]; if (window && [window respondsToSelector:@selector(sliders)]) {
[slider setUserData:userdata]; CVSlider *slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
[slider setCallback2:on_notify2];
[slider setUserData:userdata];
}
} }
[localpool drain]; [localpool drain];
return res; return res;
...@@ -383,7 +388,7 @@ cvSetMouseCallback( const char* name, CvMouseCallback function, void* info) ...@@ -383,7 +388,7 @@ cvSetMouseCallback( const char* name, CvMouseCallback function, void* info)
localpool4 = [[NSAutoreleasePool alloc] init]; localpool4 = [[NSAutoreleasePool alloc] init];
window = cvGetWindow(window_name); window = cvGetWindow(window_name);
if(window) { if(window && [window respondsToSelector:@selector(sliders)]) {
CVSlider *slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; CVSlider *slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
if(slider) { if(slider) {
pos = [[slider slider] intValue]; pos = [[slider slider] intValue];
...@@ -414,7 +419,7 @@ CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name ...@@ -414,7 +419,7 @@ CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name
localpool5 = [[NSAutoreleasePool alloc] init]; localpool5 = [[NSAutoreleasePool alloc] init];
window = cvGetWindow(window_name); window = cvGetWindow(window_name);
if(window) { if(window && [window respondsToSelector:@selector(sliders)]) {
slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
if(slider) { if(slider) {
[[slider slider] setIntValue:pos]; [[slider slider] setIntValue:pos];
...@@ -442,7 +447,7 @@ CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name ...@@ -442,7 +447,7 @@ CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name
localpool5 = [[NSAutoreleasePool alloc] init]; localpool5 = [[NSAutoreleasePool alloc] init];
window = cvGetWindow(window_name); window = cvGetWindow(window_name);
if(window) { if(window && [window respondsToSelector:@selector(sliders)]) {
slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
if(slider) { if(slider) {
if(maxval >= 0) { if(maxval >= 0) {
...@@ -473,7 +478,7 @@ CV_IMPL void cvSetTrackbarMin(const char* trackbar_name, const char* window_name ...@@ -473,7 +478,7 @@ CV_IMPL void cvSetTrackbarMin(const char* trackbar_name, const char* window_name
localpool5 = [[NSAutoreleasePool alloc] init]; localpool5 = [[NSAutoreleasePool alloc] init];
window = cvGetWindow(window_name); window = cvGetWindow(window_name);
if(window) { if(window && [window respondsToSelector:@selector(sliders)]) {
slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]]; slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
if(slider) { if(slider) {
if(minval >= 0) { if(minval >= 0) {
...@@ -709,9 +714,11 @@ void cv::setWindowTitle(const String& winname, const String& title) ...@@ -709,9 +714,11 @@ void cv::setWindowTitle(const String& winname, const String& title)
double viewHeight = [self contentView].frame.size.height; double viewHeight = [self contentView].frame.size.height;
double viewWidth = [self contentView].frame.size.width; double viewWidth = [self contentView].frame.size.width;
CVWindow *window = (CVWindow *)[[self contentView] window]; CVWindow *window = (CVWindow *)[[self contentView] window];
for(NSString *key in [window sliders]) { if ([window respondsToSelector:@selector(sliders)]) {
NSSlider *slider = [[window sliders] valueForKey:key]; for(NSString *key in [window sliders]) {
viewHeight = std::min(viewHeight, (double)([slider frame].origin.y)); NSSlider *slider = [[window sliders] valueForKey:key];
viewHeight = std::min(viewHeight, (double)([slider frame].origin.y));
}
} }
viewHeight -= TOP_BORDER; viewHeight -= TOP_BORDER;
mp.y = viewHeight - mp.y; mp.y = viewHeight - mp.y;
...@@ -929,13 +936,15 @@ void cv::setWindowTitle(const String& winname, const String& title) ...@@ -929,13 +936,15 @@ void cv::setWindowTitle(const String& winname, const String& title)
int height = size.height; int height = size.height;
CVWindow *cvwindow = (CVWindow *)[self window]; CVWindow *cvwindow = (CVWindow *)[self window];
for(NSString *key in [cvwindow sliders]) { if ([cvwindow respondsToSelector:@selector(sliders)]) {
NSSlider *slider = [[cvwindow sliders] valueForKey:key]; for(NSString *key in [cvwindow sliders]) {
NSRect r = [slider frame]; NSSlider *slider = [[cvwindow sliders] valueForKey:key];
r.origin.y = height - r.size.height; NSRect r = [slider frame];
r.size.width = [[cvwindow contentView] frame].size.width; r.origin.y = height - r.size.height;
[slider setFrame:r]; r.size.width = [[cvwindow contentView] frame].size.width;
height -= r.size.height; [slider setFrame:r];
height -= r.size.height;
}
} }
[localpool drain]; [localpool drain];
} }
......
...@@ -43,6 +43,10 @@ ...@@ -43,6 +43,10 @@
#ifndef __OPENCV_STITCHING_BLENDERS_HPP__ #ifndef __OPENCV_STITCHING_BLENDERS_HPP__
#define __OPENCV_STITCHING_BLENDERS_HPP__ #define __OPENCV_STITCHING_BLENDERS_HPP__
#if defined(NO)
# warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
#endif
#include "opencv2/core.hpp" #include "opencv2/core.hpp"
namespace cv { namespace cv {
......
...@@ -43,6 +43,10 @@ ...@@ -43,6 +43,10 @@
#ifndef __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__ #ifndef __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__
#define __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__ #define __OPENCV_STITCHING_EXPOSURE_COMPENSATE_HPP__
#if defined(NO)
# warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
#endif
#include "opencv2/core.hpp" #include "opencv2/core.hpp"
namespace cv { namespace cv {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册