diff --git a/src/plugins/platforms/ios/qioswindow.h b/src/plugins/platforms/ios/qioswindow.h index 90380e4bb06..6a50ccfbcec 100644 --- a/src/plugins/platforms/ios/qioswindow.h +++ b/src/plugins/platforms/ios/qioswindow.h @@ -56,6 +56,8 @@ public: void requestUpdate() override; + void setMask(const QRegion ®ion) override; + #if QT_CONFIG(opengl) CAEAGLLayer *eaglLayer() const; #endif diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm index 8de094533bf..908ead2e5d2 100644 --- a/src/plugins/platforms/ios/qioswindow.mm +++ b/src/plugins/platforms/ios/qioswindow.mm @@ -11,7 +11,10 @@ #include "quiview.h" #include "qiosinputcontext.h" +#include + #include +#include #include #if QT_CONFIG(opengl) @@ -54,6 +57,7 @@ QIOSWindow::QIOSWindow(QWindow *window) setWindowState(window->windowStates()); setOpacity(window->opacity()); + setMask(QHighDpi::toNativeLocalRegion(window->mask(), window)); Qt::ScreenOrientation initialOrientation = window->contentOrientation(); if (initialOrientation != Qt::PrimaryOrientation) { @@ -355,6 +359,20 @@ void QIOSWindow::requestUpdate() static_cast(screen())->setUpdatesPaused(false); } +void QIOSWindow::setMask(const QRegion ®ion) +{ + if (!region.isEmpty()) { + QCFType maskPath = CGPathCreateMutable(); + for (const QRect &r : region) + CGPathAddRect(maskPath, nullptr, r.toCGRect()); + CAShapeLayer *maskLayer = [CAShapeLayer layer]; + maskLayer.path = maskPath; + m_view.layer.mask = maskLayer; + } else { + m_view.layer.mask = nil; + } +} + #if QT_CONFIG(opengl) CAEAGLLayer *QIOSWindow::eaglLayer() const {