Add a manual test for QMacCocoaViewContainer
authorAndy Shaw <andy.shaw@digia.com>
Sun, 10 Jun 2012 20:59:24 +0000 (22:59 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Mon, 24 Sep 2012 19:27:51 +0000 (21:27 +0200)
Added a test for QMacCocoaViewContainer which will enable the testing
of the fixes coming

Change-Id: I73e9540bc58411634f0da7d398eca4b7ffafba8e
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h [new file with mode: 0644]
tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.m [new file with mode: 0644]
tests/manual/cocoa/qmaccocoaviewcontainer/main.mm [new file with mode: 0644]
tests/manual/cocoa/qmaccocoaviewcontainer/qmaccocoaviewcontainer.pro [new file with mode: 0644]

diff --git a/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h b/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h
new file mode 100644 (file)
index 0000000..86ab7ba
--- /dev/null
@@ -0,0 +1,50 @@
+/****************************************************************************
+ **
+ ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+ ** Contact: http://www.qt-project.org/legal
+ **
+ ** This file is part of the test suite of the Qt Toolkit.
+ **
+ ** $QT_BEGIN_LICENSE:LGPL$
+ ** Commercial License Usage
+ ** Licensees holding valid commercial Qt licenses may use this file in
+ ** accordance with the commercial license agreement provided with the
+ ** Software or, alternatively, in accordance with the terms contained in
+ ** a written agreement between you and Digia.  For licensing terms and
+ ** conditions see http://qt.digia.com/licensing.  For further information
+ ** use the contact form at http://qt.digia.com/contact-us.
+ **
+ ** GNU Lesser General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU Lesser
+ ** General Public License version 2.1 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.LGPL included in the
+ ** packaging of this file.  Please review the following information to
+ ** ensure the GNU Lesser General Public License version 2.1 requirements
+ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ **
+ ** In addition, as a special exception, Digia gives you certain additional
+ ** rights.  These rights are described in the Digia Qt LGPL Exception
+ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+ **
+ ** GNU General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU
+ ** General Public License version 3.0 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.  Please review the following information to
+ ** ensure the GNU General Public License version 3.0 requirements will be
+ ** met: http://www.gnu.org/copyleft/gpl.html.
+ **
+ **
+ ** $QT_END_LICENSE$
+ **
+ ****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+@interface TestMouseMovedNSView : NSView {
+    NSPoint mouseMovedPoint_;
+    BOOL wasAcceptingMouseEvents_;
+    NSTrackingRectTag trackingRect_;
+    NSTrackingArea* trackingArea_;
+}
+@end
diff --git a/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.m b/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.m
new file mode 100644 (file)
index 0000000..5fe2678
--- /dev/null
@@ -0,0 +1,120 @@
+/****************************************************************************
+ **
+ ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+ ** Contact: http://www.qt-project.org/legal
+ **
+ ** This file is part of the test suite of the Qt Toolkit.
+ **
+ ** $QT_BEGIN_LICENSE:LGPL$
+ ** Commercial License Usage
+ ** Licensees holding valid commercial Qt licenses may use this file in
+ ** accordance with the commercial license agreement provided with the
+ ** Software or, alternatively, in accordance with the terms contained in
+ ** a written agreement between you and Digia.  For licensing terms and
+ ** conditions see http://qt.digia.com/licensing.  For further information
+ ** use the contact form at http://qt.digia.com/contact-us.
+ **
+ ** GNU Lesser General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU Lesser
+ ** General Public License version 2.1 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.LGPL included in the
+ ** packaging of this file.  Please review the following information to
+ ** ensure the GNU Lesser General Public License version 2.1 requirements
+ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ **
+ ** In addition, as a special exception, Digia gives you certain additional
+ ** rights.  These rights are described in the Digia Qt LGPL Exception
+ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+ **
+ ** GNU General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU
+ ** General Public License version 3.0 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.  Please review the following information to
+ ** ensure the GNU General Public License version 3.0 requirements will be
+ ** met: http://www.gnu.org/copyleft/gpl.html.
+ **
+ **
+ ** $QT_END_LICENSE$
+ **
+ ****************************************************************************/
+
+#import "TestMouseMovedNSView.h"
+
+@implementation TestMouseMovedNSView
+
+- (id)initWithFrame:(NSRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self)
+        mouseMovedPoint_ = NSMakePoint(50, 50);
+    return self;
+}
+
+- (void)viewDidMoveToWindow
+{
+    trackingArea_ = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
+    [self addTrackingArea:trackingArea_];
+}
+
+- (void)viewWillMoveToWindow:(NSWindow *)newWindow
+{
+    if ([self window] && trackingArea_)
+        [self removeTrackingArea:trackingArea_];
+}
+
+- (void)updateTrackingAreas
+{
+    [super updateTrackingAreas];
+    [self removeTrackingArea: trackingArea_];
+    trackingArea_ = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
+    [self addTrackingArea:trackingArea_];
+}
+
+- (BOOL)acceptsFirstResponder { return YES; }
+- (BOOL)becomeFirstResponder { return YES; }
+
+- (void)mouseEntered:(NSEvent *)theEvent
+{
+    wasAcceptingMouseEvents_ = [[self window] acceptsMouseMovedEvents];
+    [[self window] setAcceptsMouseMovedEvents:YES];
+    [[self window] makeFirstResponder:self];
+}
+
+- (void)mouseExited:(NSEvent *)theEvent
+{
+    [[self window] setAcceptsMouseMovedEvents:wasAcceptingMouseEvents_];
+    [self setNeedsDisplay:YES];
+    [self displayIfNeeded];
+}
+
+-(void)mouseMoved:(NSEvent *)pTheEvent
+{
+    mouseMovedPoint_ = [self convertPoint:[pTheEvent locationInWindow] fromView:nil];
+    [self setNeedsDisplay:YES];
+    [self displayIfNeeded];
+}
+
+- (void)drawRect:(NSRect)dirtyRect
+{
+    [[NSColor whiteColor] set];
+    NSRectFill(dirtyRect);
+
+    NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext currentContext];
+    CGContextRef cgContextRef = (CGContextRef) [nsGraphicsContext graphicsPort];
+
+    CGContextSetRGBStrokeColor(cgContextRef, 0, 0, 0, .5);
+    CGContextSetLineWidth(cgContextRef, 1.0);
+
+    CGContextBeginPath(cgContextRef);
+
+    CGContextMoveToPoint(cgContextRef, mouseMovedPoint_.x, 0);
+    CGContextAddLineToPoint(cgContextRef, mouseMovedPoint_.x, 1000);
+
+    CGContextMoveToPoint(cgContextRef, 0, mouseMovedPoint_.y);
+    CGContextAddLineToPoint(cgContextRef, 1000, mouseMovedPoint_.y);
+
+    CGContextDrawPath(cgContextRef, kCGPathStroke);
+}
+
+@end
diff --git a/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm b/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm
new file mode 100644 (file)
index 0000000..911acfe
--- /dev/null
@@ -0,0 +1,107 @@
+/****************************************************************************
+ **
+ ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+ ** Contact: http://www.qt-project.org/legal
+ **
+ ** This file is part of the test suite of the Qt Toolkit.
+ **
+ ** $QT_BEGIN_LICENSE:LGPL$
+ ** Commercial License Usage
+ ** Licensees holding valid commercial Qt licenses may use this file in
+ ** accordance with the commercial license agreement provided with the
+ ** Software or, alternatively, in accordance with the terms contained in
+ ** a written agreement between you and Digia.  For licensing terms and
+ ** conditions see http://qt.digia.com/licensing.  For further information
+ ** use the contact form at http://qt.digia.com/contact-us.
+ **
+ ** GNU Lesser General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU Lesser
+ ** General Public License version 2.1 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.LGPL included in the
+ ** packaging of this file.  Please review the following information to
+ ** ensure the GNU Lesser General Public License version 2.1 requirements
+ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ **
+ ** In addition, as a special exception, Digia gives you certain additional
+ ** rights.  These rights are described in the Digia Qt LGPL Exception
+ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+ **
+ ** GNU General Public License Usage
+ ** Alternatively, this file may be used under the terms of the GNU
+ ** General Public License version 3.0 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.  Please review the following information to
+ ** ensure the GNU General Public License version 3.0 requirements will be
+ ** met: http://www.gnu.org/copyleft/gpl.html.
+ **
+ **
+ ** $QT_END_LICENSE$
+ **
+ ****************************************************************************/
+
+
+#import "TestMouseMovedNSView.h"
+#include <QtGui>
+#include <QMacCocoaViewContainer>
+
+class MyWidget : public QWidget
+{
+    Q_OBJECT
+public:
+    MyWidget(QMacCocoaViewContainer *c, QWidget *parent = 0) : QWidget(parent), container(c), currentlyVisible(true)
+    {
+        QVBoxLayout *vbox = new QVBoxLayout;
+        QLabel *label = new QLabel("1: Check that the cross hairs move when the mouse is moved over the widget\n"
+                                   "2: Check that clicking on change visibility causes the NSView to hide/show as appropriate\n"
+                                   "3: Check that clicking on resize makes the view be 200x200");
+        vbox->addWidget(label);
+        QPushButton *button = new QPushButton("Change visibility");
+        connect(button, SIGNAL(clicked()), this, SLOT(changeVisibility()));
+        vbox->addWidget(button);
+        button = new QPushButton("Change size");
+        connect(button, SIGNAL(clicked()), this, SLOT(changeSize()));
+        vbox->addWidget(button);
+        setLayout(vbox);
+    }
+public slots:
+    void changeVisibility()
+    {
+        currentlyVisible = !currentlyVisible;
+        if (!currentlyVisible)
+            container->hide();
+        else
+            container->show();
+        bool b = !([(NSView *)container->cocoaView() isHidden]);
+        QMessageBox::information(this, "Is visible", QString("NSView visibility: %1").arg(b));
+    }
+    void changeSize()
+    {
+        NSRect r = NSMakeRect(0, 0, 200, 200);
+        [(NSView *)container->cocoaView() setFrame:r];
+    }
+private:
+    QMacCocoaViewContainer *container;
+    bool currentlyVisible;
+};
+
+#include "main.moc"
+
+int main(int argc, char **argv)
+{
+    QApplication a(argc, argv);
+    QPoint pos(100,100);
+    QWidget w;
+    w.move(pos);
+    w.setWindowTitle("QMacCocoaViewContainer");
+    NSRect r = NSMakeRect(0, 0, 100, 100);
+    NSView *view = [[TestMouseMovedNSView alloc] initWithFrame: r];
+    QMacCocoaViewContainer *nativeChild = new QMacCocoaViewContainer(view, &w);
+    QVBoxLayout *vbox = new QVBoxLayout;
+    vbox->addWidget(nativeChild);
+    w.setLayout(vbox);
+    w.show();
+    MyWidget w2(nativeChild);
+    w2.show();
+    return a.exec();
+}
+
diff --git a/tests/manual/cocoa/qmaccocoaviewcontainer/qmaccocoaviewcontainer.pro b/tests/manual/cocoa/qmaccocoaviewcontainer/qmaccocoaviewcontainer.pro
new file mode 100644 (file)
index 0000000..a7aa675
--- /dev/null
@@ -0,0 +1,9 @@
+TEMPLATE = app
+TARGET = qmaccocoaviewcontainer
+DEPENDPATH += .
+INCLUDEPATH += .
+QT += widgets
+LIBS += -framework Cocoa
+# Input
+OBJECTIVE_SOURCES += main.mm TestMouseMovedNSView.m
+HEADERS += TestMouseMovedNSView.h