From: Andrey Kamaev Date: Mon, 17 Nov 2014 23:27:02 +0000 (+0300) Subject: Add cv::setWindowTitle to highgui X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~2825^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f4ba8b13c7f94693ce8b0a1b9d45499449536862;p=platform%2Fupstream%2Fopencv.git Add cv::setWindowTitle to highgui --- diff --git a/modules/highgui/include/opencv2/highgui.hpp b/modules/highgui/include/opencv2/highgui.hpp index aef9105..41b8cd8 100644 --- a/modules/highgui/include/opencv2/highgui.hpp +++ b/modules/highgui/include/opencv2/highgui.hpp @@ -136,6 +136,8 @@ CV_EXPORTS_W void moveWindow(const String& winname, int x, int y); CV_EXPORTS_W void setWindowProperty(const String& winname, int prop_id, double prop_value); +CV_EXPORTS_W void setWindowTitle(const String& winname, const String& title); + CV_EXPORTS_W double getWindowProperty(const String& winname, int prop_id); //! assigns callback for mouse events diff --git a/modules/highgui/src/window.cpp b/modules/highgui/src/window.cpp index 03ff988..e3c997c 100644 --- a/modules/highgui/src/window.cpp +++ b/modules/highgui/src/window.cpp @@ -379,7 +379,8 @@ CV_IMPL void cvUpdateWindow(const char*) cv::QtFont cv::fontQt(const String& nameFont, int pointSize, Scalar color, int weight, int style, int /*spacing*/) { CvFont f = cvFontQt(nameFont.c_str(), pointSize,color,weight, style); - return *(cv::QtFont*)(&f); + void* pf = &f; // to suppress strict-aliasing + return *(cv::QtFont*)pf; } void cv::addText( const Mat& img, const String& text, Point org, const QtFont& font) @@ -490,6 +491,12 @@ int cv::createButton(const String&, ButtonCallback, void*, int , bool ) // version with a more capable one without a need to recompile dependent // applications or libraries. +void cv::setWindowTitle(const String&, const String&) +{ + CV_Error(Error::StsNotImplemented, "The function is not implemented. " + "Rebuild the library with Windows, GTK+ 2.x or Carbon support. " + "If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script"); +} #define CV_NO_GUI_ERROR(funcname) \ cvError( CV_StsError, funcname, \ diff --git a/modules/highgui/src/window_QT.cpp b/modules/highgui/src/window_QT.cpp index f67c2f6..fc94ded 100644 --- a/modules/highgui/src/window_QT.cpp +++ b/modules/highgui/src/window_QT.cpp @@ -181,6 +181,18 @@ void cvSetPropWindow_QT(const char* name,double prop_value) Q_ARG(double, prop_value)); } +void cv::setWindowTitle(const String& winname, const String& title) +{ + if (!guiMainThread) + CV_Error(Error::StsNullPtr, "NULL guiReceiver (please create a window)"); + + QMetaObject::invokeMethod(guiMainThread, + "setWindowTitle", + autoBlockingConnection(), + Q_ARG(QString, QString(winname.c_str())), + Q_ARG(QString, QString(title.c_str()))); +} + void cvSetModeWindow_QT(const char* name, double prop_value) { @@ -371,7 +383,7 @@ static CvWindow* icvFindWindowByName(QString name) if (temp->type == type_CvWindow) { CvWindow* w = (CvWindow*) temp; - if (w->windowTitle() == name) + if (w->objectName() == name) { window = w; break; @@ -527,7 +539,7 @@ CV_IMPL const char* cvGetWindowName(void* window_handle) if( !window_handle ) CV_Error( CV_StsNullPtr, "NULL window handler" ); - return ((CvWindow*)window_handle)->windowTitle().toLatin1().data(); + return ((CvWindow*)window_handle)->objectName().toLatin1().data(); } @@ -871,6 +883,22 @@ void GuiReceiver::setPropWindow(QString name, double arg2) w->setPropWindow(flags); } +void GuiReceiver::setWindowTitle(QString name, QString title) +{ + QPointer w = icvFindWindowByName(name); + + if (!w) + { + cvNamedWindow(name.toLatin1().data()); + w = icvFindWindowByName(name); + } + + if (!w) + return; + + w->setWindowTitle(title); +} + double GuiReceiver::isFullScreen(QString name) { @@ -1494,7 +1522,7 @@ void CvWinProperties::showEvent(QShowEvent* evnt) //no value pos was saved so we let Qt move the window in the middle of its parent (event ignored). //then hide will save the last position and thus, we want to retreive it (event accepted). QPoint mypos(-1, -1); - QSettings settings("OpenCV2", windowTitle()); + QSettings settings("OpenCV2", objectName()); mypos = settings.value("pos", mypos).toPoint(); if (mypos.x() >= 0) @@ -1511,7 +1539,7 @@ void CvWinProperties::showEvent(QShowEvent* evnt) void CvWinProperties::hideEvent(QHideEvent* evnt) { - QSettings settings("OpenCV2", windowTitle()); + QSettings settings("OpenCV2", objectName()); settings.setValue("pos", pos()); //there is an offset of 6 pixels (so the window's position is wrong -- why ?) evnt->accept(); } @@ -1520,7 +1548,7 @@ void CvWinProperties::hideEvent(QHideEvent* evnt) CvWinProperties::~CvWinProperties() { //clear the setting pos - QSettings settings("OpenCV2", windowTitle()); + QSettings settings("OpenCV2", objectName()); settings.remove("pos"); } @@ -1540,9 +1568,9 @@ CvWindow::CvWindow(QString name, int arg2) //setAttribute(Qt::WA_DeleteOnClose); //in other case, does not release memory setContentsMargins(0, 0, 0, 0); setWindowTitle(name); - setObjectName(name); + setObjectName(name); - setFocus( Qt::PopupFocusReason ); //#1695 arrow keys are not received without the explicit focus + setFocus( Qt::PopupFocusReason ); //#1695 arrow keys are not received without the explicit focus resize(400, 300); setMinimumSize(1, 1); @@ -1702,7 +1730,6 @@ void CvWindow::setPropWindow(int flags) } } - void CvWindow::toggleFullScreen(int flags) { if (isFullScreen() && flags == CV_WINDOW_NORMAL) diff --git a/modules/highgui/src/window_QT.h b/modules/highgui/src/window_QT.h index a96a8c6..20cd414 100644 --- a/modules/highgui/src/window_QT.h +++ b/modules/highgui/src/window_QT.h @@ -132,6 +132,7 @@ public slots: double isFullScreen(QString name); double getPropWindow(QString name); void setPropWindow(QString name, double flags ); + void setWindowTitle(QString name, QString title); double getRatioWindow(QString name); void setRatioWindow(QString name, double arg2 ); void saveWindowParameters(QString name); diff --git a/modules/highgui/src/window_carbon.cpp b/modules/highgui/src/window_carbon.cpp index 3d092e7..93d9e4f 100644 --- a/modules/highgui/src/window_carbon.cpp +++ b/modules/highgui/src/window_carbon.cpp @@ -833,6 +833,23 @@ void cvSetModeWindow_CARBON( const char* name, double prop_value)//Yannick Verdi __END__; } +void cv::setWindowTitle(const String& winname, const String& title) +{ + CvWindow* window = icvFindWindowByName(winname.c_str()); + + if (!window) + { + namedWindow(winname); + window = icvFindWindowByName(winname.c_str()); + } + + if (!window) + CV_Error(Error::StsNullPtr, "NULL window"); + + if (noErr != SetWindowTitleWithCFString(window->window, CFStringCreateWithCString(NULL, title.c_str(), kCFStringEncodingASCII))) + CV_Error_(Error::StsError, ("Failed to set \"%s\" window title to \"%s\"", winname.c_str(), title.c_str())); +} + CV_IMPL int cvNamedWindow( const char* name, int flags ) { int result = 0; diff --git a/modules/highgui/src/window_cocoa.mm b/modules/highgui/src/window_cocoa.mm index fca6ff9..977d619 100644 --- a/modules/highgui/src/window_cocoa.mm +++ b/modules/highgui/src/window_cocoa.mm @@ -603,6 +603,27 @@ void cvSetModeWindow_COCOA( const char* name, double prop_value ) __END__; } +void cv::setWindowTitle(const String& winname, const String& title) +{ + CVWindow *window = cvGetWindow(winname.c_str()); + + if (window == NULL) + { + namedWindow(winname); + window = cvGetWindow(winname.c_str()); + } + + if (window == NULL) + CV_Error(Error::StsNullPtr, "NULL window"); + + NSAutoreleasePool* localpool = [[NSAutoreleasePool alloc] init]; + + NSString *windowTitle = [NSString stringWithFormat:@"%s", title.c_str()]; + [window setTitle:windowTitle]; + + [localpool drain]; +} + @implementation CVWindow @synthesize mouseCallback; diff --git a/modules/highgui/src/window_gtk.cpp b/modules/highgui/src/window_gtk.cpp index 0d53276..4b916e6 100644 --- a/modules/highgui/src/window_gtk.cpp +++ b/modules/highgui/src/window_gtk.cpp @@ -732,6 +732,23 @@ void cvSetModeWindow_GTK( const char* name, double prop_value)//Yannick Verdie __END__; } +void cv::setWindowTitle(const String& winname, const String& title) +{ + CvWindow* window = icvFindWindowByName(winname.c_str()); + + if (!window) + { + namedWindow(winname); + window = icvFindWindowByName(winname.c_str()); + } + + if (!window) + CV_Error(Error::StsNullPtr, "NULL window"); + + CV_LOCK_MUTEX(); + gtk_window_set_title(GTK_WINDOW(window->frame), title.c_str()); + CV_UNLOCK_MUTEX(); +} double cvGetPropWindowAutoSize_GTK(const char* name) { diff --git a/modules/highgui/src/window_w32.cpp b/modules/highgui/src/window_w32.cpp index bcf1bae..8e8c766 100644 --- a/modules/highgui/src/window_w32.cpp +++ b/modules/highgui/src/window_w32.cpp @@ -483,6 +483,23 @@ void cvSetModeWindow_W32( const char* name, double prop_value)//Yannick Verdie __END__; } +void cv::setWindowTitle(const String& winname, const String& title) +{ + CvWindow* window = icvFindWindowByName(winname.c_str()); + + if (!window) + { + namedWindow(winname); + window = icvFindWindowByName(winname.c_str()); + } + + if (!window) + CV_Error(Error::StsNullPtr, "NULL window"); + + if (!SetWindowText(window->frame, title.c_str())) + CV_Error_(Error::StsError, ("Failed to set \"%s\" window title to \"%s\"", winname.c_str(), title.c_str())); +} + double cvGetPropWindowAutoSize_W32(const char* name) { double result = -1;