1 /*
2  * Clutter.
3  *
4  * An OpenGL based 'interactive canvas' library.
5  *
6  * Copyright (C) 2010  Intel Corporation.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef __CLUTTER_BACKEND_PRIVATE_H__
23 #define __CLUTTER_BACKEND_PRIVATE_H__
24 
25 #include <clutter/clutter-backend.h>
26 #include <clutter/clutter-device-manager.h>
27 #include <clutter/clutter-stage-window.h>
28 
29 #include "clutter-event-translator.h"
30 
31 #define CLUTTER_BACKEND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_BACKEND, ClutterBackendClass))
32 #define CLUTTER_IS_BACKEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_BACKEND))
33 #define CLUTTER_BACKEND_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_BACKEND, ClutterBackendClass))
34 
35 G_BEGIN_DECLS
36 
37 typedef struct _ClutterBackendPrivate   ClutterBackendPrivate;
38 
39 struct _ClutterBackend
40 {
41   /*< private >*/
42   GObject parent_instance;
43 
44   CoglRenderer *cogl_renderer;
45   CoglDisplay *cogl_display;
46   CoglContext *cogl_context;
47   GSource *cogl_source;
48 
49   CoglOnscreen *dummy_onscreen;
50 
51   ClutterDeviceManager *device_manager;
52 
53   cairo_font_options_t *font_options;
54 
55   gchar *font_name;
56 
57   gfloat units_per_em;
58   gint32 units_serial;
59 
60   GList *event_translators;
61 };
62 
63 struct _ClutterBackendClass
64 {
65   /*< private >*/
66   GObjectClass parent_class;
67 
68   GType stage_window_type;
69 
70   /* vfuncs */
71   gboolean              (* pre_parse)          (ClutterBackend  *backend,
72                                                 GError         **error);
73   gboolean              (* post_parse)         (ClutterBackend  *backend,
74                                                 GError         **error);
75   ClutterStageWindow *  (* create_stage)       (ClutterBackend  *backend,
76                                                 ClutterStage    *wrapper,
77                                                 GError         **error);
78   void                  (* init_events)        (ClutterBackend  *backend);
79   void                  (* init_features)      (ClutterBackend  *backend);
80   void                  (* add_options)        (ClutterBackend  *backend,
81                                                 GOptionGroup    *group);
82   ClutterFeatureFlags   (* get_features)       (ClutterBackend  *backend);
83   CoglRenderer *        (* get_renderer)       (ClutterBackend  *backend,
84                                                 GError         **error);
85   CoglDisplay *         (* get_display)        (ClutterBackend  *backend,
86                                                 CoglRenderer    *renderer,
87                                                 CoglSwapChain   *swap_chain,
88                                                 GError         **error);
89   gboolean              (* create_context)     (ClutterBackend  *backend,
90                                                 GError         **error);
91   void                  (* ensure_context)     (ClutterBackend  *backend,
92                                                 ClutterStage    *stage);
93   ClutterDeviceManager *(* get_device_manager) (ClutterBackend  *backend);
94 
95   void                  (* copy_event_data)    (ClutterBackend     *backend,
96                                                 const ClutterEvent *src,
97                                                 ClutterEvent       *dest);
98   void                  (* free_event_data)    (ClutterBackend     *backend,
99                                                 ClutterEvent       *event);
100 
101   gboolean              (* translate_event)    (ClutterBackend     *backend,
102                                                 gpointer            native,
103                                                 ClutterEvent       *event);
104 
105   PangoDirection        (* get_keymap_direction) (ClutterBackend   *backend);
106 
107   /* signals */
108   void (* resolution_changed) (ClutterBackend *backend);
109   void (* font_changed)       (ClutterBackend *backend);
110   void (* settings_changed)   (ClutterBackend *backend);
111 };
112 
113 ClutterBackend *        _clutter_create_backend                         (void);
114 
115 ClutterStageWindow *    _clutter_backend_create_stage                   (ClutterBackend         *backend,
116                                                                          ClutterStage           *wrapper,
117                                                                          GError                **error);
118 void                    _clutter_backend_ensure_context                 (ClutterBackend         *backend,
119                                                                          ClutterStage           *stage);
120 void                    _clutter_backend_ensure_context_internal        (ClutterBackend         *backend,
121                                                                          ClutterStage           *stage);
122 gboolean                _clutter_backend_create_context                 (ClutterBackend         *backend,
123                                                                          GError                **error);
124 
125 void                    _clutter_backend_add_options                    (ClutterBackend         *backend,
126                                                                          GOptionGroup           *group);
127 gboolean                _clutter_backend_pre_parse                      (ClutterBackend         *backend,
128                                                                          GError                **error);
129 gboolean                _clutter_backend_post_parse                     (ClutterBackend         *backend,
130                                                                          GError                **error);
131 
132 void                    _clutter_backend_init_events                    (ClutterBackend         *backend);
133 void                    _clutter_backend_copy_event_data                (ClutterBackend         *backend,
134                                                                          const ClutterEvent     *src,
135                                                                          ClutterEvent           *dest);
136 void                    _clutter_backend_free_event_data                (ClutterBackend         *backend,
137                                                                          ClutterEvent           *event);
138 gboolean                _clutter_backend_translate_event                (ClutterBackend         *backend,
139                                                                          gpointer                native,
140                                                                          ClutterEvent           *event);
141 void                    _clutter_backend_add_event_translator           (ClutterBackend         *backend,
142                                                                          ClutterEventTranslator *translator);
143 void                    _clutter_backend_remove_event_translator        (ClutterBackend         *backend,
144                                                                          ClutterEventTranslator *translator);
145 
146 ClutterFeatureFlags     _clutter_backend_get_features                   (ClutterBackend         *backend);
147 
148 gfloat                  _clutter_backend_get_units_per_em               (ClutterBackend         *backend,
149                                                                          PangoFontDescription   *font_desc);
150 gint32                  _clutter_backend_get_units_serial               (ClutterBackend         *backend);
151 
152 PangoDirection          _clutter_backend_get_keymap_direction           (ClutterBackend         *backend);
153 
154 void                    _clutter_backend_reset_cogl_framebuffer         (ClutterBackend         *backend);
155 
156 void                    clutter_set_allowed_drivers                     (const char             *drivers);
157 
158 void                    clutter_try_set_windowing_backend               (const char             *drivers);
159 
160 G_END_DECLS
161 
162 #endif /* __CLUTTER_BACKEND_PRIVATE_H__ */
163