summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-03-11 18:14:12 +0100
committerTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-03-16 10:37:10 +0000
commitd3d258a1b2aab8dd3be4d6ce27e0a664a681a840 (patch)
tree451171c079ae10043baf37a918fbe753dec19932 /src
parent2094903a146f150a977b954a439f9f0185be24dc (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/ios/qiosintegration.h6
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm11
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm51
-rw-r--r--src/plugins/platforms/ios/quiview.mm14
4 files changed, 82 insertions, 0 deletions
diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h
index c22c43e455..0fe318dce7 100644
--- a/src/plugins/platforms/ios/qiosintegration.h
+++ b/src/plugins/platforms/ios/qiosintegration.h
@@ -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
diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm
index fcfd6c7cc8..e395c832f1 100644
--- a/src/plugins/platforms/ios/qiosintegration.mm
+++ b/src/plugins/platforms/ios/qiosintegration.mm
@@ -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"
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index d144b419aa..9abd105d94 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -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);
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index f36cbaf685..a56db1d6f5 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -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;