1 /* AudioMeter.c generated by valac, the Vala compiler
2 * generated from AudioMeter.vala, do not modify */
4 /* Copyright 2009-2010 Yorba Foundation
6 * This software is licensed under the GNU Lesser General Public License
7 * (version 2.1 or later). See the COPYING file in this distribution.
11 #include <glib-object.h>
21 #define VIEW_TYPE_AUDIO_METER (view_audio_meter_get_type ())
22 #define VIEW_AUDIO_METER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_AUDIO_METER, ViewAudioMeter))
23 #define VIEW_AUDIO_METER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_AUDIO_METER, ViewAudioMeterClass))
24 #define VIEW_IS_AUDIO_METER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_AUDIO_METER))
25 #define VIEW_IS_AUDIO_METER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_AUDIO_METER))
26 #define VIEW_AUDIO_METER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_AUDIO_METER, ViewAudioMeterClass))
28 typedef struct _ViewAudioMeter ViewAudioMeter;
29 typedef struct _ViewAudioMeterClass ViewAudioMeterClass;
30 typedef struct _ViewAudioMeterPrivate ViewAudioMeterPrivate;
31 #define _cairo_surface_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_surface_destroy (var), NULL)))
33 #define MODEL_TYPE_TRACK (model_track_get_type ())
34 #define MODEL_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRACK, ModelTrack))
35 #define MODEL_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRACK, ModelTrackClass))
36 #define MODEL_IS_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRACK))
37 #define MODEL_IS_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRACK))
38 #define MODEL_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRACK, ModelTrackClass))
40 typedef struct _ModelTrack ModelTrack;
41 typedef struct _ModelTrackClass ModelTrackClass;
43 #define MODEL_TYPE_AUDIO_TRACK (model_audio_track_get_type ())
44 #define MODEL_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrack))
45 #define MODEL_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
46 #define MODEL_IS_AUDIO_TRACK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_AUDIO_TRACK))
47 #define MODEL_IS_AUDIO_TRACK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_AUDIO_TRACK))
48 #define MODEL_AUDIO_TRACK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_AUDIO_TRACK, ModelAudioTrackClass))
50 typedef struct _ModelAudioTrack ModelAudioTrack;
51 typedef struct _ModelAudioTrackClass ModelAudioTrackClass;
52 #define _cairo_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_destroy (var), NULL)))
53 #define _cairo_pattern_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_pattern_destroy (var), NULL)))
55 #define LOGGING_TYPE_FACILITY (logging_facility_get_type ())
57 #define LOGGING_TYPE_LEVEL (logging_level_get_type ())
58 #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
60 struct _ViewAudioMeter {
61 GtkDrawingArea parent_instance;
62 ViewAudioMeterPrivate * priv;
65 struct _ViewAudioMeterClass {
66 GtkDrawingAreaClass parent_class;
69 struct _ViewAudioMeterPrivate {
70 cairo_surface_t* meter;
71 cairo_surface_t* silkscreen;
73 double current_level_left;
74 double current_level_right;
78 LOGGING_FACILITY_SIGNAL_HANDLERS,
79 LOGGING_FACILITY_DEVELOPER_WARNINGS,
80 LOGGING_FACILITY_GRAPH,
81 LOGGING_FACILITY_LOADING,
82 LOGGING_FACILITY_IMPORT,
83 LOGGING_FACILITY_SINGLEDECODEBIN
87 LOGGING_LEVEL_CRITICAL,
96 static gpointer view_audio_meter_parent_class = NULL;
98 GType view_audio_meter_get_type (void);
99 #define VIEW_AUDIO_METER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_AUDIO_METER, ViewAudioMeterPrivate))
101 VIEW_AUDIO_METER_DUMMY_PROPERTY
103 #define VIEW_AUDIO_METER_minDB ((double) (-70))
104 GType model_track_get_type (void);
105 GType model_audio_track_get_type (void);
106 gboolean model_audio_track_get_num_channels (ModelAudioTrack* self, gint* num);
107 gboolean view_audio_meter_on_expose_event (ViewAudioMeter* self, GdkEventExpose* event);
108 static gboolean _view_audio_meter_on_expose_event_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self);
109 void view_audio_meter_on_level_changed (ViewAudioMeter* self, double level_left, double level_right);
110 static void _view_audio_meter_on_level_changed_model_audio_track_level_changed (ModelAudioTrack* _sender, double level_left, double level_right, gpointer self);
111 void view_audio_meter_on_channel_count_changed (ViewAudioMeter* self, gint number_of_channels);
112 static void _view_audio_meter_on_channel_count_changed_model_audio_track_channel_count_changed (ModelAudioTrack* _sender, gint channel_count, gpointer self);
113 ViewAudioMeter* view_audio_meter_new (ModelAudioTrack* track);
114 ViewAudioMeter* view_audio_meter_construct (GType object_type, ModelAudioTrack* track);
115 static void view_audio_meter_initialize_meter (ViewAudioMeter* self);
116 GType logging_facility_get_type (void);
117 GType logging_level_get_type (void);
118 void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message);
119 static void view_audio_meter_finalize (GObject* obj);
123 #line 64 "AudioMeter.vala"
124 static gboolean _view_audio_meter_on_expose_event_gtk_widget_expose_event (GtkWidget* _sender, GdkEventExpose* event, gpointer self) {
125 #line 126 "AudioMeter.c"
127 result = view_audio_meter_on_expose_event (self, event);
132 #line 102 "AudioMeter.vala"
133 static void _view_audio_meter_on_level_changed_model_audio_track_level_changed (ModelAudioTrack* _sender, double level_left, double level_right, gpointer self) {
134 #line 135 "AudioMeter.c"
135 view_audio_meter_on_level_changed (self, level_left, level_right);
139 #line 110 "AudioMeter.vala"
140 static void _view_audio_meter_on_channel_count_changed_model_audio_track_channel_count_changed (ModelAudioTrack* _sender, gint channel_count, gpointer self) {
141 #line 142 "AudioMeter.c"
142 view_audio_meter_on_channel_count_changed (self, channel_count);
146 #line 19 "AudioMeter.vala"
147 ViewAudioMeter* view_audio_meter_construct (GType object_type, ModelAudioTrack* track) {
148 #line 149 "AudioMeter.c"
149 ViewAudioMeter * self;
150 gint number_of_channels = 0;
151 #line 19 "AudioMeter.vala"
152 g_return_val_if_fail (MODEL_IS_AUDIO_TRACK (track), NULL);
153 #line 154 "AudioMeter.c"
154 self = g_object_newv (object_type, 0, NULL);
155 #line 21 "AudioMeter.vala"
156 if (model_audio_track_get_num_channels (track, &number_of_channels)) {
157 #line 22 "AudioMeter.vala"
158 self->priv->stereo = number_of_channels < 1;
159 #line 160 "AudioMeter.c"
161 #line 25 "AudioMeter.vala"
162 GTK_WIDGET (self)->requisition.height = 10;
163 #line 26 "AudioMeter.vala"
164 g_signal_connect_object (GTK_WIDGET (self), "expose-event", (GCallback) _view_audio_meter_on_expose_event_gtk_widget_expose_event, self, 0);
165 #line 27 "AudioMeter.vala"
166 g_signal_connect_object (track, "level-changed", (GCallback) _view_audio_meter_on_level_changed_model_audio_track_level_changed, self, 0);
167 #line 28 "AudioMeter.vala"
168 g_signal_connect_object (track, "channel-count-changed", (GCallback) _view_audio_meter_on_channel_count_changed_model_audio_track_channel_count_changed, self, 0);
169 #line 170 "AudioMeter.c"
174 #line 19 "AudioMeter.vala"
175 ViewAudioMeter* view_audio_meter_new (ModelAudioTrack* track) {
176 #line 19 "AudioMeter.vala"
177 return view_audio_meter_construct (VIEW_TYPE_AUDIO_METER, track);
178 #line 179 "AudioMeter.c"
182 #line 31 "AudioMeter.vala"
183 static void view_audio_meter_initialize_meter (ViewAudioMeter* self) {
184 #line 185 "AudioMeter.c"
185 cairo_surface_t* _tmp0_;
187 cairo_pattern_t* pat;
188 cairo_surface_t* _tmp1_;
190 #line 31 "AudioMeter.vala"
191 g_return_if_fail (VIEW_IS_AUDIO_METER (self));
192 #line 32 "AudioMeter.vala"
193 self->priv->meter = (_tmp0_ = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, GTK_WIDGET (self)->allocation.width, GTK_WIDGET (self)->allocation.height), _cairo_surface_destroy0 (self->priv->meter), _tmp0_);
194 #line 34 "AudioMeter.vala"
195 context2 = cairo_create (self->priv->meter);
196 #line 35 "AudioMeter.vala"
197 pat = cairo_pattern_create_linear ((double) 0, (double) 0, (double) GTK_WIDGET (self)->allocation.width, (double) 0);
198 #line 36 "AudioMeter.vala"
199 cairo_pattern_add_color_stop_rgb (pat, (double) 0, 0.1, (double) 1, 0.4);
200 #line 37 "AudioMeter.vala"
201 cairo_pattern_add_color_stop_rgb (pat, 0.8, (double) 1, (double) 1, (double) 0);
202 #line 38 "AudioMeter.vala"
203 cairo_pattern_add_color_stop_rgb (pat, (double) 1, (double) 1, (double) 0, (double) 0);
204 #line 39 "AudioMeter.vala"
205 cairo_set_source (context2, pat);
206 #line 40 "AudioMeter.vala"
207 cairo_rectangle (context2, (double) 0, (double) 0, (double) GTK_WIDGET (self)->allocation.width, (double) GTK_WIDGET (self)->allocation.height);
208 #line 41 "AudioMeter.vala"
209 cairo_fill (context2);
210 #line 43 "AudioMeter.vala"
211 self->priv->silkscreen = (_tmp1_ = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, GTK_WIDGET (self)->allocation.width, GTK_WIDGET (self)->allocation.height), _cairo_surface_destroy0 (self->priv->silkscreen), _tmp1_);
212 #line 45 "AudioMeter.vala"
213 context2 = (_tmp2_ = cairo_create (self->priv->silkscreen), _cairo_destroy0 (context2), _tmp2_);
214 #line 46 "AudioMeter.vala"
215 cairo_set_source_rgba (context2, (double) 0, (double) 0, (double) 0, (double) 0);
216 #line 47 "AudioMeter.vala"
217 cairo_rectangle (context2, (double) 0, (double) 0, (double) GTK_WIDGET (self)->allocation.width, (double) GTK_WIDGET (self)->allocation.height);
218 #line 48 "AudioMeter.vala"
219 cairo_fill (context2);
220 #line 221 "AudioMeter.c"
223 #line 51 "AudioMeter.vala"
225 #line 226 "AudioMeter.c"
228 #line 51 "AudioMeter.vala"
230 #line 51 "AudioMeter.vala"
232 #line 51 "AudioMeter.vala"
234 #line 51 "AudioMeter.vala"
236 #line 237 "AudioMeter.c"
238 #line 51 "AudioMeter.vala"
240 #line 51 "AudioMeter.vala"
242 #line 51 "AudioMeter.vala"
244 #line 245 "AudioMeter.c"
246 #line 52 "AudioMeter.vala"
247 cairo_set_source_rgba (context2, (double) 0, (double) 0, (double) 0, (double) 1);
248 #line 53 "AudioMeter.vala"
249 cairo_rectangle (context2, (double) ((i * GTK_WIDGET (self)->allocation.width) / 20), (double) 0, (double) 3, (double) GTK_WIDGET (self)->allocation.height);
250 #line 54 "AudioMeter.vala"
251 cairo_fill (context2);
252 #line 253 "AudioMeter.c"
256 #line 58 "AudioMeter.vala"
257 cairo_set_line_width (context2, 1.1);
258 #line 59 "AudioMeter.vala"
259 cairo_set_source_rgba (context2, 0.9, 0.9, 0.9, 0.5);
260 #line 60 "AudioMeter.vala"
261 cairo_rectangle (context2, (double) 0, (double) 0, (double) GTK_WIDGET (self)->allocation.width, (double) GTK_WIDGET (self)->allocation.height);
262 #line 61 "AudioMeter.vala"
263 cairo_stroke (context2);
264 #line 265 "AudioMeter.c"
265 _cairo_destroy0 (context2);
266 _cairo_pattern_destroy0 (pat);
270 static gpointer _g_object_ref0 (gpointer self) {
271 return self ? g_object_ref (self) : NULL;
275 #line 64 "AudioMeter.vala"
276 gboolean view_audio_meter_on_expose_event (ViewAudioMeter* self, GdkEventExpose* event) {
277 #line 278 "AudioMeter.c"
278 gboolean result = FALSE;
284 #line 64 "AudioMeter.vala"
285 g_return_val_if_fail (VIEW_IS_AUDIO_METER (self), FALSE);
286 #line 65 "AudioMeter.vala"
287 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_expose_event");
288 #line 66 "AudioMeter.vala"
289 window = _g_object_ref0 (gtk_widget_get_window (GTK_WIDGET (self)));
290 #line 67 "AudioMeter.vala"
291 context = gdk_cairo_create (GDK_DRAWABLE (window));
292 #line 68 "AudioMeter.vala"
293 if (self->priv->meter == NULL) {
294 #line 69 "AudioMeter.vala"
295 view_audio_meter_initialize_meter (self);
296 #line 297 "AudioMeter.c"
298 #line 72 "AudioMeter.vala"
299 cairo_set_source_rgb (context, (double) 0, (double) 0, (double) 0);
300 #line 73 "AudioMeter.vala"
301 cairo_rectangle (context, (double) 0, (double) 0, (double) GTK_WIDGET (self)->allocation.width, (double) GTK_WIDGET (self)->allocation.height);
302 #line 74 "AudioMeter.vala"
303 cairo_fill (context);
304 #line 76 "AudioMeter.vala"
305 if (self->priv->stereo) {
306 #line 76 "AudioMeter.vala"
307 _tmp0_ = (GTK_WIDGET (self)->allocation.height / 2) - 1;
308 #line 309 "AudioMeter.c"
310 #line 76 "AudioMeter.vala"
311 _tmp0_ = GTK_WIDGET (self)->allocation.height - 2;
312 #line 313 "AudioMeter.c"
314 #line 76 "AudioMeter.vala"
316 #line 78 "AudioMeter.vala"
317 if (self->priv->stereo) {
318 #line 79 "AudioMeter.vala"
319 cairo_set_source_rgb (context, (double) 1, (double) 1, (double) 1);
320 #line 80 "AudioMeter.vala"
321 cairo_rectangle (context, (double) 0, (double) (bar_height + 1), (double) GTK_WIDGET (self)->allocation.width, 0.3);
322 #line 81 "AudioMeter.vala"
323 cairo_fill (context);
324 #line 325 "AudioMeter.c"
326 #line 84 "AudioMeter.vala"
327 cairo_set_source_surface (context, self->priv->meter, (double) 0, (double) 0);
328 #line 85 "AudioMeter.vala"
329 width = (gint) (pow10 (self->priv->current_level_left / 40) * GTK_WIDGET (self)->allocation.width);
330 #line 86 "AudioMeter.vala"
331 cairo_rectangle (context, (double) 0, (double) 1, (double) width, (double) bar_height);
332 #line 88 "AudioMeter.vala"
333 if (self->priv->stereo) {
334 #line 89 "AudioMeter.vala"
335 width = (gint) (pow10 (self->priv->current_level_right / 40) * GTK_WIDGET (self)->allocation.width);
336 #line 90 "AudioMeter.vala"
337 cairo_rectangle (context, (double) 0, (double) (bar_height + 2), (double) width, (double) bar_height);
338 #line 339 "AudioMeter.c"
340 #line 93 "AudioMeter.vala"
341 cairo_clip (context);
342 #line 94 "AudioMeter.vala"
343 cairo_paint_with_alpha (context, (double) 1);
344 #line 96 "AudioMeter.vala"
345 cairo_set_source_surface (context, self->priv->silkscreen, (double) 0, (double) 0);
346 #line 97 "AudioMeter.vala"
347 cairo_paint_with_alpha (context, (double) 1);
348 #line 349 "AudioMeter.c"
350 _g_object_unref0 (window);
351 _cairo_destroy0 (context);
352 #line 99 "AudioMeter.vala"
354 #line 355 "AudioMeter.c"
358 #line 102 "AudioMeter.vala"
359 void view_audio_meter_on_level_changed (ViewAudioMeter* self, double level_left, double level_right) {
360 #line 361 "AudioMeter.c"
364 #line 102 "AudioMeter.vala"
365 g_return_if_fail (VIEW_IS_AUDIO_METER (self));
366 #line 103 "AudioMeter.vala"
367 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_level_changed");
368 #line 104 "AudioMeter.vala"
369 if (level_left < VIEW_AUDIO_METER_minDB) {
370 #line 104 "AudioMeter.vala"
371 _tmp0_ = VIEW_AUDIO_METER_minDB;
372 #line 373 "AudioMeter.c"
374 #line 104 "AudioMeter.vala"
376 #line 377 "AudioMeter.c"
378 #line 104 "AudioMeter.vala"
379 self->priv->current_level_left = _tmp0_;
380 #line 105 "AudioMeter.vala"
381 if (level_right < VIEW_AUDIO_METER_minDB) {
382 #line 105 "AudioMeter.vala"
383 _tmp1_ = VIEW_AUDIO_METER_minDB;
384 #line 385 "AudioMeter.c"
386 #line 105 "AudioMeter.vala"
387 _tmp1_ = level_right;
388 #line 389 "AudioMeter.c"
390 #line 105 "AudioMeter.vala"
391 self->priv->current_level_right = _tmp1_;
392 #line 106 "AudioMeter.vala"
393 window = _g_object_ref0 (gtk_widget_get_window (GTK_WIDGET (self)));
394 #line 107 "AudioMeter.vala"
395 gdk_window_invalidate_rect (window, NULL, FALSE);
396 #line 397 "AudioMeter.c"
397 _g_object_unref0 (window);
401 #line 110 "AudioMeter.vala"
402 void view_audio_meter_on_channel_count_changed (ViewAudioMeter* self, gint number_of_channels) {
403 #line 110 "AudioMeter.vala"
404 g_return_if_fail (VIEW_IS_AUDIO_METER (self));
405 #line 111 "AudioMeter.vala"
406 logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_channel_count_changed");
407 #line 112 "AudioMeter.vala"
408 self->priv->stereo = number_of_channels > 1;
409 #line 113 "AudioMeter.vala"
410 gdk_window_invalidate_rect (GTK_WIDGET (self)->window, NULL, FALSE);
411 #line 412 "AudioMeter.c"
415 static void view_audio_meter_class_init (ViewAudioMeterClass * klass) {
416 view_audio_meter_parent_class = g_type_class_peek_parent (klass);
417 g_type_class_add_private (klass, sizeof (ViewAudioMeterPrivate));
418 G_OBJECT_CLASS (klass)->finalize = view_audio_meter_finalize;
422 static void view_audio_meter_instance_init (ViewAudioMeter * self) {
423 self->priv = VIEW_AUDIO_METER_GET_PRIVATE (self);
424 self->priv->meter = NULL;
425 self->priv->stereo = FALSE;
426 self->priv->current_level_left = (double) (-100);
427 self->priv->current_level_right = (double) (-100);
431 static void view_audio_meter_finalize (GObject* obj) {
432 ViewAudioMeter * self;
433 self = VIEW_AUDIO_METER (obj);
434 _cairo_surface_destroy0 (self->priv->meter);
435 _cairo_surface_destroy0 (self->priv->silkscreen);
436 G_OBJECT_CLASS (view_audio_meter_parent_class)->finalize (obj);
440 GType view_audio_meter_get_type (void) {
441 static volatile gsize view_audio_meter_type_id__volatile = 0;
442 if (g_once_init_enter (&view_audio_meter_type_id__volatile)) {
443 static const GTypeInfo g_define_type_info = { sizeof (ViewAudioMeterClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_audio_meter_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewAudioMeter), 0, (GInstanceInitFunc) view_audio_meter_instance_init, NULL };
444 GType view_audio_meter_type_id;
445 view_audio_meter_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "ViewAudioMeter", &g_define_type_info, 0);
446 g_once_init_leave (&view_audio_meter_type_id__volatile, view_audio_meter_type_id);
448 return view_audio_meter_type_id__volatile;