summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
Commit message (Collapse)AuthorAgeFilesLines
* macOS: Remove GL defines from QCocoaGLContextTor Arne Vestbø2018-08-031-20/+0
| | | | | | | They should be available in all SDKs we build against and support. Change-Id: I799492e0b21a877717fb3a8391bcbad0f8581628 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Don't mess with native handle for QOpenGLContextTor Arne Vestbø2018-08-031-3/+0
| | | | | | | | | | | | QOpenGLContext::setNativeHandle() is documented as: "configuration settings, like format(), are ignored since this QOpenGLContext will wrap an already created native context" We should respect this and not apply QT_MAC_OPENGL_SURFACE_ORDER. Change-Id: Idfdf3eac0e9f9d0a86f1b23aa475c3e4f12127e2 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Remove unneeded auto-release-pools in QCocoaGLContextTor Arne Vestbø2018-08-031-3/+0
| | | | | | | | The makeCurrent one was not explained in the commit message that introduced it, and doesn't make any sense, while the constructor one is no longer needed. Change-Id: I67e2f2aaff5d8602781b27f122f415068a1f2301 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Add more logging to QCocoaGLContextTor Arne Vestbø2018-08-031-1/+11
| | | | | Change-Id: I6e93934b466f86b7607c9ad30c4c28a9c0f40fd7 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Propagate [NSOpenGLContext setView:] failuresTor Arne Vestbø2018-08-035-55/+25
| | | | | | | | | | | | | | | | | Instead of trying to mask situations where [NSOpenGLContext setView:] will fail (such as calling it for a view that's not part of a window yet, or part of a window that hasn't been shown), we report the error up through the API, so that QOpenGLContext::makeCurrent() will return false. This is documented to occur e.g. when "the surface is not exposed, or the graphics hardware is not available due to e.g. the application being suspended." QGLWidget was taught how to deal with this situation in cc27a50e. Other Qt APIs seem to handle it fine, but if regressions occur they should be fixable though the same logic as in cc27a50e. Change-Id: I92775fc165444696b6c5b44fa0e28ce3c4ad2190 Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Make screen property changes more verbose and granularTor Arne Vestbø2018-08-036-12/+31
| | | | | | | | We only update the properties that have actually changed. Change-Id: If711530c6118d2550d5a0e968ee02c903b44fd04 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Reorganize QCocoaGLContextTor Arne Vestbø2018-08-032-183/+180
| | | | | | | | Group methods by their areas of responsibility to make it easier to follow the logic of the code. Change-Id: I64dbf60004d0f4c281312451e0781da31997c64d Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* macOS: Forward declare 10.14 NSColors instead of disabling warningTor Arne Vestbø2018-07-301-4/+9
| | | | | Change-Id: I8fc1ba7aac1c8ac86a8cb5d6f864180e0721926f Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* Fix QGuiApplication::queryKeyboardModifiers() on macOSNils Jeisecke2018-07-201-1/+1
| | | | | | | | | | | | | | | | | | To quote the documentation: Queries and returns the state of the modifier keys on the keyboard. Unlike keyboardModifiers, this method returns the actual keys held on the input device at the time of calling the method. So GetCurrentKeyModifiers seems to be the correct Carbon function to use. [ChangeLog][QtGui][QGuiApplication] Fix queryKeyboardModifiers() on macOS to actually return the current modifier key state Change-Id: I11f2ef1897a39aea13df4afbfebb8172ca803a30 Task-number: QTBUG-26413 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* macOS: Correctly scale CALayer contentsRect for child NSViewsTor Arne Vestbø2018-07-201-1/+2
| | | | | | | | | | | | | | | | When flushing parts of a QBackingStore onto child QWindows, and we're in layer-backed mode, we need to set the contentsRect of the layer so that the layer will only show the part of the top-level-owned backingstore image that's relevant for the child window. Since the contentsRect is in unit coordinate system, we need to apply a transform, but this must be based on the top level view's size, not the image size, as the latter will be twice as big on a retina screen, giving the wrong unit rect. Change-Id: I7d6f378ed46a98272efb13406a2878ec1efe734e Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* macOS: Invalidate window shadow after flushing backingstore to CALayerTor Arne Vestbø2018-07-192-88/+83
| | | | | | | | | | The macOS bug preventing us from doing this has now been fixed: http://openradar.appspot.com/radar?id=4976602949615616 Change-Id: I3bfa75d6bf982a051a9b274f530529f4ec4351a0 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* macOS: Add categorized logging to QCocoaGLContextTor Arne Vestbø2018-07-181-5/+7
| | | | | Change-Id: I0fa37457f91d905ed6fb8a2aba20add311705ec7 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* Merge remote-tracking branch 'origin/5.11' into devQt Forward Merge Bot2018-07-171-13/+20
|\ | | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/platforms/cocoa/qcocoawindow.mm src/plugins/platforms/xcb/qxcbintegration.cpp Conflicts git missed: src/plugins/platforms/qnx/qqnxglcontext.cpp Change-Id: I0582cdc9e66e43efe79038b9c43d4f9572ac88fc
| * macOS: Ensure all windows are created on a valid screenTor Arne Vestbø2018-07-051-13/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We rely on AppKit repositioning the window if the original position is not on any of the available screens. We do this by keeping the original position, but using the primary screen as reference. This doesn't work unless the window has a title bar, so in the corner case where the window has an invalid position, we apply the title bar style mask for a brief moment, so that AppKit will place the window correctly. Task-number: QTBUG-69221 Change-Id: If66cac36bf36f051570ba5854951ce4504fe771f Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | QCocoaTheme: Fix system palettes in macOS 10.14Gabriel de Dietrich2018-07-141-14/+50
| | | | | | | | | | | | | | | | | | | | Some colors, like selectedMenuItemColor, won't return the right value anymore. Other can be updated to new system UI element colors for more accuracy. Task-number: QTBUG-68891 Change-Id: I781ef47791648f332208eb780361c60ffb6fcb96 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | macOS: Add logging when applying new window stateTor Arne Vestbø2018-07-131-0/+2
| | | | | | | | | | Change-Id: Ibbd38b27b9251a0a4a9fd4224529e2131e167b89 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* | macOS: Group window state handling in QCocoaWindowTor Arne Vestbø2018-07-131-220/+224
| | | | | | | | | | | | | | | | The flow of changing the window state, especially for fullscreen, is complicated enough that it helps to keep the code together. Change-Id: I216ff95c03fc149f42a0199f7c3bc4fb04ff5e6e Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
* | macOS: Correctly restart display-link when window is moved between screensTor Arne Vestbø2018-07-121-1/+3
| | | | | | | | | | Change-Id: I4b9cdd3d259965f9094ef1bbbca3ebed8df18443 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | macOS: Remove dead updateRequest code based on setNeedsDisplayTor Arne Vestbø2018-07-093-38/+1
| | | | | | | | | | | | | | We're no longer using this code path for QWindow::requestUpdate() Change-Id: I000304a4f1a6ea2c3a4e8268ae978dedd968e07c Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | macOS: Remove dead accessibility debug code in QNSViewTor Arne Vestbø2018-07-082-24/+0
| | | | | | | | | | Change-Id: I00d7f59576d8315f47ea70404460a6e2d133dd1f Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Organize QNSView accessibility code like the rest of the classTor Arne Vestbø2018-07-083-18/+19
| | | | | | | | | | | | | | Drive-by style-fixes were applied as well. Change-Id: I22c17925be41eeaac692ab776dd5b46791265cb3 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Add missing m_ prefix to QNSView currentWheelModifiers memberTor Arne Vestbø2018-07-082-5/+4
| | | | | | | | | | Change-Id: I057db59797f1e18c3a8fc5386f7e1295fe352e02 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Remove unused QNSView member 'currentCustomDragTypes'Tor Arne Vestbø2018-07-082-26/+18
| | | | | | | | | | Change-Id: Id2e37cc81c24edce37cac2bfa843ee669fd13d98 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Merge the two QNSView initializersTor Arne Vestbø2018-07-081-30/+22
| | | | | | | | | | | | | | | | We never call [QNSView init] directly, so there's no point in splitting up the logic. Change-Id: Ie40705a3a78c0d732a3f3378c6e8fa76dc6c68e7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Deliver update request via CVDisplayLink if swapInterval > 0Tor Arne Vestbø2018-07-074-4/+228
| | | | | | | | | | | | | | | | We use GCD for marshaling the display link update over to the main thread, as Qt requires that the update request is delivered there. Change-Id: I318a5b8f27dc5094ce71244401308a4044c41b39 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Move wantsBestResolutionOpenGLSurface logic to QNSView initializerTor Arne Vestbø2018-07-072-13/+12
| | | | | | | | | | Change-Id: If9d76a8e82ce034eccc5130e036dfeae12377cac Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Remove explicit call to setWindowIcon in QCocoaWindow ctorTor Arne Vestbø2018-07-071-3/+1
| | | | | | | | | | | | | | | | | | Window setup should happen in QCocoaWindow::recreateWindowIfNeeded(), and there we already call setWindowFilePath(), which takes care of setting the window icon. Change-Id: Iaa2f42c694cf8d251703cc56648e5819edd79bec Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Remove declarative override of -[NSView wantsLayer]Alexandru Croitor2018-07-052-8/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The -[NSView setWantsLayer:] method may have side effects that extend beyond just setting an internal boolean property, so we need to ensure it gets called. This was observed on e.g. macOS 10.12.5, where the method ends up creating the internal backing layer. On later macOS versions the method just emits KVO notifications for wantsLayer, but these may in turn result in similar logic being triggered. The issue was masked somewhat by AppKit itself calling the method from e.g. -[NSWindow setContentView:], so we still got the backing layer created. The problem appeared when running binaries built against an older SDK (10.6 in this case), which triggered AppKit to not call -[NSView setWantsLayer:], due to __NSViewLayerBackWindowFrame() in that case returning false. This change removes the overridden -[NSView wantsLayer], and replaces it with an explicit call to -[NSView setWantsLayer] when creating a new QNSView, essentially revering c8c8cc790a315710b0dae2282dc32. Task-number: PYSIDE-724 Task-number: PYSIDE-734 Change-Id: Idaff4ed38838311b37da4925b1eec241e077dbcc Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-07-024-13/+40
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/platforms/cocoa/qnsview.mm src/plugins/platforms/cocoa/qnsview_dragging.mm src/plugins/platforms/ios/qiosinputcontext.mm src/plugins/platforms/xcb/qxcbconnection.cpp src/plugins/platforms/xcb/qxcbconnection_xi2.cpp src/plugins/platforms/xcb/qxcbwindow.cpp src/tools/androiddeployqt/main.cpp Was moved from qttools into qtbase in 5.11. So re-apply 32398e4d here. tests/auto/corelib/global/qlogging/test/test.pro tests/auto/corelib/global/qlogging/tst_qlogging.cpp tests/auto/corelib/io/qfile/tst_qfile.cpp tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp tests/auto/corelib/thread/qthreadstorage/test/test.pro tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp tests/auto/widgets/kernel/qapplication/test/test.pro Done-with: Gatis Paeglis <gatis.paeglis@qt.io> Done-with: Mårten Nordheim <marten.nordheim@qt.io> Done-with: Oliver Wolff <oliver.wolff@qt.io> Change-Id: Id970486c5315a1718c540f00deb2633533e8fc7b
| * macOS: Guard non-reentrant uses of NSOpenGLContextTor Arne Vestbø2018-06-271-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NSOpenGLContext should be re-entrant, but is not in practice, resulting in deadlocks when there are two render threads, eg: thread #23, name = 'QSGRenderThread' frame #0: 0x00007fff5c6dda4e libsystem_kernel.dylib`__psynch_mutexwait + 10 frame #1: 0x00007fff5c8a5b9d libsystem_pthread.dylib`_pthread_mutex_lock_wait + 83 frame #2: 0x00007fff5c8a34c8 libsystem_pthread.dylib`_pthread_mutex_lock_slow + 253 frame #3: 0x00007fff31ebb52e AppKit`flush_notify + 110 frame #4: 0x00007fff3e75ee2a GLEngine`glSwap_Exec + 186 frame #5: 0x00007fff3e740797 OpenGL`CGLFlushDrawable + 59 frame #6: 0x00007fff31ad43ac AppKit`-[NSOpenGLContext flushBuffer] + 27 ... Task-number: QTBUG-69040 Change-Id: I6f28b4cc5faf61ae93f66353ce2abdf8c223d994 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * Cocoa: handle WindowMaximizeButtonHint as wellMorten Johan Sørvig2018-06-211-0/+2
| | | | | | | | | | Change-Id: I6af265d48e83fc3fc0ce86903820c2b37db05f03 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
| * Cocoa: Tool windows should always be resizableMorten Johan Sørvig2018-06-211-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Undocked dock windows have the following flags: Tool|X11BypassWindowManagerHint|WindowTitleHint| WindowSystemMenuHint|CustomizeWindowHint|WindowCloseButtonHint CustomizeWindowHint with no WindowMaximizeButtonHint means that we disable window resize in order to remove the zoom button (this is perhaps questionable, but is established behavior). That will however break dock windows: add exception for Qt::Tool. After refactoring we discover this special case, again. See previous fix in d37643c43. Change-Id: I67a09341e75b92fdb3108ea93901295c39107fe1 History-repeats: QTBUG-46882 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
| * cocoa: Don’t trigger security dialog on dragMorten Johan Sørvig2018-06-211-1/+5
| | | | | | | | | | | | | | | | | | macOS 10.14+ will display an “Accessibility Access” security dialog if we generate mouse events, so don’t. Task-number: QTBUG-68830 Change-Id: If832ca3cd49ec6bdad1a8188feab884b6562e9d2 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
| * macOS: Manually compute frame rect for zoomed/maximized stateTor Arne Vestbø2018-06-051-11/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We cannot rely on AppKit to compute the zoomed frame for us, as it will not allow borderless windows to be zoomed, and also has bugs in corner cases with multiple screens, where the zoomed window jumps from the current screen to a nearby screen. The latter happens when the zoomed rect overlaps more with a nearby screen than it does with the current screen. In this case AppKit zooms the window on the nearby screen, but this is unexpected from the user's perspective, who zoomed the window on the current screen, so we make sure to always keep the window on the current screen by repositioning the window correspondingly. Task-number: QTBUG-67543 Change-Id: I8762c5cbf2e3b317a6caf11d820712596e15114a Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | Merge remote-tracking branch 'origin/5.11' into devLiang Qi2018-06-073-8/+19
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/corelib/kernel/qeventdispatcher_cf.mm src/gui/kernel/qguiapplication_p.h src/gui/kernel/qwindowsysteminterface.cpp src/gui/kernel/qwindowsysteminterface.h src/plugins/platforms/cocoa/qcocoawindow.mm src/plugins/platforms/cocoa/qnswindowdelegate.mm src/plugins/platforms/ios/qioseventdispatcher.mm src/plugins/platforms/windows/qwindowsdrag.h src/plugins/platforms/windows/qwindowsinternalmimedata.h src/plugins/platforms/windows/qwindowsmime.cpp src/plugins/platforms/winrt/qwinrtscreen.cpp Change-Id: Ic817f265c2386e83839d2bb9ef7419cb29705246
| * macOS: Allow moving out of fullscreen state using titlebar buttonTor Arne Vestbø2018-05-301-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Even if the window isn't configured with Qt::WindowFullscreenButtonHint, the user might call showFullScreen(), which we respect and move the window into fullscreen. In this state, we need to keep the collection behavior as NSWindowCollectionBehaviorFullScreenPrimary, otherwise the zoom button will have no effect and the user can't move out of fullscreen. Change-Id: I77a4b4ee4b42fabc4c6ed2f529ff57acc31d6c24 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
| * Make sure we can build with -no-feature-draganddropJoerg Bornemann2018-05-291-0/+1
| | | | | | | | | | | | | | | | | | We move QInternalMimeData to a separate file, because this class is used, even if draganddrop is disabled. From now on, include qinternalmimedata_p.h instead of qdnd_p.h for QInternalMimeData. Change-Id: I594e08e2e90d574dc445119091686b4b69e4731b Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
| * macOS: Respect maximum window size when computing zoomed state geometryTor Arne Vestbø2018-05-291-7/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | AppKit will normally compute this automatically based on the contentMaxSize property of the NSWindow, which we set correctly based on the window's maximum size, but since we ignore the frame proposed by AppKit (due to not working for borderless windows), we need to take the maximum size into account ourselves. We follow the lead of QCocoaWindow::propagateSizeHints(), and interpret the window's maximum size as referring to the client area size, not including the frame geometry, but AppKit expects the NSWindow's frame, so we need to manually add the frame. In addition, AppKit expects the frame in the native coordinate system, so we need to map to it. This was an existing bug, that never manifested before taking the maximum size into account. Task-number: QTBUG-67376 Change-Id: Id4cf6ff5640610f809472e5b1d591b4ec17df602 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Make sure QNSPanel also gets a debug descriptionTor Arne Vestbø2018-06-051-0/+1
| | | | | | | | | | Change-Id: I5de08c3493b02a8e98ba3c4fe3922f5f9fd6e2c2 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Deliver screen changes synchronouslyTor Arne Vestbø2018-06-051-2/+2
| | | | | | | | | | Change-Id: Iea8fcb69b6c05c4f81fedb4ec423aed89d9d2d3c Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: Make layer-backed mode the defaultTor Arne Vestbø2018-05-311-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QWindows are still backed by NSViews, but these views render to a CoreAnimation layer instead of directly to the top level NSWindow. This is the direction Apple is going (and is the only available option on iOS/tvOS), so we want to move away from the existing code path as soon as possible. The default can be reversed by setting QT_MAC_WANTS_LAYER=0, or the _q_mac_wantsLayer property on QWindow. [ChangeLog][macOS] Layer-backed mode is now the default for QWindow. Change-Id: Ibb9cc7541b179cad215d0daee14aeb1b54be614c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: minor refactoring in mouse handlers for nsview/systemtrayiconMikhail Svetkin2018-05-313-23/+33
| | | | | | | | | | | | | | Use new helper functions for mouse events Change-Id: I01e83a228deb16cbdb1d7c8c628a92d48055ee2b Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | macOS: Minor metal support nits/cleanupsTor Arne Vestbø2018-05-301-3/+2
| | | | | | | | | | | | Change-Id: I840426ebf35b0fec64e92386fc3e1cabd91ced25 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | Cocoa Menus: Add support for menu items in window-less appsGabriel de Dietrich2018-05-234-30/+65
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since we moved the menu items validation and target/action to QNSView (thus relying on the responder chain), we need to take care of case when the applications that doesn't have any window open. By adding similar methods to QCocoaApplicationDelegate, the last responder, we ensure the menu items will be validated and will trigger properly. This is particularly necessary for dock menu items, which live separately from any top-level widget. Dock menu added to Menurama which won't quit when its last window is closed. This way we can test that dock menu items will trigger in the absence of any window. Change-Id: I56d864eb9da1f8dd5adb2a3b6c3dd5304c723117 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | macOS: minor refactoring in handler of global monitorMikhail Svetkin2018-05-151-5/+6
| | | | | | | | | | | | | | Use new helper functions for mouse events and buttons Change-Id: Idb74fbd4ffde0c22b3d4bbddb5761567081bdf7c Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
* | Vulkan: share library loading implementationMorten Johan Sørvig2018-05-142-12/+1
| | | | | | | | | | | | | | | | The macOS, Windows, and XCB implementations are identical and can be moved to QBasicPlatformVulkanInstance. Change-Id: Id84b27ffd87f86afe3798c4ad2743ba05e6190d3 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | Vulkan: Share destroySurface() implementationMorten Johan Sørvig2018-05-142-16/+0
| | | | | | | | | | | | | | | | The macOS, Windows, and XCB implementations are identical and can be moved to QBasicPlatformVulkanInstance. Change-Id: I1380b2bd03080710084a1458bdce3a362ba5c287 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | macOS: Add QSurfaceType::MetalSurfaceMorten Johan Sørvig2018-05-111-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add API to activate previously added Metal layer implementation. This provides minimal support, and unlike VulkanSurface there is no separate QWindow subclass. What this does do is configure the QWindow to use a Metal layer, and to send expose/update events when the layer content should be redrawn. Qt will also update the layer’s drawableSize and contentsScale when needed. Application code can make use of this by accessing the QWindow layer, which will be a CAMetalLayer: CAMetalLayer *metalLayer = reinterpret_cast<CAMetalLayer *>( reinterpret_cast<NSView *>(window->winId()).layer); Change-Id: I514f5186133c3e610fd4e53ca91fe9c85c6d016e Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | macOS: Transition to new QPA dag-and-drop APIMikhail Svetkin2018-05-084-25/+105
| | | | | | | | | | | | | | | | | | | | The new API allows us to pass the mouse buttons and keyboard modifiers along with the QWSI event. Task-number: QTBUG-57168 Change-Id: Ic54c012d1593d922e7dcd31facab2f2c630c7996 Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
* | macOS: Experimental Vulkan support via MoltenVKMorten Johan Sørvig2018-05-089-7/+259
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add support for QSurface::VulkanSurface and QVulkanWindow. Usage: 1) Build MoltenVK according to instructions 2) Configure Qt: ./configure -I /path/to/MoltenVK/Package/Release/MoltenVK/include 3) export QT_VULKAN_LIB=/path/to/MoltenVK/Package/Release/MoltenVK/macOS/libMoltenVK. Implement support for QSurface::VulkanSurface by enabling layer mode for QNSView and then creating a CAMetalLayer, which the MoltenVK translation layer can run on. MoltenVK provides an implementation of the Vulcan API, which means that the platform integration is similar to other platforms: implement a QCocoaVulkanInstance where we pass the QNSView instance to the vkCreateMacOSSurfaceMVK Vulkan surface constructor function. Using Vulkan directly without QVulkanWindow is possible, but not tested. We currently load libMoltenVK at run-time and use the existing QT_VULKAN_LIB environment variable to set its path. For deployment purposes it would be better to link against MoltenVK.frameworkm, but this Task-number: QTBUG-66966 Change-Id: I04ec6289c40b199dca9fed32902b5d2ad4e9c030 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>