~smspillaz/compiz-plugins-main/compiz-plugins-main.work_923683

« back to all changes in this revision

Viewing changes to resizeinfo/src/resizeinfo.h

  • Committer: Sam Spilsbury
  • Date: 2011-08-12 06:41:38 UTC
  • Revision ID: sam.spilsbury@canonical.com-20110812064138-sg45sswip9zgk0og
Sync in changes from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 *
 
3
 * Compiz metacity like info during resize
 
4
 *
 
5
 * resizeinfo.c
 
6
 *
 
7
 * Copyright (c) 2007 Robert Carr <racarr@opencompositing.org>
 
8
 *
 
9
 * Compiz resize atom usage and general cleanups by
 
10
 * Copyright (c) 2007 Danny Baumann <maniac@opencompositing.org>
 
11
 *
 
12
 * This program is free software; you can redistribute it and/or
 
13
 * modify it under the terms of the GNU General Public License
 
14
 * as published by the Free Software Foundation; either version 2
 
15
 * of the License, or (at your option) any later version.
 
16
 *
 
17
 * This program is distributed in the hope that it will be useful,
 
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
20
 * GNU General Public License for more details.
 
21
 *
 
22
 **/
 
23
 
 
24
#include <core/core.h>
 
25
#include <core/pluginclasshandler.h>
 
26
 
 
27
#include <composite/composite.h>
 
28
#include <opengl/opengl.h>
 
29
 
 
30
#include <cairo-xlib-xrender.h>
 
31
#include <math.h>
 
32
#include <pango/pango.h>
 
33
#include <pango/pangocairo.h>
 
34
 
 
35
#include "resizeinfo_options.h"
 
36
 
 
37
#define RESIZE_POPUP_WIDTH 85
 
38
#define RESIZE_POPUP_HEIGHT 50
 
39
 
 
40
#define PI 3.1415926
 
41
 
 
42
/* Cairo helper class */
 
43
 
 
44
class InfoLayer
 
45
{
 
46
    public:
 
47
 
 
48
        InfoLayer ();
 
49
        ~InfoLayer ();
 
50
 
 
51
        bool valid;
 
52
 
 
53
        Screen            *s;
 
54
        XRenderPictFormat *format;
 
55
        Pixmap            pixmap;
 
56
        cairo_surface_t   *surface;
 
57
        GLTexture::List   texture;
 
58
        cairo_t           *cr;
 
59
 
 
60
        void draw (int x,
 
61
                   int y);
 
62
 
 
63
        void renderBackground ();
 
64
        void renderText ();
 
65
};
 
66
 
 
67
class InfoScreen :
 
68
    public PluginClassHandler <InfoScreen, CompScreen>,
 
69
    public ScreenInterface,
 
70
    public CompositeScreenInterface,
 
71
    public GLScreenInterface,
 
72
    public ResizeinfoOptions
 
73
{
 
74
    public:
 
75
 
 
76
        InfoScreen (CompScreen *);
 
77
 
 
78
        GLScreen        *gScreen;
 
79
        CompositeScreen *cScreen;
 
80
 
 
81
        Atom resizeInfoAtom;
 
82
 
 
83
        CompWindow *pWindow;
 
84
 
 
85
        bool drawing;
 
86
        int  fadeTime;
 
87
 
 
88
        InfoLayer backgroundLayer;
 
89
        InfoLayer textLayer;
 
90
 
 
91
        XRectangle resizeGeometry;
 
92
 
 
93
        void
 
94
        damagePaintRegion ();
 
95
 
 
96
        void
 
97
        preparePaint (int);
 
98
 
 
99
        bool
 
100
        glPaintOutput (const GLScreenPaintAttrib &,
 
101
                       const GLMatrix &,
 
102
                       const CompRegion &,
 
103
                       CompOutput *,
 
104
                       unsigned int);
 
105
 
 
106
        void
 
107
        donePaint ();
 
108
 
 
109
        void
 
110
        handleEvent (XEvent *event);
 
111
};
 
112
 
 
113
class InfoWindow :
 
114
    public PluginClassHandler <InfoWindow, CompWindow>,
 
115
    public WindowInterface
 
116
{
 
117
    public:
 
118
 
 
119
        InfoWindow (CompWindow *);
 
120
 
 
121
        CompWindow *window;
 
122
 
 
123
        void
 
124
        grabNotify (int,
 
125
                    int,
 
126
                    unsigned int,
 
127
                    unsigned int);
 
128
 
 
129
        void
 
130
        ungrabNotify ();
 
131
};
 
132
 
 
133
#define INFO_SCREEN(s)                                                         \
 
134
    InfoScreen *is = InfoScreen::get (s);
 
135
 
 
136
#define INFO_WINDOW(w)                                                         \
 
137
    InfoWindow *iw = InfoWindow::get (w);
 
138
 
 
139
class InfoPluginVTable :
 
140
    public CompPlugin::VTableForScreenAndWindow <InfoScreen, InfoWindow>
 
141
{
 
142
    public:
 
143
 
 
144
        bool init ();
 
145
};