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
 | 
