--- /dev/null
+/* util.c generated by valac, the Vala compiler
+ * generated from util.vala, do not modify */
+
+/* Copyright 2009 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gst/gst.h>
+#include <glib/gstdio.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <cairo.h>
+
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_FRACTION (fraction_get_type ())
+typedef struct _Fraction Fraction;
+
+#define TYPE_TIME_CODE (time_code_get_type ())
+typedef struct _TimeCode TimeCode;
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _g_checksum_free0(var) ((var == NULL) ? NULL : (var = (g_checksum_free (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _cairo_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_destroy (var), NULL)))
+#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
+
+typedef enum {
+ MEDIA_ERROR_MISSING_PLUGIN
+} MediaError;
+#define MEDIA_ERROR media_error_quark ()
+struct _Fraction {
+ gint numerator;
+ gint denominator;
+};
+
+struct _TimeCode {
+ gint hour;
+ gint minute;
+ gint second;
+ gint frame;
+ gboolean drop_code;
+};
+
+typedef enum {
+ GDK_Control_L,
+ GDK_Control_R,
+ GDK_Down,
+ GDK_equal,
+ GDK_Escape,
+ GDK_KP_Add,
+ GDK_KP_Enter,
+ GDK_KP_Subtract,
+ GDK_Left,
+ GDK_minus,
+ GDK_plus,
+ GDK_Return,
+ GDK_Right,
+ GDK_Shift_L,
+ GDK_Shift_R,
+ GDK_underscore,
+ GDK_Up
+} KeySyms;
+
+
+extern gboolean debug_enabled;
+gboolean debug_enabled = FALSE;
+extern GdkModifierType GDK_SHIFT_ALT_CONTROL_MASK;
+GdkModifierType GDK_SHIFT_ALT_CONTROL_MASK = (GDK_SHIFT_MASK | GDK_MOD1_MASK) | GDK_CONTROL_MASK;
+
+GQuark media_error_quark (void);
+float float_abs (float f);
+gboolean float_within (double f, double epsilon);
+gint sign (gint x);
+gint stricmp (const char* str1, const char* str2);
+char** copy_array (char** source, int source_length1, int* result_length1);
+void print_debug (const char* text);
+GType fraction_get_type (void);
+Fraction* fraction_dup (const Fraction* self);
+void fraction_free (Fraction* self);
+void fraction_init (Fraction *self, gint numerator, gint denominator);
+void fraction_init_from_string (Fraction *self, const char* s);
+gboolean fraction_equal (Fraction *self, Fraction* f);
+gint fraction_nearest_int (Fraction *self);
+char* fraction_to_string (Fraction *self);
+GType time_code_get_type (void);
+TimeCode* time_code_dup (const TimeCode* self);
+void time_code_free (TimeCode* self);
+void time_code_get_from_length (TimeCode *self, gint64 length);
+char* time_code_to_string (TimeCode *self);
+gboolean time_in_range (gint64 time, gint64 center, gint64 delta);
+char* isolate_filename (const char* path);
+char* get_file_extension (const char* path);
+char* append_extension (const char* path, const char* extension);
+gboolean version_at_least (const char* v, const char* w);
+gboolean get_file_md5_checksum (const char* filename, char** checksum);
+void save_file_md5_checksum (const char* filename, const char* checksum);
+gboolean md5_checksum_on_file (const char* filename, char** checksum);
+void parse_color (const char* color, GdkColor* result);
+GtkWidget* get_widget (GtkUIManager* manager, const char* name);
+#define LINE_WIDTH 1.0
+#define RADIUS 15.0
+#define ANTIALIAS CAIRO_ANTIALIAS_DEFAULT
+void draw_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height);
+void draw_right_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height);
+void draw_left_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height);
+void draw_square_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x, gint y, gint width, gint height);
+gboolean is_drop_frame_rate (Fraction* r);
+gint64 frame_to_time_with_rate (gint frame, Fraction* rate);
+gint time_to_frame_with_rate (gint64 time, Fraction* rate);
+void frame_to_time (gint frame, Fraction* rate, TimeCode* result);
+char* frame_to_string (gint frame, Fraction* rate);
+void breakup_time (gint64 time, gint* hours, gint* minutes, double* seconds);
+char* time_to_HHMMSS (gint64 time);
+char* time_to_string (gint64 time);
+GstElement* make_element_with_name (const char* element_name, const char* display_name, GError** error);
+GstElement* make_element (const char* name, GError** error);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+const GtkTargetEntry drag_target_entries[1] = {{"text/uri-list", (guint) 0, (guint) 0}};
+
+
+GQuark media_error_quark (void) {
+ return g_quark_from_static_string ("media_error-quark");
+}
+
+
+#line 12 "util.vala"
+float float_abs (float f) {
+#line 141 "util.c"
+ float result = 0.0F;
+#line 13 "util.vala"
+ if (f < 0.0f) {
+#line 145 "util.c"
+ result = -f;
+#line 14 "util.vala"
+ return result;
+#line 149 "util.c"
+ }
+ result = f;
+#line 15 "util.vala"
+ return result;
+#line 154 "util.c"
+}
+
+
+#line 18 "util.vala"
+gboolean float_within (double f, double epsilon) {
+#line 160 "util.c"
+ gboolean result = FALSE;
+ result = float_abs ((float) f) < epsilon;
+#line 19 "util.vala"
+ return result;
+#line 165 "util.c"
+}
+
+
+#line 22 "util.vala"
+gint sign (gint x) {
+#line 171 "util.c"
+ gint result = 0;
+ gint _tmp0_ = 0;
+#line 23 "util.vala"
+ if (x == 0) {
+#line 176 "util.c"
+ result = 0;
+#line 24 "util.vala"
+ return result;
+#line 180 "util.c"
+ }
+#line 25 "util.vala"
+ if (x < 0) {
+#line 25 "util.vala"
+ _tmp0_ = -1;
+#line 186 "util.c"
+ } else {
+#line 25 "util.vala"
+ _tmp0_ = 1;
+#line 190 "util.c"
+ }
+ result = _tmp0_;
+#line 25 "util.vala"
+ return result;
+#line 195 "util.c"
+}
+
+
+#line 28 "util.vala"
+gint stricmp (const char* str1, const char* str2) {
+#line 201 "util.c"
+ gint result = 0;
+ char* temp_str1;
+ char* temp_str2;
+#line 28 "util.vala"
+ g_return_val_if_fail (str1 != NULL, 0);
+#line 28 "util.vala"
+ g_return_val_if_fail (str2 != NULL, 0);
+#line 29 "util.vala"
+ temp_str1 = g_utf8_casefold (str1, (gssize) (-1));
+#line 30 "util.vala"
+ temp_str2 = g_utf8_casefold (str2, (gssize) (-1));
+#line 213 "util.c"
+ result = g_utf8_collate (temp_str1, temp_str2);
+ _g_free0 (temp_str1);
+ _g_free0 (temp_str2);
+#line 32 "util.vala"
+ return result;
+#line 219 "util.c"
+}
+
+
+#line 36 "util.vala"
+char** copy_array (char** source, int source_length1, int* result_length1) {
+#line 225 "util.c"
+ char** result = NULL;
+ char** _tmp0_;
+ gint _destination_size_;
+ gint destination_length1;
+ char** destination;
+ gint i;
+ char** _tmp2_;
+ destination = (_tmp0_ = g_new0 (char*, source_length1 + 1), destination_length1 = source_length1, _destination_size_ = destination_length1, _tmp0_);
+#line 38 "util.vala"
+ i = 0;
+#line 236 "util.c"
+ {
+ char** item_collection;
+ int item_collection_length1;
+ int item_it;
+#line 39 "util.vala"
+ item_collection = source;
+#line 243 "util.c"
+ item_collection_length1 = source_length1;
+ for (item_it = 0; item_it < source_length1; item_it = item_it + 1) {
+ char* item;
+ item = g_strdup (item_collection[item_it]);
+ {
+ char* _tmp1_;
+#line 40 "util.vala"
+ destination[i] = (_tmp1_ = g_strdup (item), _g_free0 (destination[i]), _tmp1_);
+#line 41 "util.vala"
+ i = i + 1;
+#line 254 "util.c"
+ _g_free0 (item);
+ }
+ }
+ }
+ result = (_tmp2_ = destination, *result_length1 = destination_length1, _tmp2_);
+#line 43 "util.vala"
+ return result;
+#line 262 "util.c"
+ destination = (_vala_array_free (destination, destination_length1, (GDestroyNotify) g_free), NULL);
+}
+
+
+#line 50 "util.vala"
+void print_debug (const char* text) {
+#line 50 "util.vala"
+ g_return_if_fail (text != NULL);
+#line 51 "util.vala"
+ if (!debug_enabled) {
+#line 52 "util.vala"
+ return;
+#line 275 "util.c"
+ }
+#line 54 "util.vala"
+ g_debug ("util.vala:54: %s", text);
+#line 279 "util.c"
+}
+
+
+#line 61 "util.vala"
+void fraction_init (Fraction *self, gint numerator, gint denominator) {
+#line 285 "util.c"
+ memset (self, 0, sizeof (Fraction));
+#line 62 "util.vala"
+ (*self).numerator = numerator;
+#line 63 "util.vala"
+ (*self).denominator = denominator;
+#line 291 "util.c"
+}
+
+
+#line 66 "util.vala"
+void fraction_init_from_string (Fraction *self, const char* s) {
+#line 297 "util.c"
+ char** _tmp1_;
+ gint _elements_size_;
+ gint elements_length1;
+ char** _tmp0_;
+ char** elements;
+#line 66 "util.vala"
+ g_return_if_fail (s != NULL);
+#line 305 "util.c"
+ memset (self, 0, sizeof (Fraction));
+ elements = (_tmp1_ = _tmp0_ = g_strsplit (s, "/", 0), elements_length1 = _vala_array_length (_tmp0_), _elements_size_ = elements_length1, _tmp1_);
+#line 68 "util.vala"
+ if (elements_length1 != 2) {
+#line 69 "util.vala"
+ (*self).numerator = 0;
+#line 70 "util.vala"
+ (*self).denominator = 0;
+#line 314 "util.c"
+ } else {
+#line 72 "util.vala"
+ (*self).numerator = atoi (elements[0]);
+#line 73 "util.vala"
+ (*self).denominator = atoi (elements[1]);
+#line 320 "util.c"
+ }
+ elements = (_vala_array_free (elements, elements_length1, (GDestroyNotify) g_free), NULL);
+}
+
+
+#line 77 "util.vala"
+gboolean fraction_equal (Fraction *self, Fraction* f) {
+#line 328 "util.c"
+ gboolean result = FALSE;
+#line 78 "util.vala"
+ if (float_abs (((*self).numerator / ((float) (*self).denominator)) - ((*f).numerator / ((float) (*f).denominator))) <= (1000.0f / 1001.0f)) {
+#line 332 "util.c"
+ result = TRUE;
+#line 80 "util.vala"
+ return result;
+#line 336 "util.c"
+ }
+ result = FALSE;
+#line 81 "util.vala"
+ return result;
+#line 341 "util.c"
+}
+
+
+#line 84 "util.vala"
+gint fraction_nearest_int (Fraction *self) {
+#line 347 "util.c"
+ gint result = 0;
+ result = (gint) ((((double) (*self).numerator) / (*self).denominator) + 0.5);
+#line 85 "util.vala"
+ return result;
+#line 352 "util.c"
+}
+
+
+#line 88 "util.vala"
+char* fraction_to_string (Fraction *self) {
+#line 358 "util.c"
+ char* result = NULL;
+ result = g_strdup_printf ("%d/%d", (*self).numerator, (*self).denominator);
+#line 89 "util.vala"
+ return result;
+#line 363 "util.c"
+}
+
+
+Fraction* fraction_dup (const Fraction* self) {
+ Fraction* dup;
+ dup = g_new0 (Fraction, 1);
+ memcpy (dup, self, sizeof (Fraction));
+ return dup;
+}
+
+
+void fraction_free (Fraction* self) {
+ g_free (self);
+}
+
+
+GType fraction_get_type (void) {
+ static volatile gsize fraction_type_id__volatile = 0;
+ if (g_once_init_enter (&fraction_type_id__volatile)) {
+ GType fraction_type_id;
+ fraction_type_id = g_boxed_type_register_static ("Fraction", (GBoxedCopyFunc) fraction_dup, (GBoxedFreeFunc) fraction_free);
+ g_once_init_leave (&fraction_type_id__volatile, fraction_type_id);
+ }
+ return fraction_type_id__volatile;
+}
+
+
+#line 101 "util.vala"
+void time_code_get_from_length (TimeCode *self, gint64 length) {
+#line 102 "util.vala"
+ length = length / ((gint64) GST_SECOND);
+#line 104 "util.vala"
+ (*self).hour = (gint) (length / 3600);
+#line 105 "util.vala"
+ (*self).minute = (gint) ((length % 3600) / 60);
+#line 106 "util.vala"
+ (*self).second = (gint) ((length % 3600) % 60);
+#line 107 "util.vala"
+ (*self).frame = 0;
+#line 403 "util.c"
+}
+
+
+#line 110 "util.vala"
+char* time_code_to_string (TimeCode *self) {
+#line 409 "util.c"
+ char* result = NULL;
+ char* ret;
+ char* _tmp3_;
+ char* _tmp2_;
+ char* _tmp5_;
+ char* _tmp4_;
+ char* _tmp9_;
+ char* _tmp8_;
+#line 111 "util.vala"
+ ret = g_strdup ("");
+#line 112 "util.vala"
+ if ((*self).hour != 0) {
+#line 422 "util.c"
+ char* _tmp1_;
+ char* _tmp0_;
+#line 113 "util.vala"
+ ret = (_tmp1_ = g_strconcat (ret, _tmp0_ = g_strdup_printf ("%.2d:", (*self).hour), NULL), _g_free0 (ret), _tmp1_);
+#line 427 "util.c"
+ _g_free0 (_tmp0_);
+ }
+#line 115 "util.vala"
+ ret = (_tmp3_ = g_strconcat (ret, _tmp2_ = g_strdup_printf ("%.2d:", (*self).minute), NULL), _g_free0 (ret), _tmp3_);
+#line 432 "util.c"
+ _g_free0 (_tmp2_);
+#line 116 "util.vala"
+ ret = (_tmp5_ = g_strconcat (ret, _tmp4_ = g_strdup_printf ("%.2d", (*self).second), NULL), _g_free0 (ret), _tmp5_);
+#line 436 "util.c"
+ _g_free0 (_tmp4_);
+#line 118 "util.vala"
+ if ((*self).drop_code) {
+#line 440 "util.c"
+ char* _tmp6_;
+#line 119 "util.vala"
+ ret = (_tmp6_ = g_strconcat (ret, ";", NULL), _g_free0 (ret), _tmp6_);
+#line 444 "util.c"
+ } else {
+ char* _tmp7_;
+#line 121 "util.vala"
+ ret = (_tmp7_ = g_strconcat (ret, ":", NULL), _g_free0 (ret), _tmp7_);
+#line 449 "util.c"
+ }
+#line 122 "util.vala"
+ ret = (_tmp9_ = g_strconcat (ret, _tmp8_ = g_strdup_printf ("%.2d", (*self).frame), NULL), _g_free0 (ret), _tmp9_);
+#line 453 "util.c"
+ _g_free0 (_tmp8_);
+ result = ret;
+#line 124 "util.vala"
+ return result;
+#line 458 "util.c"
+}
+
+
+TimeCode* time_code_dup (const TimeCode* self) {
+ TimeCode* dup;
+ dup = g_new0 (TimeCode, 1);
+ memcpy (dup, self, sizeof (TimeCode));
+ return dup;
+}
+
+
+void time_code_free (TimeCode* self) {
+ g_free (self);
+}
+
+
+GType time_code_get_type (void) {
+ static volatile gsize time_code_type_id__volatile = 0;
+ if (g_once_init_enter (&time_code_type_id__volatile)) {
+ GType time_code_type_id;
+ time_code_type_id = g_boxed_type_register_static ("TimeCode", (GBoxedCopyFunc) time_code_dup, (GBoxedFreeFunc) time_code_free);
+ g_once_init_leave (&time_code_type_id__volatile, time_code_type_id);
+ }
+ return time_code_type_id__volatile;
+}
+
+
+#line 128 "util.vala"
+gboolean time_in_range (gint64 time, gint64 center, gint64 delta) {
+#line 488 "util.c"
+ gboolean result = FALSE;
+ gint64 diff;
+#line 129 "util.vala"
+ diff = time - center;
+#line 493 "util.c"
+ result = llabs (diff) <= delta;
+#line 130 "util.vala"
+ return result;
+#line 497 "util.c"
+}
+
+
+#line 133 "util.vala"
+char* isolate_filename (const char* path) {
+#line 503 "util.c"
+ char* result = NULL;
+ char* str;
+ gint _tmp1__length1;
+ char** _tmp1_;
+ char** _tmp0_;
+ char* _tmp2_;
+#line 133 "util.vala"
+ g_return_val_if_fail (path != NULL, NULL);
+#line 134 "util.vala"
+ str = g_path_get_basename (path);
+#line 514 "util.c"
+ result = (_tmp2_ = g_strdup ((_tmp1_ = _tmp0_ = g_strsplit (str, ".", 0), _tmp1__length1 = _vala_array_length (_tmp0_), _tmp1_)[0]), _tmp1_ = (_vala_array_free (_tmp1_, _tmp1__length1, (GDestroyNotify) g_free), NULL), _tmp2_);
+ _g_free0 (str);
+#line 135 "util.vala"
+ return result;
+#line 519 "util.c"
+ _g_free0 (str);
+}
+
+
+#line 138 "util.vala"
+char* get_file_extension (const char* path) {
+#line 526 "util.c"
+ char* result = NULL;
+ const char* dot;
+ const char* _tmp0_;
+#line 138 "util.vala"
+ g_return_val_if_fail (path != NULL, NULL);
+#line 139 "util.vala"
+ dot = g_utf8_strrchr (path, (gssize) (-1), (gunichar) '.');
+#line 534 "util.c"
+ _tmp0_ = NULL;
+#line 140 "util.vala"
+ if (dot == NULL) {
+#line 140 "util.vala"
+ _tmp0_ = "";
+#line 540 "util.c"
+ } else {
+#line 140 "util.vala"
+ _tmp0_ = g_utf8_next_char (dot);
+#line 544 "util.c"
+ }
+ result = g_strdup (_tmp0_);
+#line 140 "util.vala"
+ return result;
+#line 549 "util.c"
+}
+
+
+#line 143 "util.vala"
+char* append_extension (const char* path, const char* extension) {
+#line 555 "util.c"
+ char* result = NULL;
+ char* _tmp0_;
+ gboolean _tmp1_;
+ char* _tmp2_;
+ char* _tmp3_;
+#line 143 "util.vala"
+ g_return_val_if_fail (path != NULL, NULL);
+#line 143 "util.vala"
+ g_return_val_if_fail (extension != NULL, NULL);
+#line 144 "util.vala"
+ if ((_tmp1_ = _vala_strcmp0 (_tmp0_ = get_file_extension (path), extension) == 0, _g_free0 (_tmp0_), _tmp1_)) {
+#line 567 "util.c"
+ result = g_strdup (path);
+#line 145 "util.vala"
+ return result;
+#line 571 "util.c"
+ }
+ result = (_tmp3_ = g_strconcat (_tmp2_ = g_strconcat (path, ".", NULL), extension, NULL), _g_free0 (_tmp2_), _tmp3_);
+#line 147 "util.vala"
+ return result;
+#line 576 "util.c"
+}
+
+
+#line 152 "util.vala"
+gboolean version_at_least (const char* v, const char* w) {
+#line 582 "util.c"
+ gboolean result = FALSE;
+ char** _tmp1_;
+ gint _va_size_;
+ gint va_length1;
+ char** _tmp0_;
+ char** va;
+ char** _tmp3_;
+ gint _wa_size_;
+ gint wa_length1;
+ char** _tmp2_;
+ char** wa;
+#line 152 "util.vala"
+ g_return_val_if_fail (v != NULL, FALSE);
+#line 152 "util.vala"
+ g_return_val_if_fail (w != NULL, FALSE);
+#line 598 "util.c"
+ va = (_tmp1_ = _tmp0_ = g_strsplit (v, ".", 0), va_length1 = _vala_array_length (_tmp0_), _va_size_ = va_length1, _tmp1_);
+ wa = (_tmp3_ = _tmp2_ = g_strsplit (w, ".", 0), wa_length1 = _vala_array_length (_tmp2_), _wa_size_ = wa_length1, _tmp3_);
+ {
+ gint i;
+#line 155 "util.vala"
+ i = 0;
+#line 605 "util.c"
+ {
+ gboolean _tmp4_;
+#line 155 "util.vala"
+ _tmp4_ = TRUE;
+#line 155 "util.vala"
+ while (TRUE) {
+#line 612 "util.c"
+ gint vi;
+ gint wi;
+#line 155 "util.vala"
+ if (!_tmp4_) {
+#line 155 "util.vala"
+ i = i + 1;
+#line 619 "util.c"
+ }
+#line 155 "util.vala"
+ _tmp4_ = FALSE;
+#line 155 "util.vala"
+ if (!(i < wa_length1)) {
+#line 155 "util.vala"
+ break;
+#line 627 "util.c"
+ }
+#line 156 "util.vala"
+ if (i >= va_length1) {
+#line 631 "util.c"
+ result = FALSE;
+ va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
+ wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
+#line 157 "util.vala"
+ return result;
+#line 637 "util.c"
+ }
+#line 158 "util.vala"
+ vi = atoi (va[i]);
+#line 159 "util.vala"
+ wi = atoi (wa[i]);
+#line 160 "util.vala"
+ if (vi > wi) {
+#line 645 "util.c"
+ result = TRUE;
+ va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
+ wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
+#line 161 "util.vala"
+ return result;
+#line 651 "util.c"
+ }
+#line 162 "util.vala"
+ if (wi > vi) {
+#line 655 "util.c"
+ result = FALSE;
+ va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
+ wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
+#line 163 "util.vala"
+ return result;
+#line 661 "util.c"
+ }
+ }
+ }
+ }
+ result = TRUE;
+ va = (_vala_array_free (va, va_length1, (GDestroyNotify) g_free), NULL);
+ wa = (_vala_array_free (wa, wa_length1, (GDestroyNotify) g_free), NULL);
+#line 165 "util.vala"
+ return result;
+#line 671 "util.c"
+}
+
+
+#line 168 "util.vala"
+gboolean get_file_md5_checksum (const char* filename, char** checksum) {
+#line 677 "util.c"
+ gboolean result = FALSE;
+ GError * _inner_error_;
+ char* new_filename;
+ gsize buffer_length = 0UL;
+#line 168 "util.vala"
+ g_return_val_if_fail (filename != NULL, FALSE);
+#line 684 "util.c"
+ if (checksum != NULL) {
+ *checksum = NULL;
+ }
+ _inner_error_ = NULL;
+#line 169 "util.vala"
+ new_filename = append_extension (filename, "md5");
+#line 691 "util.c"
+ {
+ char* _tmp1_;
+ char* _tmp0_ = NULL;
+#line 173 "util.vala"
+ g_file_get_contents (new_filename, &_tmp0_, &buffer_length, &_inner_error_);
+#line 173 "util.vala"
+ *checksum = (_tmp1_ = _tmp0_, _g_free0 (*checksum), _tmp1_);
+#line 699 "util.c"
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_FILE_ERROR) {
+ goto __catch2_g_file_error;
+ }
+ _g_free0 (new_filename);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return FALSE;
+ }
+ }
+ goto __finally2;
+ __catch2_g_file_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ result = FALSE;
+ _g_error_free0 (e);
+ _g_free0 (new_filename);
+#line 175 "util.vala"
+ return result;
+#line 722 "util.c"
+ }
+ }
+ __finally2:
+ if (_inner_error_ != NULL) {
+ _g_free0 (new_filename);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return FALSE;
+ }
+ result = buffer_length == 32;
+ _g_free0 (new_filename);
+#line 178 "util.vala"
+ return result;
+#line 736 "util.c"
+}
+
+
+#line 181 "util.vala"
+void save_file_md5_checksum (const char* filename, const char* checksum) {
+#line 742 "util.c"
+ GError * _inner_error_;
+ char* new_filename;
+#line 181 "util.vala"
+ g_return_if_fail (filename != NULL);
+#line 181 "util.vala"
+ g_return_if_fail (checksum != NULL);
+#line 749 "util.c"
+ _inner_error_ = NULL;
+#line 182 "util.vala"
+ new_filename = append_extension (filename, "md5");
+#line 753 "util.c"
+ {
+#line 185 "util.vala"
+ g_file_set_contents (new_filename, checksum, -1, &_inner_error_);
+#line 757 "util.c"
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_FILE_ERROR) {
+ goto __catch3_g_file_error;
+ }
+ _g_free0 (new_filename);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+ }
+ goto __finally3;
+ __catch3_g_file_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+#line 187 "util.vala"
+ g_error ("util.vala:187: Cannot save md5 file %s!\n", new_filename);
+#line 777 "util.c"
+ _g_error_free0 (e);
+ }
+ }
+ __finally3:
+ if (_inner_error_ != NULL) {
+ _g_free0 (new_filename);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return;
+ }
+ _g_free0 (new_filename);
+}
+
+
+#line 191 "util.vala"
+gboolean md5_checksum_on_file (const char* filename, char** checksum) {
+#line 794 "util.c"
+ gboolean result = FALSE;
+ GError * _inner_error_;
+ char* file_buffer;
+ gsize len = 0UL;
+ GChecksum* c;
+ char* _tmp2_;
+#line 191 "util.vala"
+ g_return_val_if_fail (filename != NULL, FALSE);
+#line 803 "util.c"
+ if (checksum != NULL) {
+ *checksum = NULL;
+ }
+ _inner_error_ = NULL;
+ file_buffer = NULL;
+ {
+ char* _tmp1_;
+ char* _tmp0_ = NULL;
+#line 196 "util.vala"
+ g_file_get_contents (filename, &_tmp0_, &len, &_inner_error_);
+#line 196 "util.vala"
+ file_buffer = (_tmp1_ = _tmp0_, _g_free0 (file_buffer), _tmp1_);
+#line 816 "util.c"
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_FILE_ERROR) {
+ goto __catch4_g_file_error;
+ }
+ _g_free0 (file_buffer);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return FALSE;
+ }
+ }
+ goto __finally4;
+ __catch4_g_file_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ result = FALSE;
+ _g_error_free0 (e);
+ _g_free0 (file_buffer);
+#line 198 "util.vala"
+ return result;
+#line 839 "util.c"
+ }
+ }
+ __finally4:
+ if (_inner_error_ != NULL) {
+ _g_free0 (file_buffer);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return FALSE;
+ }
+#line 201 "util.vala"
+ c = g_checksum_new (G_CHECKSUM_MD5);
+#line 202 "util.vala"
+ g_checksum_update (c, (guchar*) file_buffer, len);
+#line 203 "util.vala"
+ *checksum = (_tmp2_ = g_strdup (g_checksum_get_string (c)), _g_free0 (*checksum), _tmp2_);
+#line 855 "util.c"
+ result = TRUE;
+ _g_free0 (file_buffer);
+ _g_checksum_free0 (c);
+#line 204 "util.vala"
+ return result;
+#line 861 "util.c"
+}
+
+
+#line 239 "util.vala"
+void parse_color (const char* color, GdkColor* result) {
+#line 867 "util.c"
+ GdkColor c = {0};
+#line 239 "util.vala"
+ g_return_if_fail (color != NULL);
+#line 241 "util.vala"
+ if (!gdk_color_parse (color, &c)) {
+#line 242 "util.vala"
+ g_error ("util.vala:242: can't parse color");
+#line 875 "util.c"
+ }
+ *result = c;
+#line 243 "util.vala"
+ return;
+#line 880 "util.c"
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+#line 246 "util.vala"
+GtkWidget* get_widget (GtkUIManager* manager, const char* name) {
+#line 891 "util.c"
+ GtkWidget* result = NULL;
+ GtkWidget* widget;
+#line 246 "util.vala"
+ g_return_val_if_fail (GTK_IS_UI_MANAGER (manager), NULL);
+#line 246 "util.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 247 "util.vala"
+ widget = _g_object_ref0 (gtk_ui_manager_get_widget (manager, name));
+#line 248 "util.vala"
+ if (widget == NULL) {
+#line 249 "util.vala"
+ g_error ("util.vala:249: can't find widget");
+#line 904 "util.c"
+ }
+ result = widget;
+#line 250 "util.vala"
+ return result;
+#line 909 "util.c"
+}
+
+
+#line 262 "util.vala"
+void draw_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height) {
+#line 915 "util.c"
+ gboolean _tmp0_ = FALSE;
+ double x1;
+ double y1;
+ cairo_t* cairo_window;
+#line 262 "util.vala"
+ g_return_if_fail (GDK_IS_WINDOW (window));
+#line 264 "util.vala"
+ if (width == 0) {
+#line 264 "util.vala"
+ _tmp0_ = TRUE;
+#line 926 "util.c"
+ } else {
+#line 264 "util.vala"
+ _tmp0_ = height == 0;
+#line 930 "util.c"
+ }
+#line 264 "util.vala"
+ if (_tmp0_) {
+#line 265 "util.vala"
+ return;
+#line 936 "util.c"
+ }
+#line 267 "util.vala"
+ x1 = (double) (x0 + width);
+#line 268 "util.vala"
+ y1 = (double) (y0 + height);
+#line 270 "util.vala"
+ cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
+#line 271 "util.vala"
+ gdk_cairo_set_source_color (cairo_window, color);
+#line 272 "util.vala"
+ cairo_set_antialias (cairo_window, ANTIALIAS);
+#line 274 "util.vala"
+ if ((width / 2) < RADIUS) {
+#line 275 "util.vala"
+ if ((height / 2) < RADIUS) {
+#line 276 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
+#line 277 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
+#line 278 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
+#line 279 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
+#line 280 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
+#line 962 "util.c"
+ } else {
+#line 282 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
+#line 283 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
+#line 284 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
+#line 285 "util.vala"
+ cairo_line_to (cairo_window, x1, y1 - RADIUS);
+#line 286 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
+#line 287 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
+#line 976 "util.c"
+ }
+ } else {
+#line 290 "util.vala"
+ if ((height / 2) < RADIUS) {
+#line 291 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
+#line 292 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
+#line 293 "util.vala"
+ cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
+#line 294 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
+#line 295 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
+#line 296 "util.vala"
+ cairo_line_to (cairo_window, x0 + RADIUS, y1);
+#line 297 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
+#line 995 "util.c"
+ } else {
+#line 299 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
+#line 300 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
+#line 301 "util.vala"
+ cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
+#line 302 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
+#line 303 "util.vala"
+ cairo_line_to (cairo_window, x1, y1 - RADIUS);
+#line 304 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
+#line 305 "util.vala"
+ cairo_line_to (cairo_window, x0 + RADIUS, y1);
+#line 306 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
+#line 1013 "util.c"
+ }
+ }
+#line 309 "util.vala"
+ cairo_close_path (cairo_window);
+#line 311 "util.vala"
+ if (filled) {
+#line 312 "util.vala"
+ cairo_fill (cairo_window);
+#line 1022 "util.c"
+ } else {
+#line 314 "util.vala"
+ cairo_set_line_width (cairo_window, LINE_WIDTH);
+#line 315 "util.vala"
+ cairo_stroke (cairo_window);
+#line 1028 "util.c"
+ }
+ _cairo_destroy0 (cairo_window);
+}
+
+
+#line 319 "util.vala"
+void draw_right_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height) {
+#line 1036 "util.c"
+ gboolean _tmp0_ = FALSE;
+ double x1;
+ double y1;
+ cairo_t* cairo_window;
+#line 319 "util.vala"
+ g_return_if_fail (GDK_IS_WINDOW (window));
+#line 321 "util.vala"
+ if (width == 0) {
+#line 321 "util.vala"
+ _tmp0_ = TRUE;
+#line 1047 "util.c"
+ } else {
+#line 321 "util.vala"
+ _tmp0_ = height == 0;
+#line 1051 "util.c"
+ }
+#line 321 "util.vala"
+ if (_tmp0_) {
+#line 322 "util.vala"
+ return;
+#line 1057 "util.c"
+ }
+#line 324 "util.vala"
+ x1 = (double) (x0 + width);
+#line 325 "util.vala"
+ y1 = (double) (y0 + height);
+#line 327 "util.vala"
+ cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
+#line 328 "util.vala"
+ gdk_cairo_set_source_color (cairo_window, color);
+#line 329 "util.vala"
+ cairo_set_antialias (cairo_window, ANTIALIAS);
+#line 331 "util.vala"
+ if ((width / 2) < RADIUS) {
+#line 332 "util.vala"
+ if ((height / 2) < RADIUS) {
+#line 333 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (double) y0);
+#line 334 "util.vala"
+ cairo_line_to (cairo_window, (x0 + x1) / 2, (double) y0);
+#line 335 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
+#line 336 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
+#line 337 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, y1);
+#line 338 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, (double) y0);
+#line 1085 "util.c"
+ } else {
+#line 340 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (double) y0);
+#line 341 "util.vala"
+ cairo_line_to (cairo_window, (x0 + x1) / 2, (double) y0);
+#line 342 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
+#line 343 "util.vala"
+ cairo_line_to (cairo_window, x1, y1 - RADIUS);
+#line 344 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, (x1 + x0) / 2, y1);
+#line 345 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, y1);
+#line 346 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, (double) y0);
+#line 1101 "util.c"
+ }
+ } else {
+#line 349 "util.vala"
+ if ((height / 2) < RADIUS) {
+#line 350 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (double) y0);
+#line 351 "util.vala"
+ cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
+#line 352 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, (y0 + y1) / 2);
+#line 353 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
+#line 354 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, y1);
+#line 355 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, (double) y0);
+#line 1118 "util.c"
+ } else {
+#line 357 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (double) y0);
+#line 358 "util.vala"
+ cairo_line_to (cairo_window, x1 - RADIUS, (double) y0);
+#line 359 "util.vala"
+ cairo_curve_to (cairo_window, x1, (double) y0, x1, (double) y0, x1, y0 + RADIUS);
+#line 360 "util.vala"
+ cairo_line_to (cairo_window, x1, y1 - RADIUS);
+#line 361 "util.vala"
+ cairo_curve_to (cairo_window, x1, y1, x1, y1, x1 - RADIUS, y1);
+#line 362 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, y1);
+#line 363 "util.vala"
+ cairo_line_to (cairo_window, (double) x0, (double) y0);
+#line 1134 "util.c"
+ }
+ }
+#line 366 "util.vala"
+ cairo_close_path (cairo_window);
+#line 368 "util.vala"
+ if (filled) {
+#line 369 "util.vala"
+ cairo_fill (cairo_window);
+#line 1143 "util.c"
+ } else {
+#line 371 "util.vala"
+ cairo_set_line_width (cairo_window, LINE_WIDTH);
+#line 372 "util.vala"
+ cairo_stroke (cairo_window);
+#line 1149 "util.c"
+ }
+ _cairo_destroy0 (cairo_window);
+}
+
+
+#line 376 "util.vala"
+void draw_left_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height) {
+#line 1157 "util.c"
+ gboolean _tmp0_ = FALSE;
+ double x1;
+ double y1;
+ cairo_t* cairo_window;
+#line 376 "util.vala"
+ g_return_if_fail (GDK_IS_WINDOW (window));
+#line 378 "util.vala"
+ if (width == 0) {
+#line 378 "util.vala"
+ _tmp0_ = TRUE;
+#line 1168 "util.c"
+ } else {
+#line 378 "util.vala"
+ _tmp0_ = height == 0;
+#line 1172 "util.c"
+ }
+#line 378 "util.vala"
+ if (_tmp0_) {
+#line 379 "util.vala"
+ return;
+#line 1178 "util.c"
+ }
+#line 381 "util.vala"
+ x1 = (double) (x0 + width);
+#line 382 "util.vala"
+ y1 = (double) (y0 + height);
+#line 384 "util.vala"
+ cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
+#line 385 "util.vala"
+ gdk_cairo_set_source_color (cairo_window, color);
+#line 386 "util.vala"
+ cairo_set_antialias (cairo_window, ANTIALIAS);
+#line 388 "util.vala"
+ if ((width / 2) < RADIUS) {
+#line 389 "util.vala"
+ if ((height / 2) < RADIUS) {
+#line 390 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
+#line 391 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
+#line 392 "util.vala"
+ cairo_line_to (cairo_window, x1, (double) y0);
+#line 393 "util.vala"
+ cairo_line_to (cairo_window, x1, y1);
+#line 394 "util.vala"
+ cairo_line_to (cairo_window, (x1 + x0) / 2, y1);
+#line 395 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
+#line 1206 "util.c"
+ } else {
+#line 397 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
+#line 398 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, (x0 + x1) / 2, (double) y0);
+#line 399 "util.vala"
+ cairo_line_to (cairo_window, x1, (double) y0);
+#line 400 "util.vala"
+ cairo_line_to (cairo_window, x1, y1);
+#line 401 "util.vala"
+ cairo_line_to (cairo_window, (x1 + x0) / 2, y1);
+#line 402 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
+#line 1220 "util.c"
+ }
+ } else {
+#line 405 "util.vala"
+ if ((height / 2) < RADIUS) {
+#line 406 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, (y0 + y1) / 2);
+#line 407 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
+#line 408 "util.vala"
+ cairo_line_to (cairo_window, x1, (double) y0);
+#line 409 "util.vala"
+ cairo_line_to (cairo_window, x1, y1);
+#line 410 "util.vala"
+ cairo_line_to (cairo_window, x0 + RADIUS, y1);
+#line 411 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, (y0 + y1) / 2);
+#line 1237 "util.c"
+ } else {
+#line 413 "util.vala"
+ cairo_move_to (cairo_window, (double) x0, y0 + RADIUS);
+#line 414 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, (double) y0, (double) x0, (double) y0, x0 + RADIUS, (double) y0);
+#line 415 "util.vala"
+ cairo_line_to (cairo_window, x1, (double) y0);
+#line 416 "util.vala"
+ cairo_line_to (cairo_window, x1, y1);
+#line 417 "util.vala"
+ cairo_line_to (cairo_window, x0 + RADIUS, y1);
+#line 418 "util.vala"
+ cairo_curve_to (cairo_window, (double) x0, y1, (double) x0, y1, (double) x0, y1 - RADIUS);
+#line 1251 "util.c"
+ }
+ }
+#line 421 "util.vala"
+ cairo_close_path (cairo_window);
+#line 423 "util.vala"
+ if (filled) {
+#line 424 "util.vala"
+ cairo_fill (cairo_window);
+#line 1260 "util.c"
+ } else {
+#line 426 "util.vala"
+ cairo_set_line_width (cairo_window, LINE_WIDTH);
+#line 427 "util.vala"
+ cairo_stroke (cairo_window);
+#line 1266 "util.c"
+ }
+ _cairo_destroy0 (cairo_window);
+}
+
+
+#line 431 "util.vala"
+void draw_square_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x, gint y, gint width, gint height) {
+#line 1274 "util.c"
+ gboolean _tmp0_ = FALSE;
+ cairo_t* cairo_window;
+#line 431 "util.vala"
+ g_return_if_fail (GDK_IS_WINDOW (window));
+#line 433 "util.vala"
+ if (width == 0) {
+#line 433 "util.vala"
+ _tmp0_ = TRUE;
+#line 1283 "util.c"
+ } else {
+#line 433 "util.vala"
+ _tmp0_ = height == 0;
+#line 1287 "util.c"
+ }
+#line 433 "util.vala"
+ if (_tmp0_) {
+#line 434 "util.vala"
+ return;
+#line 1293 "util.c"
+ }
+#line 436 "util.vala"
+ cairo_window = gdk_cairo_create (GDK_DRAWABLE (window));
+#line 437 "util.vala"
+ gdk_cairo_set_source_color (cairo_window, color);
+#line 438 "util.vala"
+ cairo_set_antialias (cairo_window, ANTIALIAS);
+#line 440 "util.vala"
+ cairo_rectangle (cairo_window, (double) x, (double) y, (double) width, (double) height);
+#line 442 "util.vala"
+ if (filled) {
+#line 443 "util.vala"
+ cairo_fill (cairo_window);
+#line 1307 "util.c"
+ } else {
+#line 445 "util.vala"
+ cairo_set_line_width (cairo_window, LINE_WIDTH);
+#line 446 "util.vala"
+ cairo_stroke (cairo_window);
+#line 1313 "util.c"
+ }
+ _cairo_destroy0 (cairo_window);
+}
+
+
+#line 452 "util.vala"
+gboolean is_drop_frame_rate (Fraction* r) {
+#line 1321 "util.c"
+ gboolean result = FALSE;
+ gboolean _tmp0_ = FALSE;
+ gboolean _tmp1_ = FALSE;
+#line 453 "util.vala"
+ if ((*r).numerator == 2997) {
+#line 453 "util.vala"
+ _tmp1_ = (*r).denominator == 100;
+#line 1329 "util.c"
+ } else {
+#line 453 "util.vala"
+ _tmp1_ = FALSE;
+#line 1333 "util.c"
+ }
+#line 453 "util.vala"
+ if (_tmp1_) {
+#line 453 "util.vala"
+ _tmp0_ = TRUE;
+#line 1339 "util.c"
+ } else {
+ gboolean _tmp2_ = FALSE;
+#line 454 "util.vala"
+ if ((*r).numerator == 30000) {
+#line 454 "util.vala"
+ _tmp2_ = (*r).denominator == 1001;
+#line 1346 "util.c"
+ } else {
+#line 454 "util.vala"
+ _tmp2_ = FALSE;
+#line 1350 "util.c"
+ }
+#line 454 "util.vala"
+ _tmp0_ = _tmp2_;
+#line 1354 "util.c"
+ }
+ result = _tmp0_;
+#line 453 "util.vala"
+ return result;
+#line 1359 "util.c"
+}
+
+
+#line 457 "util.vala"
+gint64 frame_to_time_with_rate (gint frame, Fraction* rate) {
+#line 1365 "util.c"
+ gint64 result = 0LL;
+ gint64 time;
+#line 458 "util.vala"
+ time = (gint64) gst_util_uint64_scale ((guint64) frame, (guint64) (GST_SECOND * (*rate).denominator), (guint64) (*rate).numerator);
+#line 1370 "util.c"
+ result = time;
+#line 459 "util.vala"
+ return result;
+#line 1374 "util.c"
+}
+
+
+#line 462 "util.vala"
+gint time_to_frame_with_rate (gint64 time, Fraction* rate) {
+#line 1380 "util.c"
+ gint result = 0;
+ gint frame;
+ gint _tmp0_ = 0;
+#line 463 "util.vala"
+ frame = (gint) gst_util_uint64_scale ((guint64) time, (guint64) (*rate).numerator, (guint64) (GST_SECOND * (*rate).denominator));
+#line 469 "util.vala"
+ if (time >= frame_to_time_with_rate (frame + 1, rate)) {
+#line 469 "util.vala"
+ _tmp0_ = frame + 1;
+#line 1390 "util.c"
+ } else {
+#line 469 "util.vala"
+ _tmp0_ = frame;
+#line 1394 "util.c"
+ }
+ result = _tmp0_;
+#line 469 "util.vala"
+ return result;
+#line 1399 "util.c"
+}
+
+
+#line 472 "util.vala"
+void frame_to_time (gint frame, Fraction* rate, TimeCode* result) {
+#line 1405 "util.c"
+ gint frame_rate;
+ TimeCode _tmp0_ = {0};
+ TimeCode t;
+ gint64 secs;
+#line 473 "util.vala"
+ frame_rate = 0;
+#line 475 "util.vala"
+ t = (_tmp0_);
+#line 477 "util.vala"
+ t.drop_code = FALSE;
+#line 478 "util.vala"
+ if ((*rate).denominator == 1) {
+#line 479 "util.vala"
+ frame_rate = (*rate).numerator;
+#line 1420 "util.c"
+ } else {
+#line 480 "util.vala"
+ if (is_drop_frame_rate (rate)) {
+#line 1424 "util.c"
+ gint FRAMES_PER_MINUTE;
+ gint FRAMES_PER_10_MINUTES;
+ gint block;
+ gint minute_in_block;
+ gint minutes;
+#line 481 "util.vala"
+ t.drop_code = TRUE;
+#line 482 "util.vala"
+ frame_rate = 30;
+#line 485 "util.vala"
+ FRAMES_PER_MINUTE = (30 * 60) - 2;
+#line 486 "util.vala"
+ FRAMES_PER_10_MINUTES = (10 * FRAMES_PER_MINUTE) + 2;
+#line 488 "util.vala"
+ block = frame / FRAMES_PER_10_MINUTES;
+#line 489 "util.vala"
+ minute_in_block = ((frame % FRAMES_PER_10_MINUTES) - 2) / FRAMES_PER_MINUTE;
+#line 490 "util.vala"
+ minutes = (10 * block) + minute_in_block;
+#line 491 "util.vala"
+ frame = frame + ((2 * minutes) - (2 * block));
+#line 1446 "util.c"
+ } else {
+#line 495 "util.vala"
+ frame_rate = (*rate).numerator / (*rate).denominator;
+#line 1450 "util.c"
+ }
+ }
+#line 498 "util.vala"
+ t.frame = frame % frame_rate;
+#line 500 "util.vala"
+ secs = (gint64) (frame / frame_rate);
+#line 501 "util.vala"
+ t.hour = ((gint) secs) / 3600;
+#line 502 "util.vala"
+ t.minute = (((gint) secs) % 3600) / 60;
+#line 503 "util.vala"
+ t.second = (((gint) secs) % 3600) % 60;
+#line 1463 "util.c"
+ *result = t;
+#line 505 "util.vala"
+ return;
+#line 1467 "util.c"
+}
+
+
+#line 508 "util.vala"
+char* frame_to_string (gint frame, Fraction* rate) {
+#line 1473 "util.c"
+ char* result = NULL;
+ TimeCode _tmp1_;
+ TimeCode _tmp0_ = {0};
+ result = time_code_to_string ((_tmp1_ = (frame_to_time (frame, rate, &_tmp0_), _tmp0_), &_tmp1_));
+#line 509 "util.vala"
+ return result;
+#line 1480 "util.c"
+}
+
+
+#line 512 "util.vala"
+void breakup_time (gint64 time, gint* hours, gint* minutes, double* seconds) {
+#line 1486 "util.c"
+ gint64 the_time;
+ gint64 minute;
+ gint64 hour;
+#line 513 "util.vala"
+ the_time = time;
+#line 514 "util.vala"
+ minute = (gint64) (GST_SECOND * 60);
+#line 515 "util.vala"
+ hour = minute * 60;
+#line 516 "util.vala"
+ *hours = (gint) (the_time / hour);
+#line 517 "util.vala"
+ the_time = the_time % hour;
+#line 518 "util.vala"
+ *minutes = (gint) (the_time / minute);
+#line 519 "util.vala"
+ the_time = the_time % minute;
+#line 520 "util.vala"
+ *seconds = ((double) the_time) / GST_SECOND;
+#line 1506 "util.c"
+}
+
+
+#line 523 "util.vala"
+char* time_to_HHMMSS (gint64 time) {
+#line 1512 "util.c"
+ char* result = NULL;
+ gint hours = 0;
+ gint minutes = 0;
+ double seconds = 0.0;
+#line 528 "util.vala"
+ breakup_time (time, &hours, &minutes, &seconds);
+#line 1519 "util.c"
+ result = g_strdup_printf ("%02d:%02d:%05.2lf", hours, minutes, seconds);
+#line 529 "util.vala"
+ return result;
+#line 1523 "util.c"
+}
+
+
+#line 532 "util.vala"
+char* time_to_string (gint64 time) {
+#line 1529 "util.c"
+ char* result = NULL;
+ gint hours = 0;
+ gint minutes = 0;
+ double seconds = 0.0;
+ char* return_value;
+ gboolean _tmp0_ = FALSE;
+#line 537 "util.vala"
+ breakup_time (time, &hours, &minutes, &seconds);
+#line 538 "util.vala"
+ return_value = g_strdup_printf ("%1.2lfs", seconds);
+#line 539 "util.vala"
+ if (hours > 0) {
+#line 539 "util.vala"
+ _tmp0_ = TRUE;
+#line 1544 "util.c"
+ } else {
+#line 539 "util.vala"
+ _tmp0_ = minutes > 0;
+#line 1548 "util.c"
+ }
+#line 539 "util.vala"
+ if (_tmp0_) {
+#line 1552 "util.c"
+ char* _tmp2_;
+ char* _tmp1_;
+#line 540 "util.vala"
+ return_value = (_tmp2_ = g_strconcat (_tmp1_ = g_strdup_printf ("%dm ", minutes), return_value, NULL), _g_free0 (return_value), _tmp2_);
+#line 1557 "util.c"
+ _g_free0 (_tmp1_);
+ }
+#line 543 "util.vala"
+ if (hours > 0) {
+#line 1562 "util.c"
+ char* _tmp4_;
+ char* _tmp3_;
+#line 544 "util.vala"
+ return_value = (_tmp4_ = g_strconcat (_tmp3_ = g_strdup_printf ("%dh ", hours), return_value, NULL), _g_free0 (return_value), _tmp4_);
+#line 1567 "util.c"
+ _g_free0 (_tmp3_);
+ }
+ result = return_value;
+#line 547 "util.vala"
+ return result;
+#line 1573 "util.c"
+}
+
+
+#line 550 "util.vala"
+GstElement* make_element_with_name (const char* element_name, const char* display_name, GError** error) {
+#line 1579 "util.c"
+ GstElement* result = NULL;
+ GError * _inner_error_;
+ GstElement* e;
+#line 550 "util.vala"
+ g_return_val_if_fail (element_name != NULL, NULL);
+#line 1585 "util.c"
+ _inner_error_ = NULL;
+#line 552 "util.vala"
+ e = gst_element_factory_make (element_name, display_name);
+#line 553 "util.vala"
+ if (e == NULL) {
+#line 1591 "util.c"
+ char* _tmp0_;
+ GError* _tmp1_;
+ _inner_error_ = (_tmp1_ = g_error_new_literal (MEDIA_ERROR, MEDIA_ERROR_MISSING_PLUGIN, _tmp0_ = g_strdup_printf ("Could not create element %s(%s)", element_name, display_name)), _g_free0 (_tmp0_), _tmp1_);
+ {
+ g_propagate_error (error, _inner_error_);
+ _gst_object_unref0 (e);
+ return NULL;
+ }
+ }
+ result = e;
+#line 557 "util.vala"
+ return result;
+#line 1604 "util.c"
+}
+
+
+#line 560 "util.vala"
+GstElement* make_element (const char* name, GError** error) {
+#line 1610 "util.c"
+ GstElement* result = NULL;
+ GError * _inner_error_;
+ GstElement* _tmp0_;
+#line 560 "util.vala"
+ g_return_val_if_fail (name != NULL, NULL);
+#line 1616 "util.c"
+ _inner_error_ = NULL;
+#line 561 "util.vala"
+ _tmp0_ = make_element_with_name (name, NULL, &_inner_error_);
+#line 1620 "util.c"
+ if (_inner_error_ != NULL) {
+ g_propagate_error (error, _inner_error_);
+ return NULL;
+ }
+ result = _tmp0_;
+#line 561 "util.vala"
+ return result;
+#line 1628 "util.c"
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+ if (str1 == NULL) {
+ return -(str1 != str2);
+ }
+ if (str2 == NULL) {
+ return str1 != str2;
+ }
+ return strcmp (str1, str2);
+}
+
+
+
+