File: qtcurveclient.h

package info (click to toggle)
qtcurve 1.9-8
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 12,468 kB
  • sloc: cpp: 70,269; perl: 123; sh: 122; xml: 46; makefile: 14
file content (120 lines) | stat: -rw-r--r-- 4,365 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*****************************************************************************
 *   Copyright 2007 - 2010 Craig Drummond <craig.p.drummond@gmail.com>       *
 *   Copyright 2013 - 2015 Yichao Yu <yyc1992@gmail.com>                     *
 *                                                                           *
 *   This program is free software; you can redistribute it and/or modify    *
 *   it under the terms of the GNU Lesser General Public License as          *
 *   published by the Free Software Foundation; either version 2.1 of the    *
 *   License, or (at your option) version 3, or any later version accepted   *
 *   by the membership of KDE e.V. (or its successor approved by the         *
 *   membership of KDE e.V.), which shall act as a proxy defined in          *
 *   Section 6 of version 3 of the license.                                  *
 *                                                                           *
 *   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       *
 *   Lesser General Public License for more details.                         *
 *                                                                           *
 *   You should have received a copy of the GNU Lesser General Public        *
 *   License along with this library. If not,                                *
 *   see <http://www.gnu.org/licenses/>.                                     *
 *****************************************************************************/

/*
  based on the window decoration "Plastik":
  Copyright (C) 2003-2005 Sandro Giessl <sandro@giessl.com>

  based on the window decoration "Web":
  Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
 */

#ifndef QTCURVECLIENT_H
#define QTCURVECLIENT_H

#include "config.h"

#include <kdeversion.h>
#include <kcommondecoration.h>
#include <QPixmap>
#include <QColor>
#include "qtcurvehandler.h"

namespace QtCurve {
namespace KWin {

class QtCurveSizeGrip;
class QtCurveButton;
class QtCurveToggleButton;

class QtCurveClient : public KCommonDecorationUnstable {
    Q_OBJECT
public:
    QtCurveClient(KDecorationBridge *bridge, QtCurveHandler *factory);
    ~QtCurveClient() override;

    QString visibleName() const;
    bool decorationBehaviour(DecorationBehaviour behaviour) const;
    int layoutMetric(LayoutMetric lm, bool respectWindowState=true,
                     const KCommonDecorationButton *btn=0) const;
    KCommonDecorationButton *createButton(ButtonType type);
    void init();
    void maximizeChange();
    void shadeChange();
    void activeChange();
    void captionChange();
    void reset(unsigned long changed);
    void paintEvent(QPaintEvent *e);
    void paintTitle(QPainter *painter, const QRect &capRect,
                    const QRect &alignFullRect, const QString &cap,
                    const QPixmap &pix, int shadowSize=0, bool isTab=false,
                    bool activeTab=false);
    void updateWindowShape();
    QRegion getMask(int round, const QRect &r) const;
    void updateCaption();
    bool eventFilter(QObject *o, QEvent *e);
    bool isMaximized() const
    {
        return (maximizeMode() == MaximizeFull &&
                !options()->moveResizeMaximizedWindows());
    }
    void menuBarSize(int size);
    void statusBarState(bool state);
    QtCurveToggleButton *createToggleButton(bool menubar);
    void informAppOfBorderSizeChanges();
    void sendToggleToApp(bool menubar);
public Q_SLOTS:
    void toggleMenuBar();
    void toggleStatusBar();

private:
    bool onlyMenuIcon(bool left) const;
    QRect captionRect() const;
    void createSizeGrip();
    void deleteSizeGrip();
    void informAppOfActiveChange();
    const QString &windowClass();

    struct ButtonBgnd {
        QPixmap pix;
        int app;
        QColor col;
    };

    static const int constNumButtonStates = 2;

    QtCurveSizeGrip *m_resizeGrip;
    ButtonBgnd m_buttonBackground[constNumButtonStates];
    QRect m_captionRect;
    QString m_caption;
    QString m_windowClass;
    QFont m_titleFont;
    int m_menuBarSize;
    QtCurveToggleButton *m_toggleMenuBarButton;
    QtCurveToggleButton *m_toggleStatusBarButton;
    // bool m_hover;
};

}
}

#endif