File indexing completed on 2024-05-19 05:32:22
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2013 Martin Gräßlin <mgraesslin@kde.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 #pragma once 0010 0011 #include "platformsupport/scenes/qpainter/qpainterbackend.h" 0012 0013 #include "scene/decorationitem.h" 0014 #include "scene/shadowitem.h" 0015 #include "scene/workspacescene.h" 0016 0017 namespace KWin 0018 { 0019 0020 class KWIN_EXPORT WorkspaceSceneQPainter : public WorkspaceScene 0021 { 0022 Q_OBJECT 0023 0024 public: 0025 explicit WorkspaceSceneQPainter(QPainterBackend *backend); 0026 ~WorkspaceSceneQPainter() override; 0027 0028 std::unique_ptr<DecorationRenderer> createDecorationRenderer(Decoration::DecoratedClientImpl *impl) override; 0029 std::unique_ptr<ShadowTextureProvider> createShadowTextureProvider(Shadow *shadow) override; 0030 0031 bool animationsSupported() const override 0032 { 0033 return false; 0034 } 0035 0036 QPainterBackend *backend() const 0037 { 0038 return m_backend; 0039 } 0040 0041 private: 0042 QPainterBackend *m_backend; 0043 }; 0044 0045 class QPainterShadowTextureProvider : public ShadowTextureProvider 0046 { 0047 public: 0048 explicit QPainterShadowTextureProvider(Shadow *shadow); 0049 0050 void update() override; 0051 }; 0052 0053 class SceneQPainterDecorationRenderer : public DecorationRenderer 0054 { 0055 Q_OBJECT 0056 public: 0057 enum class DecorationPart : int { 0058 Left, 0059 Top, 0060 Right, 0061 Bottom, 0062 Count 0063 }; 0064 explicit SceneQPainterDecorationRenderer(Decoration::DecoratedClientImpl *client); 0065 0066 void render(const QRegion ®ion) override; 0067 0068 QImage image(DecorationPart part) const; 0069 0070 private: 0071 void resizeImages(); 0072 QImage m_images[int(DecorationPart::Count)]; 0073 }; 0074 0075 } // KWin