~vanvugt/compiz-plugins-main/fix-915236

« back to all changes in this revision

Viewing changes to grid/src/grid.h

  • Committer: Sam Spilsbury
  • Date: 2011-08-12 06:36:10 UTC
  • Revision ID: sam.spilsbury@canonical.com-20110812063610-8mcxo2xohctyp2ak
Sync - Remove Plugins

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Compiz Fusion Grid plugin
3
 
 *
4
 
 * Copyright (c) 2008 Stephen Kennedy <suasol@gmail.com>
5
 
 * Copyright (c) 2010 Scott Moreau <oreaus@gmail.com>
6
 
 *
7
 
 * This program is free software; you can redistribute it and/or
8
 
 * modify it under the terms of the GNU General Public License
9
 
 * as published by the Free Software Foundation; either version 2
10
 
 * of the License, or (at your option) any later version.
11
 
 *
12
 
 * This program is distributed in the hope that it will be useful,
13
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 
 * GNU General Public License for more details.
16
 
 *
17
 
 * Description:
18
 
 *
19
 
 * Plugin to act like winsplit revolution (http://www.winsplit-revolution.com/)
20
 
 * use <Control><Alt>NUMPAD_KEY to move and tile your windows.
21
 
 *
22
 
 * Press the tiling keys several times to cycle through some tiling options.
23
 
 */
24
 
 
25
 
#include <core/core.h>
26
 
#include <core/atoms.h>
27
 
#include <core/pluginclasshandler.h>
28
 
#include <composite/composite.h>
29
 
#include <opengl/opengl.h>
30
 
 
31
 
#include "grid_options.h"
32
 
 
33
 
#define SNAPOFF_THRESHOLD 50
34
 
 
35
 
typedef enum
36
 
{
37
 
    GridUnknown = 0,
38
 
    GridBottomLeft = 1,
39
 
    GridBottom = 2,
40
 
    GridBottomRight = 3,
41
 
    GridLeft = 4,
42
 
    GridCenter = 5,
43
 
    GridRight = 6,
44
 
    GridTopLeft = 7,
45
 
    GridTop = 8,
46
 
    GridTopRight = 9,
47
 
    GridMaximize = 10
48
 
} GridType;
49
 
 
50
 
typedef struct _GridProps
51
 
{
52
 
    int gravityRight;
53
 
    int gravityDown;
54
 
    int numCellsX;
55
 
    int numCellsY;
56
 
} GridProps;
57
 
 
58
 
enum Edges
59
 
{
60
 
    NoEdge = 0,
61
 
    BottomLeft,
62
 
    Bottom,
63
 
    BottomRight,
64
 
    Left,
65
 
    Right,
66
 
    TopLeft,
67
 
    Top,
68
 
    TopRight
69
 
};
70
 
 
71
 
class Animation
72
 
{
73
 
        public:
74
 
 
75
 
        Animation ();
76
 
 
77
 
        GLfloat progress;
78
 
        CompRect fromRect;
79
 
        CompRect targetRect;
80
 
        CompRect currentRect;
81
 
        GLfloat opacity;
82
 
        GLfloat timer;
83
 
        int duration;
84
 
        bool complete;
85
 
        bool fadingOut;
86
 
};
87
 
 
88
 
class GridScreen :
89
 
    public ScreenInterface,
90
 
    public CompositeScreenInterface,
91
 
    public GLScreenInterface,
92
 
    public PluginClassHandler <GridScreen, CompScreen>,
93
 
    public GridOptions
94
 
{
95
 
    public:
96
 
 
97
 
        GridScreen (CompScreen *);
98
 
        CompositeScreen *cScreen;
99
 
        GLScreen        *glScreen;
100
 
 
101
 
        CompRect workarea, currentRect, desiredSlot, lastSlot,
102
 
                 desiredRect, lastWorkarea, currentWorkarea;
103
 
        GridProps props;
104
 
        Edges edge, lastEdge;
105
 
        CompOption::Vector o;
106
 
        bool centerCheck;
107
 
        CompWindow *mGrabWindow;
108
 
        bool animating;
109
 
 
110
 
        void getPaintRectangle (CompRect&);
111
 
        void setCurrentRect (Animation&);
112
 
 
113
 
        bool initiateCommon (CompAction*, CompAction::State,
114
 
                             CompOption::Vector&, GridType, bool);
115
 
 
116
 
        void glPaintRectangle (const GLScreenPaintAttrib&,
117
 
                               const GLMatrix&, CompOutput *);
118
 
 
119
 
        bool glPaintOutput (const GLScreenPaintAttrib &,
120
 
                            const GLMatrix &, const CompRegion &,
121
 
                            CompOutput *, unsigned int);
122
 
 
123
 
        void preparePaint (int msSinceLastPaint);
124
 
        void donePaint ();
125
 
 
126
 
        std::vector <Animation> animations;
127
 
 
128
 
        GridType edgeToGridType ();
129
 
 
130
 
        void handleEvent (XEvent *event);
131
 
 
132
 
        bool restoreWindow (CompAction*,
133
 
                            CompAction::State,
134
 
                            CompOption::Vector&);
135
 
 
136
 
        void
137
 
        snapbackOptionChanged (CompOption *option,
138
 
                                Options    num);
139
 
 
140
 
        CompRect
141
 
        slotToRect (CompWindow      *w,
142
 
                    const CompRect& slot);
143
 
        CompRect
144
 
        constrainSize (CompWindow *w,
145
 
                       const CompRect& slot);
146
 
};
147
 
 
148
 
class GridWindow :
149
 
    public WindowInterface,
150
 
    public PluginClassHandler <GridWindow, CompWindow>
151
 
{
152
 
    public:
153
 
 
154
 
        GridWindow (CompWindow *);
155
 
        CompWindow *window;
156
 
        GridScreen *gScreen;
157
 
 
158
 
        bool isGridResized;
159
 
        bool isGridMaximized;
160
 
        int pointerBufDx;
161
 
        int pointerBufDy;
162
 
        int resizeCount;
163
 
        CompRect originalSize;
164
 
        GridType lastTarget;
165
 
 
166
 
        void grabNotify (int, int, unsigned int, unsigned int);
167
 
 
168
 
        void ungrabNotify ();
169
 
 
170
 
        void moveNotify (int, int, bool);
171
 
};
172
 
 
173
 
#define GRID_WINDOW(w) \
174
 
    GridWindow *gw = GridWindow::get (w)
175
 
 
176
 
class GridPluginVTable :
177
 
    public CompPlugin::VTableForScreenAndWindow <GridScreen, GridWindow>
178
 
{
179
 
    public:
180
 
 
181
 
        bool init ();
182
 
};
183
 
 
184
 
COMPIZ_PLUGIN_20090315 (grid, GridPluginVTable);
185