iOS: Add platform plugin option to debug window management
When the 'debugWindowManagement' option is enabled, e.g. by passing the argument -platform ios:debugWindowManagement to the application, the plugin will add a background color and outline to all QUIViews, as well as draw a grid for the underlying QUIViewController. This makes it easier to see where windows are placed when the window itself doesn't draw anything, e.g. in unit tests. Change-Id: If9a59822e0b320b154ad8e338f9fb5ec7cf191a2 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>bb10
parent
2094903a14
commit
d3d258a1b2
|
|
@ -48,6 +48,7 @@ class QIOSServices;
|
|||
class QIOSIntegration : public QPlatformNativeInterface, public QPlatformIntegration
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool debugWindowManagement READ debugWindowManagement WRITE setDebugWindowManagement);
|
||||
|
||||
public:
|
||||
QIOSIntegration();
|
||||
|
|
@ -87,6 +88,9 @@ public:
|
|||
|
||||
void *nativeResourceForWindow(const QByteArray &resource, QWindow *window);
|
||||
|
||||
void setDebugWindowManagement(bool);
|
||||
bool debugWindowManagement() const;
|
||||
|
||||
private:
|
||||
QPlatformFontDatabase *m_fontDatabase;
|
||||
QPlatformClipboard *m_clipboard;
|
||||
|
|
@ -96,6 +100,8 @@ private:
|
|||
QIOSServices *m_platformServices;
|
||||
mutable QPlatformAccessibility *m_accessibility;
|
||||
QIOSFileEngineFactory m_fileEngineFactory;
|
||||
|
||||
bool m_debugWindowManagement;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ QIOSIntegration::QIOSIntegration()
|
|||
, m_inputContext(0)
|
||||
, m_platformServices(new QIOSServices)
|
||||
, m_accessibility(0)
|
||||
, m_debugWindowManagement(false)
|
||||
{
|
||||
if (![UIApplication sharedApplication]) {
|
||||
qFatal("Error: You are creating QApplication before calling UIApplicationMain.\n" \
|
||||
|
|
@ -249,6 +250,16 @@ void *QIOSIntegration::nativeResourceForWindow(const QByteArray &resource, QWind
|
|||
return 0;
|
||||
}
|
||||
|
||||
void QIOSIntegration::setDebugWindowManagement(bool enabled)
|
||||
{
|
||||
m_debugWindowManagement = enabled;
|
||||
}
|
||||
|
||||
bool QIOSIntegration::debugWindowManagement() const
|
||||
{
|
||||
return m_debugWindowManagement;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
|
||||
#include "moc_qiosintegration.cpp"
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
|
||||
#include <QtGui/private/qwindow_p.h>
|
||||
|
||||
#include "qiosintegration.h"
|
||||
#include "qiosscreen.h"
|
||||
#include "qiosglobal.h"
|
||||
#include "qioswindow.h"
|
||||
|
|
@ -64,6 +65,56 @@
|
|||
|
||||
@implementation QIOSDesktopManagerView
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (!(self = [super init]))
|
||||
return nil;
|
||||
|
||||
QIOSIntegration *iosIntegration = QIOSIntegration::instance();
|
||||
if (iosIntegration && iosIntegration->debugWindowManagement()) {
|
||||
static UIImage *gridPattern = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
CGFloat dimension = 100.f;
|
||||
|
||||
UIGraphicsBeginImageContextWithOptions(CGSizeMake(dimension, dimension), YES, 0.0f);
|
||||
CGContextRef context = UIGraphicsGetCurrentContext();
|
||||
|
||||
CGContextTranslateCTM(context, -0.5, -0.5);
|
||||
|
||||
#define gridColorWithBrightness(br) \
|
||||
[UIColor colorWithHue:0.6 saturation:0.0 brightness:br alpha:1.0].CGColor
|
||||
|
||||
CGContextSetFillColorWithColor(context, gridColorWithBrightness(0.05));
|
||||
CGContextFillRect(context, CGRectMake(0, 0, dimension, dimension));
|
||||
|
||||
CGFloat gridLines[][2] = { { 10, 0.1 }, { 20, 0.2 }, { 100, 0.3 } };
|
||||
for (size_t l = 0; l < sizeof(gridLines) / sizeof(gridLines[0]); ++l) {
|
||||
CGFloat step = gridLines[l][0];
|
||||
for (int c = step; c <= dimension; c += step) {
|
||||
CGContextMoveToPoint(context, c, 0);
|
||||
CGContextAddLineToPoint(context, c, dimension);
|
||||
CGContextMoveToPoint(context, 0, c);
|
||||
CGContextAddLineToPoint(context, dimension, c);
|
||||
}
|
||||
|
||||
CGFloat brightness = gridLines[l][1];
|
||||
CGContextSetStrokeColorWithColor(context, gridColorWithBrightness(brightness));
|
||||
CGContextStrokePath(context);
|
||||
}
|
||||
|
||||
gridPattern = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
[gridPattern retain];
|
||||
});
|
||||
|
||||
self.backgroundColor = [UIColor colorWithPatternImage:gridPattern];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)didAddSubview:(UIView *)subview
|
||||
{
|
||||
Q_UNUSED(subview);
|
||||
|
|
|
|||
|
|
@ -73,6 +73,20 @@
|
|||
self.hidden = YES;
|
||||
|
||||
self.multipleTouchEnabled = YES;
|
||||
|
||||
if (QIOSIntegration::instance()->debugWindowManagement()) {
|
||||
static CGFloat hue = 0.0;
|
||||
CGFloat lastHue = hue;
|
||||
for (CGFloat diff = 0; diff < 0.1 || diff > 0.9; diff = fabsf(hue - lastHue))
|
||||
hue = drand48();
|
||||
|
||||
#define colorWithBrightness(br) \
|
||||
[UIColor colorWithHue:hue saturation:0.5 brightness:br alpha:1.0].CGColor
|
||||
|
||||
self.layer.backgroundColor = colorWithBrightness(0.5);
|
||||
self.layer.borderColor = colorWithBrightness(1.0);
|
||||
self.layer.borderWidth = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
|
|
|
|||
Loading…
Reference in New Issue