1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2
3 /*
4 * Copyright (C) 2008 Iain Holmes
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
19 * 02110-1301, USA.
20 */
21
22 #include <config.h>
23 #include "compositor-private.h"
24 #include "compositor-xrender.h"
25
26 MetaCompositor *
meta_compositor_new(MetaDisplay * display)27 meta_compositor_new (MetaDisplay *display)
28 {
29 #ifdef HAVE_COMPOSITE_EXTENSIONS
30 /* At some point we would have a way to select between backends */
31 return meta_compositor_xrender_new (display);
32 #else
33 return NULL;
34 #endif
35 }
36
37 void
meta_compositor_destroy(MetaCompositor * compositor)38 meta_compositor_destroy (MetaCompositor *compositor)
39 {
40 #ifdef HAVE_COMPOSITE_EXTENSIONS
41 if (compositor && compositor->destroy)
42 compositor->destroy (compositor);
43 #endif
44 }
45
46 void
meta_compositor_add_window(MetaCompositor * compositor,MetaWindow * window,Window xwindow,XWindowAttributes * attrs)47 meta_compositor_add_window (MetaCompositor *compositor,
48 MetaWindow *window,
49 Window xwindow,
50 XWindowAttributes *attrs)
51 {
52 #ifdef HAVE_COMPOSITE_EXTENSIONS
53 if (compositor && compositor->add_window)
54 compositor->add_window (compositor, window, xwindow, attrs);
55 #endif
56 }
57
58 void
meta_compositor_remove_window(MetaCompositor * compositor,Window xwindow)59 meta_compositor_remove_window (MetaCompositor *compositor,
60 Window xwindow)
61 {
62 #ifdef HAVE_COMPOSITE_EXTENSIONS
63 if (compositor && compositor->remove_window)
64 compositor->remove_window (compositor, xwindow);
65 #endif
66 }
67
68 void
meta_compositor_manage_screen(MetaCompositor * compositor,MetaScreen * screen)69 meta_compositor_manage_screen (MetaCompositor *compositor,
70 MetaScreen *screen)
71 {
72 #ifdef HAVE_COMPOSITE_EXTENSIONS
73 if (compositor && compositor->manage_screen)
74 compositor->manage_screen (compositor, screen);
75 #endif
76 }
77
78 void
meta_compositor_unmanage_screen(MetaCompositor * compositor,MetaScreen * screen)79 meta_compositor_unmanage_screen (MetaCompositor *compositor,
80 MetaScreen *screen)
81 {
82 #ifdef HAVE_COMPOSITE_EXTENSIONS
83 if (compositor && compositor->unmanage_screen)
84 compositor->unmanage_screen (compositor, screen);
85 #endif
86 }
87
88 void
meta_compositor_set_updates(MetaCompositor * compositor,MetaWindow * window,gboolean updates)89 meta_compositor_set_updates (MetaCompositor *compositor,
90 MetaWindow *window,
91 gboolean updates)
92 {
93 #ifdef HAVE_COMPOSITE_EXTENSIONS
94 if (compositor && compositor->set_updates)
95 compositor->set_updates (compositor, window, updates);
96 #endif
97 }
98
99 void
meta_compositor_process_event(MetaCompositor * compositor,XEvent * event,MetaWindow * window)100 meta_compositor_process_event (MetaCompositor *compositor,
101 XEvent *event,
102 MetaWindow *window)
103 {
104 #ifdef HAVE_COMPOSITE_EXTENSIONS
105 if (compositor && compositor->process_event)
106 compositor->process_event (compositor, event, window);
107 #endif
108 }
109
110 cairo_surface_t *
meta_compositor_get_window_surface(MetaCompositor * compositor,MetaWindow * window)111 meta_compositor_get_window_surface (MetaCompositor *compositor,
112 MetaWindow *window)
113 {
114 #ifdef HAVE_COMPOSITE_EXTENSIONS
115 if (compositor && compositor->get_window_surface)
116 return compositor->get_window_surface (compositor, window);
117 else
118 return NULL;
119 #else
120 return NULL;
121 #endif
122 }
123
124 void
meta_compositor_set_active_window(MetaCompositor * compositor,MetaScreen * screen,MetaWindow * window)125 meta_compositor_set_active_window (MetaCompositor *compositor,
126 MetaScreen *screen,
127 MetaWindow *window)
128 {
129 #ifdef HAVE_COMPOSITE_EXTENSIONS
130 if (compositor && compositor->set_active_window)
131 compositor->set_active_window (compositor, screen, window);
132 #endif
133 }
134
135 /* These functions are unused at the moment */
meta_compositor_begin_move(MetaCompositor * compositor,MetaWindow * window,MetaRectangle * initial,int grab_x,int grab_y)136 void meta_compositor_begin_move (MetaCompositor *compositor,
137 MetaWindow *window,
138 MetaRectangle *initial,
139 int grab_x,
140 int grab_y)
141 {
142 }
143
meta_compositor_update_move(MetaCompositor * compositor,MetaWindow * window,int x,int y)144 void meta_compositor_update_move (MetaCompositor *compositor,
145 MetaWindow *window,
146 int x,
147 int y)
148 {
149 }
150
meta_compositor_end_move(MetaCompositor * compositor,MetaWindow * window)151 void meta_compositor_end_move (MetaCompositor *compositor,
152 MetaWindow *window)
153 {
154 }
155
meta_compositor_free_window(MetaCompositor * compositor,MetaWindow * window)156 void meta_compositor_free_window (MetaCompositor *compositor,
157 MetaWindow *window)
158 {
159 #ifdef HAVE_COMPOSITE_EXTENSIONS
160 if (compositor && compositor->free_window)
161 compositor->free_window (compositor, window);
162 #endif
163 }
164
165 void
meta_compositor_maximize_window(MetaCompositor * compositor,MetaWindow * window)166 meta_compositor_maximize_window (MetaCompositor *compositor,
167 MetaWindow *window)
168 {
169 #ifdef HAVE_COMPOSITE_EXTENSIONS
170 if (compositor && compositor->maximize_window)
171 compositor->maximize_window (compositor, window);
172 #endif
173 }
174
175 void
meta_compositor_unmaximize_window(MetaCompositor * compositor,MetaWindow * window)176 meta_compositor_unmaximize_window (MetaCompositor *compositor,
177 MetaWindow *window)
178 {
179 #ifdef HAVE_COMPOSITE_EXTENSIONS
180 if (compositor && compositor->unmaximize_window)
181 compositor->unmaximize_window (compositor, window);
182 #endif
183 }
184