mirror of https://github.com/cutefishos/qt-plugins
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.2 KiB
C++
149 lines
4.2 KiB
C++
/*************************************************************************
|
|
* Copyright (C) 2014 by Hugo Pereira Da Costa <hugo.pereira@free.fr> *
|
|
* Copyright (C) 2020 by Vlad Zahorodnii <vlad.zahorodnii@kde.org> *
|
|
* Copyright (C) 2020, 2020 by Reven Martin <revenmartin@gmail.com> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the *
|
|
* Free Software Foundation, Inc., *
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
*************************************************************************/
|
|
|
|
#ifndef SHADOWHELPER_H
|
|
#define SHADOWHELPER_H
|
|
|
|
#include "tileset.h"
|
|
#include <KWindowShadow>
|
|
|
|
#include <QObject>
|
|
#include <QPointer>
|
|
#include <QMap>
|
|
#include <QMargins>
|
|
#include <QSet>
|
|
|
|
struct ShadowParams
|
|
{
|
|
ShadowParams() = default;
|
|
|
|
ShadowParams(const QPoint &offset, int radius, qreal opacity):
|
|
offset(offset),
|
|
radius(radius),
|
|
opacity(opacity)
|
|
{}
|
|
|
|
QPoint offset;
|
|
int radius = 0;
|
|
qreal opacity = 0;
|
|
};
|
|
|
|
struct CompositeShadowParams
|
|
{
|
|
CompositeShadowParams() = default;
|
|
|
|
CompositeShadowParams(
|
|
const QPoint &offset,
|
|
const ShadowParams &shadow1,
|
|
const ShadowParams &shadow2)
|
|
: offset(offset)
|
|
, shadow1(shadow1)
|
|
, shadow2(shadow2) {}
|
|
|
|
bool isNone() const
|
|
{ return qMax(shadow1.radius, shadow2.radius) == 0; }
|
|
|
|
QPoint offset;
|
|
ShadowParams shadow1;
|
|
ShadowParams shadow2;
|
|
};
|
|
|
|
//* handle shadow pixmaps passed to window manager via X property
|
|
class ShadowHelper: public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
//* constructor
|
|
ShadowHelper(QObject *);
|
|
|
|
//* destructor
|
|
~ShadowHelper() override;
|
|
|
|
//* shadow params from size enum
|
|
static CompositeShadowParams lookupShadowParams(int shadowSizeEnum);
|
|
|
|
//* register widget
|
|
bool registerWidget(QWidget *, bool force = false);
|
|
|
|
//* unregister widget
|
|
void unregisterWidget(QWidget *);
|
|
|
|
//* event filter
|
|
bool eventFilter(QObject *, QEvent *) override;
|
|
|
|
void setFrameRadius(qreal radius) { m_frameRadius = radius; }
|
|
|
|
//* shadow tiles
|
|
/** is public because it is also needed for mdi windows */
|
|
// TileSet shadowTiles();
|
|
|
|
TileSet shadowTiles(const qreal frameRadius);
|
|
|
|
protected Q_SLOTS:
|
|
//* unregister widget
|
|
void objectDeleted(QObject *);
|
|
|
|
protected:
|
|
//* true if widget is a menu
|
|
bool isMenu(QWidget *) const;
|
|
|
|
//* true if widget is a tooltip
|
|
bool isToolTip(QWidget *) const;
|
|
|
|
//* dock widget
|
|
bool isDockWidget(QWidget *) const;
|
|
|
|
//* toolbar
|
|
bool isToolBar(QWidget *) const;
|
|
|
|
//* accept widget
|
|
bool acceptWidget(QWidget *) const;
|
|
|
|
// create shadow tile from pixmap
|
|
KWindowShadowTile::Ptr createTile(const QPixmap &);
|
|
|
|
//* installs shadow on given widget in a platform independent way
|
|
// void installShadows( QWidget * );
|
|
|
|
void installShadows(QWidget *widget, TileSet shadowTiles);
|
|
|
|
//* uninstalls shadow on given widget in a platform independent way
|
|
void uninstallShadows(QWidget *);
|
|
|
|
//* gets the shadow margins for the given widget
|
|
QMargins shadowMargins(QWidget*, TileSet) const;
|
|
|
|
private:
|
|
//* registered widgets
|
|
QSet<QWidget *> m_widgets;
|
|
|
|
//* managed shadows
|
|
QMap<QWidget *, KWindowShadow *> m_shadows;
|
|
|
|
qreal m_frameRadius;
|
|
|
|
//* number of tiles
|
|
enum { numTiles = 8 };
|
|
};
|
|
|
|
#endif
|