6@implementation QNSView (Drawing)
10 if (qt_mac_resolveOption(-1, m_platformWindow->window(),
11 "_q_mac_wantsLayer",
"QT_MAC_WANTS_LAYER") != -1) {
12 qCWarning(lcQpaDrawing) <<
"Layer-backing is always enabled."
13 <<
" QT_MAC_WANTS_LAYER/_q_mac_wantsLayer has no effect.";
16 self.wantsLayer = YES;
21 if (!m_platformWindow)
23 return m_platformWindow->isOpaque();
33- (BOOL)shouldUseMetalLayer
57- (CALayer *)makeBackingLayer
59 if ([self shouldUseMetalLayer]) {
63 if ([MTLCreateSystemDefaultDevice() autorelease]) {
64 return [CAMetalLayer layer];
66 qCWarning(lcQpaDrawing) <<
"Failed to create QWindow::MetalSurface."
67 <<
"Metal is not supported by any of the GPUs in this system.";
71 return [
super makeBackingLayer];
81- (
void)setLayer:(CALayer *)layer
84 << (
self.wantsLayer ?
"layer-backed" :
"layer-hosted")
87 if (
layer.delegate &&
layer.delegate != self) {
88 qCWarning(lcQpaDrawing) <<
"Layer already has delegate" <<
layer.delegate
89 <<
"This delegate is responsible for all view updates for" <<
self;
94 [
super setLayer:layer];
101 [
self updateLayerContentsScale];
103 if (
self.opaque && lcQpaDrawing().isDebugEnabled()) {
107 layer.backgroundColor = NSColor.magentaColor.CGColor;
114- (NSViewLayerContentsRedrawPolicy)layerContentsRedrawPolicy
118 return NSViewLayerContentsRedrawDuringViewResize;
121- (NSViewLayerContentsPlacement)layerContentsPlacement
127 return NSViewLayerContentsPlacementTopLeft;
130- (
void)viewDidChangeBackingProperties
132 qCDebug(lcQpaDrawing) <<
"Backing properties changed for" <<
self;
135 [
self updateLayerContentsScale];
141 [
self setNeedsDisplay:YES];
144- (
void)updateLayerContentsScale
153 auto devicePixelRatio = m_platformWindow->devicePixelRatio();
154 qCDebug(lcQpaDrawing) <<
"Updating" <<
self.layer <<
"content scale to" << devicePixelRatio;
155 self.layer.contentsScale = devicePixelRatio;
164- (BOOL)
layer:(CALayer *)layer shouldInheritContentsScale:(
CGFloat)scale fromWindow:(NSWindow *)window
178- (
void)drawRect:(NSRect)dirtyBoundingRect
184 qCWarning(lcQpaDrawing) <<
"[QNSView drawRect] called for layer backed view";
191- (
void)displayLayer:(CALayer *)layer
194 "The displayLayer code path should only be hit for our own layer");
196 if (!m_platformWindow)
199 if (!NSThread.isMainThread) {
203 qCWarning(lcQpaDrawing) <<
"Display non non-main thread! Deferring to main thread";
204 dispatch_async(dispatch_get_main_queue(), ^{
self.needsDisplay = YES; });
208 qCDebug(lcQpaDrawing) <<
"[QNSView displayLayer]" << m_platformWindow->window();
209 m_platformWindow->handleExposeEvent(QRectF::fromCGRect(
self.bounds).toRect());
SurfaceType
The SurfaceType enum describes what type of surface this is.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define qCWarning(category,...)
#define qCDebug(category,...)
GLenum GLenum GLenum GLenum GLenum scale
#define Q_ASSERT_X(cond, x, msg)