From 795400d1e5bc73769de990c69d6c864f7b148b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Tue, 27 Jan 2015 14:13:39 +0100 Subject: [PATCH] Clean up qt_on_cocoa manual test. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Focus the test on embedding QWindow: Remove the NSToolBar code. Use standard NSApplication startup code. Use winId() to access the NSView instead of QPlatformNativeInterface (which is gui-private). Rename Window -> RasterWindow. Change-Id: Ie98cb73020d2721743bb665b89b17f07f2bf984b Reviewed-by: Morten Johan Sørvig --- tests/manual/cocoa/qt_on_cocoa/main.mm | 168 ++++-------------- .../manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro | 10 +- .../{window.cpp => rasterwindow.cpp} | 37 ++-- .../qt_on_cocoa/{window.h => rasterwindow.h} | 7 +- 4 files changed, 53 insertions(+), 169 deletions(-) rename tests/manual/cocoa/qt_on_cocoa/{window.cpp => rasterwindow.cpp} (86%) rename tests/manual/cocoa/qt_on_cocoa/{window.h => rasterwindow.h} (95%) diff --git a/tests/manual/cocoa/qt_on_cocoa/main.mm b/tests/manual/cocoa/qt_on_cocoa/main.mm index 5dd546479e..23370b0305 100644 --- a/tests/manual/cocoa/qt_on_cocoa/main.mm +++ b/tests/manual/cocoa/qt_on_cocoa/main.mm @@ -31,123 +31,35 @@ ** ****************************************************************************/ +#include "rasterwindow.h" + #include -#include - #include -#include -#include - -#include - -#include "window.h" #include - -@interface FilledView : NSView -{ - +@interface AppDelegate : NSObject { + QGuiApplication *m_app; + QWindow *m_window; } +- (AppDelegate *) initWithArgc:(int)argc argv:(const char **)argv; +- (void) applicationWillFinishLaunching: (NSNotification *)notification; +- (void)applicationWillTerminate:(NSNotification *)notification; @end -@implementation FilledView - -- (void)drawRect:(NSRect)dirtyRect { - // set any NSColor for filling, say white: - [[NSColor redColor] setFill]; - NSRectFill(dirtyRect); -} - -@end - -@interface QtMacToolbarDelegate : NSObject +@implementation AppDelegate +- (AppDelegate *) initWithArgc:(int)argc argv:(const char **)argv { -@public - NSToolbar *toolbar; -} - -- (id)init; -- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted; -- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)tb; -- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar; -- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar; -@end - -@implementation QtMacToolbarDelegate - -- (id)init -{ - self = [super init]; - if (self) { - } + m_app = new QGuiApplication(argc, const_cast(argv)); return self; } -- (void)dealloc +- (void) applicationWillFinishLaunching: (NSNotification *)notification { - [super dealloc]; -} + Q_UNUSED(notification); -- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)tb -{ - Q_UNUSED(tb); - NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; -// [array addObject : NSToolbarPrintItemIdentifier]; -// [array addObject : NSToolbarShowColorsItemIdentifier]; - [array addObject : @"filledView"]; - return array; -} - -- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)tb -{ - Q_UNUSED(tb); - NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; -// [array addObject : NSToolbarPrintItemIdentifier]; -// [array addObject : NSToolbarShowColorsItemIdentifier]; - [array addObject : @"filledView"]; - return array; -} - -- (NSArray *)toolbarSelectableItemIdentifiers: (NSToolbar *)tb -{ - Q_UNUSED(tb); - NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; - return array; -} - -- (IBAction)itemClicked:(id)sender -{ - -} - -- (NSToolbarItem *) toolbar: (NSToolbar *)tb itemForItemIdentifier: (NSString *) itemIdentifier willBeInsertedIntoToolbar:(BOOL) willBeInserted -{ - Q_UNUSED(tb); - Q_UNUSED(willBeInserted); - //const QString identifier = toQString(itemIdentifier); - //NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease]; - //return toolbarItem; - - //NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease]; - NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease]; - FilledView *theView = [[FilledView alloc] init]; - [toolbarItem setView : theView]; - [toolbarItem setMinSize : NSMakeSize(400, 40)]; - [toolbarItem setMaxSize : NSMakeSize(4000, 40)]; - return toolbarItem; -} -@end - -@interface WindowAndViewAndQtCreator : NSObject {} -- (void)createWindowAndViewAndQt; -@end - -@implementation WindowAndViewAndQtCreator -- (void)createWindowAndViewAndQt { - - // Create the window + // Create the NSWindow NSRect frame = NSMakeRect(500, 500, 500, 500); NSWindow* window = [[NSWindow alloc] initWithContentRect:frame styleMask:NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask @@ -156,49 +68,31 @@ NSString *title = @"This the NSWindow window"; [window setTitle:title]; - [window setBackgroundColor:[NSColor blueColor]]; - // Create a tool bar, set Qt delegate - NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier : @"foobartoolbar"]; - QtMacToolbarDelegate *delegate = [[QtMacToolbarDelegate alloc] init]; - [toolbar setDelegate : delegate]; - [window setToolbar : toolbar]; + // Create the QWindow, use its NSView as the content view + m_window = new RasterWindow(); + [window setContentView:reinterpret_cast(m_window->winId())]; - // Create the QWindow, don't show it. - Window *qtWindow = new Window(); - qtWindow->create(); - - //QSGView *qtWindow = new QSGView(); - //qtWindow->setSource(QUrl::fromLocalFile("/Users/msorvig/code/qt5/qtdeclarative/examples/declarative/samegame/samegame.qml")); - // qtWindow->setWindowFlags(Qt::WindowType(13)); // 13: NativeEmbeddedWindow - - // Get the nsview from the QWindow, set it as the content view - // on the NSWindow created above. - QPlatformNativeInterface *platformNativeInterface = QGuiApplication::platformNativeInterface(); - NSView *qtView = (NSView *)platformNativeInterface->nativeResourceForWindow("nsview", qtWindow); - [window setContentView:qtView]; + // Show the NSWindow [window makeKeyAndOrderFront:NSApp]; } + +- (void)applicationWillTerminate:(NSNotification *)notification +{ + Q_UNUSED(notification); + delete m_window; + delete m_app; +} + @end -int main(int argc, char *argv[]) +int main(int argc, const char *argv[]) { - QGuiApplication app(argc, argv); - - // fake NSApplicationMain() implementation follows: - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - [NSApplication sharedApplication]; - - // schedule call to create the UI. - WindowAndViewAndQtCreator *windowAndViewAndQtCreator= [WindowAndViewAndQtCreator alloc]; - [NSTimer scheduledTimerWithTimeInterval:0 target:windowAndViewAndQtCreator selector:@selector(createWindowAndViewAndQt) userInfo:nil repeats:NO]; - - [(NSApplication *)NSApp run]; - [NSApp release]; - [pool release]; - exit(0); - return 0; + // Create NSApplicaiton with delgate + NSApplication *app =[NSApplication sharedApplication]; + app.delegate = [[AppDelegate alloc] initWithArgc:argc argv:argv]; + return NSApplicationMain (argc, argv); } diff --git a/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro b/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro index 3d526909a5..97e4473e15 100644 --- a/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro +++ b/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro @@ -1,13 +1,11 @@ TEMPLATE = app OBJECTIVE_SOURCES += main.mm -HEADERS += window.h -SOURCES += window.cpp +HEADERS += rasterwindow.h +SOURCES += rasterwindow.cpp LIBS += -framework Cocoa -QMAKE_INFO_PLIST = Info_mac.plist -OTHER_FILES = Info_mac.plist -QT += gui widgets widgets-private gui-private core-private +QT += gui widgets quick -QT += declarative +QT += quick DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/manual/cocoa/qt_on_cocoa/window.cpp b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp similarity index 86% rename from tests/manual/cocoa/qt_on_cocoa/window.cpp rename to tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp index 9929a50065..9b8f5e63ce 100644 --- a/tests/manual/cocoa/qt_on_cocoa/window.cpp +++ b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp @@ -31,9 +31,9 @@ ** ****************************************************************************/ -#include "window.h" +#include "rasterwindow.h" -#include +//#include #include #include @@ -48,21 +48,14 @@ QColor colorTable[] = QColor("#c0ef8f") }; -Window::Window(QScreen *screen) - : QWindow(screen) +RasterWindow::RasterWindow(QRasterWindow *parent) + : QRasterWindow(parent) , m_backgroundColorIndex(colorIndexId++) { initialize(); } -Window::Window(QWindow *parent) - : QWindow(parent) - , m_backgroundColorIndex(colorIndexId++) -{ - initialize(); -} - -void Window::initialize() +void RasterWindow::initialize() { if (parent()) setGeometry(QRect(160, 120, 320, 240)); @@ -85,12 +78,12 @@ void Window::initialize() m_renderTimer = 0; } -void Window::mousePressEvent(QMouseEvent *event) +void RasterWindow::mousePressEvent(QMouseEvent *event) { m_lastPos = event->pos(); } -void Window::mouseMoveEvent(QMouseEvent *event) +void RasterWindow::mouseMoveEvent(QMouseEvent *event) { if (m_lastPos != QPoint(-1, -1)) { QPainter p(&m_image); @@ -102,7 +95,7 @@ void Window::mouseMoveEvent(QMouseEvent *event) scheduleRender(); } -void Window::mouseReleaseEvent(QMouseEvent *event) +void RasterWindow::mouseReleaseEvent(QMouseEvent *event) { if (m_lastPos != QPoint(-1, -1)) { QPainter p(&m_image); @@ -114,16 +107,16 @@ void Window::mouseReleaseEvent(QMouseEvent *event) scheduleRender(); } -void Window::exposeEvent(QExposeEvent *) +void RasterWindow::exposeEvent(QExposeEvent *) { scheduleRender(); } -void Window::resizeEvent(QResizeEvent *) +void RasterWindow::resizeEvent(QResizeEvent *) { QImage old = m_image; - //qDebug() << "Window::resizeEvent" << width << height; + //qDebug() << "RasterWindow::resizeEvent" << width << height; int width = qMax(geometry().width(), old.width()); int height = qMax(geometry().height(), old.height()); @@ -139,7 +132,7 @@ void Window::resizeEvent(QResizeEvent *) render(); } -void Window::keyPressEvent(QKeyEvent *event) +void RasterWindow::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Backspace: @@ -156,20 +149,20 @@ void Window::keyPressEvent(QKeyEvent *event) scheduleRender(); } -void Window::scheduleRender() +void RasterWindow::scheduleRender() { if (!m_renderTimer) m_renderTimer = startTimer(1); } -void Window::timerEvent(QTimerEvent *) +void RasterWindow::timerEvent(QTimerEvent *) { render(); killTimer(m_renderTimer); m_renderTimer = 0; } -void Window::render() +void RasterWindow::render() { QRect rect(QPoint(), geometry().size()); diff --git a/tests/manual/cocoa/qt_on_cocoa/window.h b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.h similarity index 95% rename from tests/manual/cocoa/qt_on_cocoa/window.h rename to tests/manual/cocoa/qt_on_cocoa/rasterwindow.h index a36180e0f3..1de66b5302 100644 --- a/tests/manual/cocoa/qt_on_cocoa/window.h +++ b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.h @@ -31,14 +31,13 @@ ** ****************************************************************************/ -#include +#include #include -class Window : public QWindow +class RasterWindow : public QRasterWindow { public: - Window(QWindow *parent = 0); - Window(QScreen *screen); + RasterWindow(QRasterWindow *parent = 0); protected: void mousePressEvent(QMouseEvent *);