From 8b7b6b6969ea36a42379ee9427d71b61b2e7a6a3 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Sun, 10 Jun 2012 22:59:24 +0200 Subject: Add a manual test for QMacCocoaViewContainer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added a test for QMacCocoaViewContainer which will enable the testing of the fixes coming Change-Id: I73e9540bc58411634f0da7d398eca4b7ffafba8e Reviewed-by: Morten Johan Sørvig --- .../qmaccocoaviewcontainer/TestMouseMovedNSView.h | 50 +++++++++ .../qmaccocoaviewcontainer/TestMouseMovedNSView.m | 120 +++++++++++++++++++++ tests/manual/cocoa/qmaccocoaviewcontainer/main.mm | 107 ++++++++++++++++++ .../qmaccocoaviewcontainer.pro | 9 ++ 4 files changed, 286 insertions(+) create mode 100644 tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h create mode 100644 tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.m create mode 100644 tests/manual/cocoa/qmaccocoaviewcontainer/main.mm create mode 100644 tests/manual/cocoa/qmaccocoaviewcontainer/qmaccocoaviewcontainer.pro (limited to 'tests/manual/cocoa') diff --git a/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h b/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h new file mode 100644 index 0000000000..86ab7ba6d2 --- /dev/null +++ b/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.h @@ -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 + +@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 index 0000000000..5fe26785e4 --- /dev/null +++ b/tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.m @@ -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 index 0000000000..911acfef10 --- /dev/null +++ b/tests/manual/cocoa/qmaccocoaviewcontainer/main.mm @@ -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 +#include + +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 index 0000000000..a7aa675d87 --- /dev/null +++ b/tests/manual/cocoa/qmaccocoaviewcontainer/qmaccocoaviewcontainer.pro @@ -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 -- cgit v1.2.3