mirror of
https://github.com/opencv/opencv.git
synced 2025-06-13 04:52:53 +08:00
Cocoa backend: added checks before accessing sliders dictionary
This commit is contained in:
parent
177aef05b6
commit
ee2f8d006f
@ -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,
|
|||||||
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)
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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)
|
|||||||
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)
|
|||||||
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];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user