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

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

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