summaryrefslogtreecommitdiff
path: root/src/fadedesktop.h
blob: 13df35bd507e4545051cee72e890421da55d9c36 (plain)
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
/**
 *
 * Compiz fade to desktop plugin
 *
 * fadedesktop.c
 *
 * Copyright (c) 2006 Robert Carr <racarr@beryl-project.org>
 * 		 2007 Danny Baumann <maniac@beryl-project.org>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * 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 General Public License for more details.
 *
 **/

#include <core/core.h>
#include <core/pluginclasshandler.h>

#include <composite/composite.h>
#include <opengl/opengl.h>

#include "fadedesktop_options.h"

class FadedesktopScreen :
    public PluginClassHandler <FadedesktopScreen, CompScreen>,
    public ScreenInterface,
    public CompositeScreenInterface,
    public GLScreenInterface,
    public FadedesktopOptions
{
    public:

	typedef enum {
	    Off,
	    Out,
	    On,
	    In
	} State;
    public:

	FadedesktopScreen (CompScreen *);

	void activateEvent (bool);

	void preparePaint (int);
	void donePaint ();

	void enterShowDesktopMode ();
	void leaveShowDesktopMode (CompWindow *w);

	CompositeScreen *cScreen;
	GLScreen	*gScreen;

	State state;
	int   fadeTime;
};

class FadedesktopWindow :
    public PluginClassHandler <FadedesktopWindow, CompWindow>,
    public WindowInterface,
    public GLWindowInterface
{
    public:

	FadedesktopWindow (CompWindow *);

	bool isFadedesktopWindow ();

	bool glPaint (const GLWindowPaintAttrib &,
		      const GLMatrix &,
		      const CompRegion &,
		      unsigned int);

	CompWindow *window;
	CompositeWindow *cWindow;
	GLWindow   *gWindow;

	bool fading;
	bool isHidden;

	GLushort opacity;
};

#define FD_SCREEN(s)							       \
    FadedesktopScreen *fs = FadedesktopScreen::get (s);

#define FD_WINDOW(w)							       \
    FadedesktopWindow *fw = FadedesktopWindow::get (w);

class FadedesktopPluginVTable :
    public CompPlugin::VTableForScreenAndWindow <FadedesktopScreen, FadedesktopWindow>
{
    public:

	bool init ();
};