171 lines
5.1 KiB
C++
171 lines
5.1 KiB
C++
#ifndef BREEZE_DECORATION_H
|
|
#define BREEZE_DECORATION_H
|
|
|
|
/*
|
|
* SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
|
|
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
|
*/
|
|
|
|
#include "breeze.h"
|
|
#include "breezesettings.h"
|
|
|
|
#include <KDecoration2/Decoration>
|
|
#include <KDecoration2/DecoratedClient>
|
|
#include <KDecoration2/DecorationSettings>
|
|
|
|
#include <QPalette>
|
|
#include <QVariant>
|
|
#include <QVariantAnimation>
|
|
|
|
class QVariantAnimation;
|
|
|
|
namespace KDecoration2
|
|
{
|
|
class DecorationButton;
|
|
class DecorationButtonGroup;
|
|
}
|
|
|
|
namespace Breeze
|
|
{
|
|
class SizeGrip;
|
|
class Decoration : public KDecoration2::Decoration
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
|
|
//* constructor
|
|
explicit Decoration(QObject *parent = nullptr, const QVariantList &args = QVariantList());
|
|
|
|
//* destructor
|
|
virtual ~Decoration();
|
|
|
|
//* paint
|
|
void paint(QPainter *painter, const QRect &repaintRegion) override;
|
|
|
|
//* internal settings
|
|
InternalSettingsPtr internalSettings() const
|
|
{ return m_internalSettings; }
|
|
|
|
qreal animationsDuration() const
|
|
{ return m_animation->duration();}
|
|
|
|
//* caption height
|
|
int captionHeight() const;
|
|
|
|
//* button height
|
|
int buttonHeight() const;
|
|
|
|
//*@name active state change animation
|
|
//@{
|
|
void setOpacity( qreal );
|
|
|
|
qreal opacity() const
|
|
{ return m_opacity; }
|
|
|
|
//@}
|
|
|
|
//*@name colors
|
|
//@{
|
|
QColor titleBarColor() const;
|
|
QColor outlineColor() const;
|
|
QColor fontColor() const;
|
|
//@}
|
|
|
|
//*@name maximization modes
|
|
//@{
|
|
inline bool isMaximized() const;
|
|
inline bool isMaximizedHorizontally() const;
|
|
inline bool isMaximizedVertically() const;
|
|
|
|
inline bool isLeftEdge() const;
|
|
inline bool isRightEdge() const;
|
|
inline bool isTopEdge() const;
|
|
inline bool isBottomEdge() const;
|
|
|
|
inline bool hideTitleBar() const;
|
|
//@}
|
|
|
|
public Q_SLOTS:
|
|
void init() override;
|
|
|
|
private Q_SLOTS:
|
|
void reconfigure();
|
|
void recalculateBorders();
|
|
void updateButtonsGeometry();
|
|
void updateButtonsGeometryDelayed();
|
|
void updateTitleBar();
|
|
void updateAnimationState();
|
|
void updateSizeGripVisibility();
|
|
|
|
private:
|
|
|
|
//* return the rect in which caption will be drawn
|
|
QPair<QRect,Qt::Alignment> captionRect() const;
|
|
|
|
void createButtons();
|
|
void paintTitleBar(QPainter *painter, const QRect &repaintRegion);
|
|
void updateShadow();
|
|
static QSharedPointer<KDecoration2::DecorationShadow> createShadowObject(const InternalSettingsPtr& internalSettings, const float strengthScale, const int scale);
|
|
|
|
//*@name border size
|
|
//@{
|
|
int borderSize(bool bottom = false) const;
|
|
//@}
|
|
|
|
//*@name size grip
|
|
//@{
|
|
void createSizeGrip();
|
|
void deleteSizeGrip();
|
|
SizeGrip* sizeGrip() const
|
|
{ return m_sizeGrip; }
|
|
//@}
|
|
|
|
InternalSettingsPtr m_internalSettings;
|
|
KDecoration2::DecorationButtonGroup *m_leftButtons = nullptr;
|
|
KDecoration2::DecorationButtonGroup *m_rightButtons = nullptr;
|
|
|
|
//* size grip widget
|
|
SizeGrip *m_sizeGrip = nullptr;
|
|
|
|
//* active state change animation
|
|
QVariantAnimation *m_animation;
|
|
QVariantAnimation *m_shadowAnimation;
|
|
|
|
//* active state change opacity
|
|
qreal m_opacity = 0;
|
|
qreal m_shadowOpacity = 0;
|
|
|
|
};
|
|
|
|
|
|
bool Decoration::isMaximized() const
|
|
{ return client().data()->isMaximized() && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::isMaximizedHorizontally() const
|
|
{ return client().data()->isMaximizedHorizontally() && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::isMaximizedVertically() const
|
|
{ return client().data()->isMaximizedVertically() && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::isLeftEdge() const
|
|
{ return (client().data()->isMaximizedHorizontally() || client().data()->adjacentScreenEdges().testFlag( Qt::LeftEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::isRightEdge() const
|
|
{ return (client().data()->isMaximizedHorizontally() || client().data()->adjacentScreenEdges().testFlag( Qt::RightEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::isTopEdge() const
|
|
{ return (client().data()->isMaximizedVertically() || client().data()->adjacentScreenEdges().testFlag( Qt::TopEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::isBottomEdge() const
|
|
{ return (client().data()->isMaximizedVertically() || client().data()->adjacentScreenEdges().testFlag( Qt::BottomEdge ) ) && !m_internalSettings->drawBorderOnMaximizedWindows(); }
|
|
|
|
bool Decoration::hideTitleBar() const
|
|
{ return m_internalSettings->hideTitleBar() && !client().data()->isShaded(); }
|
|
|
|
}
|
|
|
|
#endif
|