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