diff --git a/plugins/platforms/drm/drm_object_plane.h b/plugins/platforms/drm/drm_object_plane.h --- a/plugins/platforms/drm/drm_object_plane.h +++ b/plugins/platforms/drm/drm_object_plane.h @@ -48,6 +48,7 @@ CrtcH, FbId, CrtcId, + Rotation, Count }; @@ -57,7 +58,17 @@ Overlay, Count }; - + + enum class Transformation { + Rotate0 = 1 << 0, + Rotate90 = 1 << 1, + Rotate180 = 1 << 2, + Rotate270 = 1 << 3, + ReflectX = 1 << 4, + ReflectY = 1 << 5 + }; + Q_DECLARE_FLAGS(Transformations, Transformation); + bool atomicInit(); bool initProps(); TypeIndex type(); @@ -79,6 +90,7 @@ m_current = b; } void setNext(DrmBuffer *b); + void setTransformation(Transformations t); bool atomicPopulate(drmModeAtomicReq *req); void flipBuffer(); @@ -97,5 +109,7 @@ } +Q_DECLARE_OPERATORS_FOR_FLAGS(KWin::DrmPlane::Transformations) + #endif diff --git a/plugins/platforms/drm/drm_object_plane.cpp b/plugins/platforms/drm/drm_object_plane.cpp --- a/plugins/platforms/drm/drm_object_plane.cpp +++ b/plugins/platforms/drm/drm_object_plane.cpp @@ -75,6 +75,7 @@ QByteArrayLiteral("CRTC_H"), QByteArrayLiteral("FB_ID"), QByteArrayLiteral("CRTC_ID"), + QByteArrayLiteral("rotation") }; QVector typeNames = { @@ -119,6 +120,11 @@ m_next = b; } +void DrmPlane::setTransformation(Transformations t) +{ + setValue(int(PropertyIndex::Rotation), int(t)); +} + bool DrmPlane::atomicPopulate(drmModeAtomicReq *req) { bool ret = true;