Cocoa: Option handling.
Add qt_mac_resolveOption(). Support setting options using either an environment variable or a QWindow property, with a default fallback value. The options are resolved with precedence in the mentioned order. Adds options for the following: NSView setWantsBestResolutionOPenGLSurface NSVIew setWantsLayer NSOpenGLContext NSOpenGLCPSurfaceOrder The window properties use the _q_mac_camelCase format. The environment variables use the QT_MAC_ALL_CAPS format. Change-Id: I1978a02d62e107a2120d81ffdd0f7b32f7731644 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>bb10
parent
fd0f1bc321
commit
2a6e372a49
|
|
@ -42,6 +42,7 @@
|
|||
#include "qcocoaglcontext.h"
|
||||
#include "qcocoawindow.h"
|
||||
#include "qcocoaautoreleasepool.h"
|
||||
#include "qcocoahelpers.h"
|
||||
#include <qdebug.h>
|
||||
#include <QtCore/private/qcore_mac_p.h>
|
||||
#include <QtPlatformSupport/private/cglconvenience_p.h>
|
||||
|
|
@ -151,6 +152,11 @@ QCocoaGLContext::QCocoaGLContext(const QSurfaceFormat &format, QPlatformOpenGLCo
|
|||
[m_context setValues:&zeroOpacity forParameter:NSOpenGLCPSurfaceOpacity];
|
||||
}
|
||||
|
||||
|
||||
// OpenGL surfaces can be ordered either above(default) or below the NSWindow.
|
||||
const GLint order = qt_mac_resolveOption(1, "QT_MAC_OPENGL_SURFACE_ORDER");
|
||||
[m_context setValues:&order forParameter:NSOpenGLCPSurfaceOrder];
|
||||
|
||||
updateSurfaceFormat();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,6 +162,39 @@ CGContextRef qt_mac_cg_context(QPaintDevice *pdev);
|
|||
CGImageRef qt_mac_toCGImage(const QImage &qImage, bool isMask, uchar **dataCopy);
|
||||
QImage qt_mac_toQImage(CGImageRef image);
|
||||
|
||||
template<typename T>
|
||||
T qt_mac_resolveOption(const T &fallback, const QByteArray &environment)
|
||||
{
|
||||
// check for environment variable
|
||||
if (!environment.isEmpty()) {
|
||||
QByteArray env = qgetenv(environment);
|
||||
if (!env.isEmpty())
|
||||
return T(env.toInt()); // works when T is bool, int.
|
||||
}
|
||||
|
||||
return fallback;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
T qt_mac_resolveOption(const T &fallback, QWindow *window, const QByteArray &property, const QByteArray &environment)
|
||||
{
|
||||
// check for environment variable
|
||||
if (!environment.isEmpty()) {
|
||||
QByteArray env = qgetenv(environment);
|
||||
if (!env.isEmpty())
|
||||
return T(env.toInt()); // works when T is bool, int.
|
||||
}
|
||||
|
||||
// check for window property
|
||||
if (window && !property.isNull()) {
|
||||
QVariant windowProperty = window->property(property);
|
||||
if (windowProperty.isValid())
|
||||
return windowProperty.value<T>();
|
||||
}
|
||||
|
||||
// return default value.
|
||||
return fallback;
|
||||
}
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif //QCOCOAHELPERS_H
|
||||
|
|
|
|||
|
|
@ -252,9 +252,15 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
|
|||
// problem, except if the appilcation wants to have a "custom" viewport.
|
||||
// (like the hellogl example)
|
||||
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_7
|
||||
&& tlw->surfaceType() == QSurface::OpenGLSurface)
|
||||
[m_contentView setWantsBestResolutionOpenGLSurface:YES];
|
||||
&& tlw->surfaceType() == QSurface::OpenGLSurface) {
|
||||
BOOL enable = qt_mac_resolveOption(YES, tlw, "_q_mac_wantsBestResolutionOpenGLSurface",
|
||||
"QT_MAC_WANTS_BEST_RESOLUTION_OPENGL_SURFACE");
|
||||
[m_contentView setWantsBestResolutionOpenGLSurface:enable];
|
||||
}
|
||||
#endif
|
||||
BOOL enable = qt_mac_resolveOption(NO, tlw, "_q_mac_wantsLayer",
|
||||
"QT_MAC_WANTS_LAYER");
|
||||
[m_contentView setWantsLayer:enable];
|
||||
}
|
||||
setGeometry(tlw->geometry());
|
||||
recreateWindow(parent());
|
||||
|
|
|
|||
Loading…
Reference in New Issue