macOS: Update qt_on_cocoa manual test

- Add view to contentView, to allow checking parent view interaction
- Render via requestUpdate instead of manual timer
- Add two windows to check subview interaction

Change-Id: Ib028e62f585d45e42c0429e69ea6f45c8a90fe54
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
Tor Arne Vestbø 2017-08-30 19:05:39 +02:00
parent fefbed5eae
commit 28414f8e3a
3 changed files with 32 additions and 24 deletions

View File

@ -33,6 +33,17 @@
#include <AppKit/AppKit.h> #include <AppKit/AppKit.h>
@interface ContentView : NSView
@end
@implementation ContentView
- (void)drawRect:(NSRect)dirtyRect {
[[NSColor whiteColor] setFill];
NSRectFill(dirtyRect);
}
@end
@interface AppDelegate : NSObject <NSApplicationDelegate> { @interface AppDelegate : NSObject <NSApplicationDelegate> {
QGuiApplication *m_app; QGuiApplication *m_app;
QWindow *m_window; QWindow *m_window;
@ -65,9 +76,19 @@
[window setTitle:title]; [window setTitle:title];
[window setBackgroundColor:[NSColor blueColor]]; [window setBackgroundColor:[NSColor blueColor]];
// Create the QWindow, use its NSView as the content view window.contentView = [[[ContentView alloc] initWithFrame:frame] autorelease];
m_window = new RasterWindow();
[window setContentView:reinterpret_cast<NSView *>(m_window->winId())]; // Create the QWindow, add its NSView to the content view
m_window = new RasterWindow;
m_window->setObjectName("RasterWindow");
m_window->setGeometry(QRect(0, 0, 300, 300));
QWindow *childWindow = new RasterWindow;
childWindow->setObjectName("RasterWindowChild");
childWindow->setParent(m_window);
childWindow->setGeometry(50, 50, 100, 100);
[window.contentView addSubview:reinterpret_cast<NSView *>(m_window->winId())];
// Show the NSWindow // Show the NSWindow
[window makeKeyAndOrderFront:NSApp]; [window makeKeyAndOrderFront:NSApp];

View File

@ -52,17 +52,6 @@ RasterWindow::RasterWindow(QRasterWindow *parent)
void RasterWindow::initialize() void RasterWindow::initialize()
{ {
if (parent())
setGeometry(QRect(160, 120, 320, 240));
else {
setGeometry(QRect(10, 10, 640, 480));
setSizeIncrement(QSize(10, 10));
setBaseSize(QSize(640, 480));
setMinimumSize(QSize(240, 160));
setMaximumSize(QSize(800, 600));
}
create(); create();
m_backingStore = new QBackingStore(this); m_backingStore = new QBackingStore(this);
@ -70,7 +59,6 @@ void RasterWindow::initialize()
m_image.fill(colorTable[m_backgroundColorIndex % (sizeof(colorTable) / sizeof(colorTable[0]))].rgba()); m_image.fill(colorTable[m_backgroundColorIndex % (sizeof(colorTable) / sizeof(colorTable[0]))].rgba());
m_lastPos = QPoint(-1, -1); m_lastPos = QPoint(-1, -1);
m_renderTimer = 0;
} }
void RasterWindow::mousePressEvent(QMouseEvent *event) void RasterWindow::mousePressEvent(QMouseEvent *event)
@ -104,7 +92,7 @@ void RasterWindow::mouseReleaseEvent(QMouseEvent *event)
void RasterWindow::exposeEvent(QExposeEvent *) void RasterWindow::exposeEvent(QExposeEvent *)
{ {
scheduleRender(); render();
} }
void RasterWindow::resizeEvent(QResizeEvent *) void RasterWindow::resizeEvent(QResizeEvent *)
@ -146,15 +134,15 @@ void RasterWindow::keyPressEvent(QKeyEvent *event)
void RasterWindow::scheduleRender() void RasterWindow::scheduleRender()
{ {
if (!m_renderTimer) requestUpdate();
m_renderTimer = startTimer(1);
} }
void RasterWindow::timerEvent(QTimerEvent *) bool RasterWindow::event(QEvent *e)
{ {
render(); if (e->type() == QEvent::UpdateRequest)
killTimer(m_renderTimer); render();
m_renderTimer = 0;
return QWindow::event(e);
} }
void RasterWindow::render() void RasterWindow::render()

View File

@ -44,7 +44,7 @@ protected:
void exposeEvent(QExposeEvent *); void exposeEvent(QExposeEvent *);
void resizeEvent(QResizeEvent *); void resizeEvent(QResizeEvent *);
void timerEvent(QTimerEvent *); bool event(QEvent *);
private: private:
void render(); void render();
@ -56,5 +56,4 @@ private:
QPoint m_lastPos; QPoint m_lastPos;
int m_backgroundColorIndex; int m_backgroundColorIndex;
QBackingStore *m_backingStore; QBackingStore *m_backingStore;
int m_renderTimer;
}; };