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