Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

highgui: Trackbar Improvements #3449

Merged
merged 1 commit into from Dec 15, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions modules/highgui/include/opencv2/highgui/highgui_c.h
Expand Up @@ -158,6 +158,7 @@ CVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name
/* retrieve or set trackbar position */
CVAPI(int) cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
CVAPI(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );
CVAPI(void) cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval);

enum
{
Expand Down
5 changes: 5 additions & 0 deletions modules/highgui/src/window.cpp
Expand Up @@ -545,6 +545,11 @@ CV_IMPL void cvSetTrackbarPos( const char*, const char*, int )
CV_NO_GUI_ERROR( "cvSetTrackbarPos" );
}

CV_IMPL void cvSetTrackbarMax(const char*, const char*, int)
{
CV_NO_GUI_ERROR( "cvSetTrackbarMax" );
}

CV_IMPL void* cvGetWindowHandle( const char* )
{
CV_NO_GUI_ERROR( "cvGetWindowHandle" );
Expand Down
13 changes: 13 additions & 0 deletions modules/highgui/src/window_QT.cpp
Expand Up @@ -643,6 +643,19 @@ CV_IMPL void cvSetTrackbarPos(const char* name_bar, const char* window_name, int
}


CV_IMPL void cvSetTrackbarMax(const char* name_bar, const char* window_name, int maxval)
{
if (maxval >= 0)
{
QPointer<CvTrackbar> t = icvFindTrackBarByName(name_bar, window_name);
if (t)
{
t->slider->setMaximum(maxval);
}
}
}


/* assign callback for mouse events */
CV_IMPL void cvSetMouseCallback(const char* window_name, CvMouseCallback on_mouse, void* param)
{
Expand Down
31 changes: 31 additions & 0 deletions modules/highgui/src/window_cocoa.mm
Expand Up @@ -61,6 +61,7 @@ CV_IMPL int cvCreateTrackbar2(const char* trackbar_name,const char* window_name,
CV_IMPL void cvSetMouseCallback( const char* name, CvMouseCallback function, void* info) {}
CV_IMPL int cvGetTrackbarPos( const char* trackbar_name, const char* window_name ) {return 0;}
CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name, int pos) {}
CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval) {}
CV_IMPL void* cvGetWindowHandle( const char* name ) {return NULL;}
CV_IMPL const char* cvGetWindowName( void* window_handle ) {return NULL;}
CV_IMPL int cvNamedWindow( const char* name, int flags ) {return 0; }
Expand Down Expand Up @@ -424,6 +425,36 @@ CV_IMPL void cvSetTrackbarPos(const char* trackbar_name, const char* window_name
__END__;
}

CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval)
{
CV_FUNCNAME("cvSetTrackbarPos");

CVWindow *window = nil;
CVSlider *slider = nil;
NSAutoreleasePool* localpool5 = nil;

__BEGIN__;
//cout << "cvSetTrackbarPos" << endl;
if(trackbar_name == NULL || window_name == NULL)
CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name" );

if (localpool5 != nil) [localpool5 drain];
localpool5 = [[NSAutoreleasePool alloc] init];

window = cvGetWindow(window_name);
if(window) {
slider = [[window sliders] valueForKey:[NSString stringWithFormat:@"%s", trackbar_name]];
if(slider) {
if(maxval >= 0) {
[[slider slider] setMaxValue:maxval];
}
}
}
[localpool5 drain];

__END__;
}

CV_IMPL void* cvGetWindowHandle( const char* name )
{
//cout << "cvGetWindowHandle" << endl;
Expand Down
37 changes: 37 additions & 0 deletions modules/highgui/src/window_gtk.cpp
Expand Up @@ -1381,6 +1381,43 @@ CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_nam
}


CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval)
{
CV_FUNCNAME("cvSetTrackbarMax");

__BEGIN__;

if (maxval >= 0)
{
CvWindow* window = 0;
CvTrackbar* trackbar = 0;

if (trackbar_name == 0 || window_name == 0)
{
CV_ERROR( CV_StsNullPtr, "NULL trackbar or window name");
}

window = icvFindWindowByName( window_name );
if (window)
{
trackbar = icvFindTrackbarByName(window, trackbar_name);
if (trackbar)
{
trackbar->maxval = maxval;

CV_LOCK_MUTEX();

gtk_range_set_range(GTK_RANGE(trackbar->widget), 0, trackbar->maxval);

CV_UNLOCK_MUTEX();
}
}
}

__END__;
}


CV_IMPL void* cvGetWindowHandle( const char* window_name )
{
void* widget = 0;
Expand Down
46 changes: 42 additions & 4 deletions modules/highgui/src/window_w32.cpp
Expand Up @@ -1827,7 +1827,7 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
if( !window_name || !trackbar_name )
CV_ERROR( CV_StsNullPtr, "NULL window or trackbar name" );

if( count <= 0 )
if( count < 0 )
CV_ERROR( CV_StsOutOfRange, "Bad trackbar maximal value" );

window = icvFindWindowByName(window_name);
Expand All @@ -1848,9 +1848,14 @@ icvCreateTrackbar( const char* trackbar_name, const char* window_name,
{
const int default_height = 30;

window->toolbar.toolbar = CreateToolbarEx(
window->frame, WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE,
1, 0, 0, 0, 0, 0, 16, 20, 16, 16, sizeof(TBBUTTON));
// CreateToolbarEx is deprecated and forces linking against Comctl32.lib.
window->toolbar.toolbar = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
0, 0, 0, 0,
window->frame, NULL, GetModuleHandle(NULL), NULL);
// CreateToolbarEx automatically sends this but CreateWindowEx doesn't.
SendMessage(window->toolbar.toolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);

GetClientRect(window->frame, &rect);
MoveWindow( window->toolbar.toolbar, 0, 0,
rect.right - rect.left, default_height, TRUE);
Expand Down Expand Up @@ -2098,6 +2103,39 @@ CV_IMPL void cvSetTrackbarPos( const char* trackbar_name, const char* window_nam
}


CV_IMPL void cvSetTrackbarMax(const char* trackbar_name, const char* window_name, int maxval)
{
CV_FUNCNAME( "cvSetTrackbarMax" );

__BEGIN__;

if (maxval >= 0)
{
CvWindow* window = 0;
CvTrackbar* trackbar = 0;
if (trackbar_name == 0 || window_name == 0)
{
CV_ERROR(CV_StsNullPtr, "NULL trackbar or window name");
}

window = icvFindWindowByName(window_name);
if (window)
{
trackbar = icvFindTrackbarByName(window, trackbar_name);
if (trackbar)
{
// The position will be min(pos, maxval).
trackbar->maxval = maxval;
SendMessage(trackbar->hwnd, TBM_SETRANGEMAX, (WPARAM)TRUE, (LPARAM)maxval);
}
}
}

__END__;
}



CV_IMPL void* cvGetWindowHandle( const char* window_name )
{
void* hwnd = 0;
Expand Down