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
 |