File indexing completed on 2024-05-05 05:35:25
0001 #ifndef oxygenshadowhelper_h 0002 #define oxygenshadowhelper_h 0003 0004 ////////////////////////////////////////////////////////////////////////////// 0005 // oxygenshadowhelper.h 0006 // handle shadow pixmaps passed to window manager via X property 0007 // ------------------- 0008 // 0009 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0010 // SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0011 // 0012 // SPDX-License-Identifier: MIT 0013 ////////////////////////////////////////////////////////////////////////////// 0014 0015 #include "oxygen.h" 0016 #include "oxygentileset.h" 0017 0018 #include <KWindowShadow> 0019 0020 #include <QMap> 0021 #include <QMargins> 0022 #include <QObject> 0023 #include <QSet> 0024 0025 namespace Oxygen 0026 { 0027 //* forward declaration 0028 class ShadowCache; 0029 class StyleHelper; 0030 0031 //* handle shadow pixmaps passed to window manager via X property 0032 class ShadowHelper : public QObject 0033 { 0034 Q_OBJECT 0035 0036 public: 0037 //* constructor 0038 ShadowHelper(QObject *, StyleHelper &); 0039 0040 //* destructor 0041 ~ShadowHelper(void) override; 0042 0043 //* reset 0044 void reset(void); 0045 0046 //* register widget 0047 bool registerWidget(QWidget *, bool force = false); 0048 0049 //* unregister widget 0050 void unregisterWidget(QWidget *); 0051 0052 //* reparse cache config (must be followed by loadConfig) 0053 void reparseCacheConfig(void); 0054 0055 //* load config 0056 void loadConfig(void); 0057 0058 //* event filter 0059 bool eventFilter(QObject *, QEvent *) override; 0060 0061 private Q_SLOTS: 0062 0063 //* unregister widget 0064 void widgetDeleted(QObject *); 0065 0066 //* unregister window 0067 void windowDeleted(QObject *); 0068 0069 private: 0070 //* true if widget is a menu 0071 bool isMenu(QWidget *) const; 0072 0073 //* true if widget is a tooltip 0074 bool isToolTip(QWidget *) const; 0075 0076 //* dock widget 0077 bool isDockWidget(QWidget *) const; 0078 0079 //* toolbar 0080 bool isToolBar(QWidget *) const; 0081 0082 //* accept widget 0083 bool acceptWidget(QWidget *) const; 0084 0085 //* shadow cache 0086 const ShadowCache &shadowCache(void) const 0087 { 0088 return *_shadowCache; 0089 } 0090 0091 //* shadow cache 0092 ShadowCache &shadowCache(void) 0093 { 0094 return *_shadowCache; 0095 } 0096 0097 // create shadow tiles from tileset 0098 const QVector<KWindowShadowTile::Ptr> &createPlatformTiles(bool isDockWidget); 0099 0100 // create a shadow tile from pixmap 0101 KWindowShadowTile::Ptr createPlatformTile(const QPixmap &); 0102 0103 //* installs shadow on given widget in a platform independent way 0104 void installShadows(QWidget *); 0105 0106 //* uninstalls shadow on given widget in a platform independent way 0107 void uninstallShadows(QWidget *); 0108 0109 //* gets the shadow margins for the given widget 0110 QMargins shadowMargins(QWidget *) const; 0111 0112 //* helper 0113 StyleHelper &_helper; 0114 0115 //* cache 0116 ShadowCache *_shadowCache; 0117 0118 //* set of registered widgets 0119 QSet<QWidget *> _widgets; 0120 0121 //* map of managed shadows 0122 QMap<QWindow *, KWindowShadow *> _shadows; 0123 0124 //*@name shadow tilesets 0125 //@{ 0126 TileSet _tiles; 0127 TileSet _dockTiles; 0128 //@} 0129 0130 //* number of shadow tiles 0131 enum { numTiles = 8 }; 0132 0133 //*@name shared shadow tiles 0134 //@{ 0135 QVector<KWindowShadowTile::Ptr> _platformTiles; 0136 QVector<KWindowShadowTile::Ptr> _platformDockTiles; 0137 //@} 0138 0139 //* shadow size 0140 int _size; 0141 }; 0142 } 0143 0144 #endif