Add support for setMask to set input region
Also fix input region handling in compositor. Change-Id: If88ad6a03443526eddee045d7af54daf5057373a Done-with: Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
This commit is contained in:
parent
5d30b5086d
commit
e1514abaea
@ -96,6 +96,16 @@ QWaylandShellSurface *QWaylandDisplay::createShellSurface(QWaylandWindow *window
|
|||||||
return Q_NULLPTR;
|
return Q_NULLPTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ::wl_region *QWaylandDisplay::createRegion(const QRegion &qregion)
|
||||||
|
{
|
||||||
|
struct ::wl_region *region = mCompositor.create_region();
|
||||||
|
|
||||||
|
Q_FOREACH (const QRect &rect, qregion.rects())
|
||||||
|
wl_region_add(region, rect.x(), rect.y(), rect.width(), rect.height());
|
||||||
|
|
||||||
|
return region;
|
||||||
|
}
|
||||||
|
|
||||||
QWaylandClientBufferIntegration * QWaylandDisplay::clientBufferIntegration() const
|
QWaylandClientBufferIntegration * QWaylandDisplay::clientBufferIntegration() const
|
||||||
{
|
{
|
||||||
return mWaylandIntegration->clientBufferIntegration();
|
return mWaylandIntegration->clientBufferIntegration();
|
||||||
|
@ -103,6 +103,7 @@ public:
|
|||||||
|
|
||||||
struct wl_surface *createSurface(void *handle);
|
struct wl_surface *createSurface(void *handle);
|
||||||
QWaylandShellSurface *createShellSurface(QWaylandWindow *window);
|
QWaylandShellSurface *createShellSurface(QWaylandWindow *window);
|
||||||
|
struct ::wl_region *createRegion(const QRegion &qregion);
|
||||||
|
|
||||||
QWaylandClientBufferIntegration *clientBufferIntegration() const;
|
QWaylandClientBufferIntegration *clientBufferIntegration() const;
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
|
|||||||
, mMouseDevice(0)
|
, mMouseDevice(0)
|
||||||
, mMouseSerial(0)
|
, mMouseSerial(0)
|
||||||
, mState(Qt::WindowNoState)
|
, mState(Qt::WindowNoState)
|
||||||
|
, mMask()
|
||||||
{
|
{
|
||||||
init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this)));
|
init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this)));
|
||||||
|
|
||||||
@ -124,6 +125,7 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
|
|||||||
setOrientationMask(window->screen()->orientationUpdateMask());
|
setOrientationMask(window->screen()->orientationUpdateMask());
|
||||||
setWindowFlags(window->flags());
|
setWindowFlags(window->flags());
|
||||||
setGeometry_helper(window->geometry());
|
setGeometry_helper(window->geometry());
|
||||||
|
setMask(window->mask());
|
||||||
setWindowStateInternal(window->windowState());
|
setWindowStateInternal(window->windowState());
|
||||||
handleContentOrientationChange(window->contentOrientation());
|
handleContentOrientationChange(window->contentOrientation());
|
||||||
}
|
}
|
||||||
@ -262,6 +264,24 @@ void QWaylandWindow::lower()
|
|||||||
mShellSurface->lower();
|
mShellSurface->lower();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QWaylandWindow::setMask(const QRegion &mask)
|
||||||
|
{
|
||||||
|
if (mMask == mask)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mMask = mask;
|
||||||
|
|
||||||
|
if (mMask.isEmpty()) {
|
||||||
|
set_input_region(0);
|
||||||
|
} else {
|
||||||
|
struct ::wl_region *region = mDisplay->createRegion(mMask);
|
||||||
|
set_input_region(region);
|
||||||
|
wl_region_destroy(region);
|
||||||
|
}
|
||||||
|
|
||||||
|
commit();
|
||||||
|
}
|
||||||
|
|
||||||
void QWaylandWindow::configure(uint32_t edges, int32_t width, int32_t height)
|
void QWaylandWindow::configure(uint32_t edges, int32_t width, int32_t height)
|
||||||
{
|
{
|
||||||
QMutexLocker resizeLocker(&mResizeLock);
|
QMutexLocker resizeLocker(&mResizeLock);
|
||||||
|
@ -139,6 +139,8 @@ public:
|
|||||||
void raise() Q_DECL_OVERRIDE;
|
void raise() Q_DECL_OVERRIDE;
|
||||||
void lower() Q_DECL_OVERRIDE;
|
void lower() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
void setMask(const QRegion ®ion) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
void requestActivateWindow() Q_DECL_OVERRIDE;
|
void requestActivateWindow() Q_DECL_OVERRIDE;
|
||||||
bool isExposed() const Q_DECL_OVERRIDE;
|
bool isExposed() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
@ -215,6 +217,7 @@ protected:
|
|||||||
int mMouseSerial;
|
int mMouseSerial;
|
||||||
|
|
||||||
Qt::WindowState mState;
|
Qt::WindowState mState;
|
||||||
|
QRegion mMask;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool setWindowStateInternal(Qt::WindowState flags);
|
bool setWindowStateInternal(Qt::WindowState flags);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user