Initial commit
[fillmore] / src / marina / marina / Ruler.c
diff --git a/src/marina/marina/Ruler.c b/src/marina/marina/Ruler.c
new file mode 100644 (file)
index 0000000..058d32b
--- /dev/null
@@ -0,0 +1,306 @@
+/* Ruler.c generated by valac, the Vala compiler
+ * generated from Ruler.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 <gtk/gtk.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gdk/gdk.h>
+#include <cairo.h>
+#include <pango/pango.h>
+
+
+#define VIEW_TYPE_RULER (view_ruler_get_type ())
+#define VIEW_RULER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIEW_TYPE_RULER, ViewRuler))
+#define VIEW_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIEW_TYPE_RULER, ViewRulerClass))
+#define VIEW_IS_RULER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIEW_TYPE_RULER))
+#define VIEW_IS_RULER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIEW_TYPE_RULER))
+#define VIEW_RULER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIEW_TYPE_RULER, ViewRulerClass))
+
+typedef struct _ViewRuler ViewRuler;
+typedef struct _ViewRulerClass ViewRulerClass;
+typedef struct _ViewRulerPrivate ViewRulerPrivate;
+
+#define MODEL_TYPE_TIME_SYSTEM (model_time_system_get_type ())
+#define MODEL_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystem))
+#define MODEL_IS_TIME_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TIME_SYSTEM))
+#define MODEL_TIME_SYSTEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MODEL_TYPE_TIME_SYSTEM, ModelTimeSystemIface))
+
+typedef struct _ModelTimeSystem ModelTimeSystem;
+typedef struct _ModelTimeSystemIface ModelTimeSystemIface;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _cairo_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_destroy (var), NULL)))
+#define _pango_font_description_free0(var) ((var == NULL) ? NULL : (var = (pango_font_description_free (var), NULL)))
+
+struct _ViewRuler {
+       GtkDrawingArea parent_instance;
+       ViewRulerPrivate * priv;
+};
+
+struct _ViewRulerClass {
+       GtkDrawingAreaClass parent_class;
+};
+
+struct _ModelTimeSystemIface {
+       GTypeInterface parent_iface;
+       void (*calculate_pixel_step) (ModelTimeSystem* self, float inc, float pixel_min, float pixel_div);
+       gint64 (*xpos_to_time) (ModelTimeSystem* self, gint x);
+       gint64 (*xsize_to_time) (ModelTimeSystem* self, gint x);
+       gint (*time_to_xpos) (ModelTimeSystem* self, gint64 time);
+       gint64 (*get_pixel_snap_time) (ModelTimeSystem* self);
+       gint (*time_to_xsize) (ModelTimeSystem* self, gint64 time);
+       float (*get_pixel_percentage) (ModelTimeSystem* self);
+       gint (*get_start_token) (ModelTimeSystem* self, gint xsize);
+       gint (*get_next_position) (ModelTimeSystem* self, gint token);
+       gint (*get_pixel_height) (ModelTimeSystem* self, gint token);
+       char* (*get_display_string) (ModelTimeSystem* self, gint token);
+       gint (*frame_to_xsize) (ModelTimeSystem* self, gint frame);
+       gint (*xsize_to_frame) (ModelTimeSystem* self, gint xsize);
+       char* (*get_time_string) (ModelTimeSystem* self, gint64 time);
+       char* (*get_time_duration) (ModelTimeSystem* self, gint64 time);
+};
+
+struct _ViewRulerPrivate {
+       ModelTimeSystem* provider;
+};
+
+
+static gpointer view_ruler_parent_class = NULL;
+
+GType view_ruler_get_type (void);
+GType model_time_system_get_type (void);
+#define VIEW_RULER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIEW_TYPE_RULER, ViewRulerPrivate))
+enum  {
+       VIEW_RULER_DUMMY_PROPERTY
+};
+#define VIEW_RULER_BORDER 4
+ViewRuler* view_ruler_new (ModelTimeSystem* provider, gint height);
+ViewRuler* view_ruler_construct (GType object_type, ModelTimeSystem* provider, gint height);
+gint model_time_system_get_start_token (ModelTimeSystem* self, gint xsize);
+void parse_color (const char* color, GdkColor* result);
+gint model_time_system_frame_to_xsize (ModelTimeSystem* self, gint frame);
+gint model_time_system_get_pixel_height (ModelTimeSystem* self, gint token);
+char* model_time_system_get_display_string (ModelTimeSystem* self, gint token);
+gint model_time_system_get_next_position (ModelTimeSystem* self, gint token);
+static gboolean view_ruler_real_expose_event (GtkWidget* base, GdkEventExpose* event);
+static gboolean view_ruler_real_button_press_event (GtkWidget* base, GdkEventButton* event);
+static gboolean view_ruler_real_motion_notify_event (GtkWidget* base, GdkEventMotion* event);
+static void view_ruler_finalize (GObject* obj);
+
+
+
+#line 14 "Ruler.vala"
+ViewRuler* view_ruler_construct (GType object_type, ModelTimeSystem* provider, gint height) {
+#line 105 "Ruler.c"
+       ViewRuler * self;
+#line 14 "Ruler.vala"
+       g_return_val_if_fail (MODEL_IS_TIME_SYSTEM (provider), NULL);
+#line 109 "Ruler.c"
+       self = g_object_newv (object_type, 0, NULL);
+#line 15 "Ruler.vala"
+       self->priv->provider = provider;
+#line 16 "Ruler.vala"
+       GTK_WIDGET_SET_FLAGS (GTK_WIDGET (self), GTK_NO_WINDOW);
+#line 17 "Ruler.vala"
+       gtk_widget_set_size_request (GTK_WIDGET (self), 0, height);
+#line 117 "Ruler.c"
+       return self;
+}
+
+
+#line 14 "Ruler.vala"
+ViewRuler* view_ruler_new (ModelTimeSystem* provider, gint height) {
+#line 14 "Ruler.vala"
+       return view_ruler_construct (VIEW_TYPE_RULER, provider, height);
+#line 126 "Ruler.c"
+}
+
+
+#line 20 "Ruler.vala"
+static gboolean view_ruler_real_expose_event (GtkWidget* base, GdkEventExpose* event) {
+#line 132 "Ruler.c"
+       ViewRuler * self;
+       gboolean result = FALSE;
+       gint x;
+       gint frame;
+       cairo_t* context;
+       GdkColor _tmp1_;
+       GdkColor _tmp0_ = {0};
+       cairo_antialias_t old_antialias;
+       gint stop;
+       PangoFontDescription* f;
+       self = VIEW_RULER (base);
+#line 21 "Ruler.vala"
+       x = (*event).area.x;
+#line 22 "Ruler.vala"
+       frame = model_time_system_get_start_token (self->priv->provider, x);
+#line 24 "Ruler.vala"
+       context = gdk_cairo_create (GDK_DRAWABLE (GTK_WIDGET (self)->window));
+#line 26 "Ruler.vala"
+       gdk_cairo_set_source_color (context, (_tmp1_ = (parse_color ("#777", &_tmp0_), _tmp0_), &_tmp1_));
+#line 27 "Ruler.vala"
+       cairo_rectangle (context, (double) (*event).area.x, (double) (*event).area.y, (double) (*event).area.width, (double) (*event).area.height);
+#line 28 "Ruler.vala"
+       cairo_fill (context);
+#line 30 "Ruler.vala"
+       old_antialias = cairo_get_antialias (context);
+#line 32 "Ruler.vala"
+       cairo_set_antialias (context, CAIRO_ANTIALIAS_NONE);
+#line 33 "Ruler.vala"
+       cairo_set_source_rgb (context, 1.0, 1.0, 1.0);
+#line 34 "Ruler.vala"
+       stop = (*event).area.x + (*event).area.width;
+#line 35 "Ruler.vala"
+       f = pango_font_description_from_string ("Sans 9");
+#line 36 "Ruler.vala"
+       while (TRUE) {
+#line 168 "Ruler.c"
+               gint y;
+               char* display_string;
+#line 36 "Ruler.vala"
+               if (!(x <= stop)) {
+#line 36 "Ruler.vala"
+                       break;
+#line 175 "Ruler.c"
+               }
+#line 37 "Ruler.vala"
+               x = model_time_system_frame_to_xsize (self->priv->provider, frame);
+#line 38 "Ruler.vala"
+               y = model_time_system_get_pixel_height (self->priv->provider, frame);
+#line 40 "Ruler.vala"
+               cairo_move_to (context, (double) (x + VIEW_RULER_BORDER), (double) 0);
+#line 41 "Ruler.vala"
+               cairo_line_to (context, (double) (x + VIEW_RULER_BORDER), (double) y);
+#line 43 "Ruler.vala"
+               display_string = model_time_system_get_display_string (self->priv->provider, frame);
+#line 44 "Ruler.vala"
+               if (display_string != NULL) {
+#line 189 "Ruler.c"
+                       PangoLayout* layout;
+                       gint w = 0;
+                       gint h = 0;
+                       gint text_pos;
+#line 45 "Ruler.vala"
+                       layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), display_string);
+#line 49 "Ruler.vala"
+                       pango_layout_set_font_description (layout, f);
+#line 50 "Ruler.vala"
+                       pango_layout_get_pixel_size (layout, &w, &h);
+#line 51 "Ruler.vala"
+                       text_pos = (x - (w / 2)) + VIEW_RULER_BORDER;
+#line 52 "Ruler.vala"
+                       if (text_pos < 0) {
+#line 53 "Ruler.vala"
+                               text_pos = 0;
+#line 206 "Ruler.c"
+                       }
+#line 56 "Ruler.vala"
+                       gdk_draw_layout (GDK_DRAWABLE (GTK_WIDGET (self)->window), gtk_widget_get_style (GTK_WIDGET (self))->white_gc, text_pos, 7, layout);
+#line 210 "Ruler.c"
+                       _g_object_unref0 (layout);
+               }
+#line 59 "Ruler.vala"
+               frame = model_time_system_get_next_position (self->priv->provider, frame);
+#line 215 "Ruler.c"
+               _g_free0 (display_string);
+       }
+#line 61 "Ruler.vala"
+       cairo_set_antialias (context, old_antialias);
+#line 62 "Ruler.vala"
+       cairo_set_line_width (context, 1.0);
+#line 63 "Ruler.vala"
+       cairo_stroke (context);
+#line 224 "Ruler.c"
+       result = TRUE;
+       _cairo_destroy0 (context);
+       _pango_font_description_free0 (f);
+#line 64 "Ruler.vala"
+       return result;
+#line 230 "Ruler.c"
+}
+
+
+#line 67 "Ruler.vala"
+static gboolean view_ruler_real_button_press_event (GtkWidget* base, GdkEventButton* event) {
+#line 236 "Ruler.c"
+       ViewRuler * self;
+       gboolean result = FALSE;
+       self = VIEW_RULER (base);
+#line 68 "Ruler.vala"
+       g_signal_emit_by_name (self, "position-changed", (gint) (*event).x);
+#line 242 "Ruler.c"
+       result = FALSE;
+#line 69 "Ruler.vala"
+       return result;
+#line 246 "Ruler.c"
+}
+
+
+#line 72 "Ruler.vala"
+static gboolean view_ruler_real_motion_notify_event (GtkWidget* base, GdkEventMotion* event) {
+#line 252 "Ruler.c"
+       ViewRuler * self;
+       gboolean result = FALSE;
+       self = VIEW_RULER (base);
+#line 73 "Ruler.vala"
+       if (((*event).state & GDK_BUTTON1_MASK) != 0) {
+#line 74 "Ruler.vala"
+               gtk_widget_queue_draw (GTK_WIDGET (self));
+#line 75 "Ruler.vala"
+               g_signal_emit_by_name (self, "position-changed", (gint) (*event).x);
+#line 262 "Ruler.c"
+       }
+       result = FALSE;
+#line 77 "Ruler.vala"
+       return result;
+#line 267 "Ruler.c"
+}
+
+
+static void view_ruler_class_init (ViewRulerClass * klass) {
+       view_ruler_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (ViewRulerPrivate));
+       GTK_WIDGET_CLASS (klass)->expose_event = view_ruler_real_expose_event;
+       GTK_WIDGET_CLASS (klass)->button_press_event = view_ruler_real_button_press_event;
+       GTK_WIDGET_CLASS (klass)->motion_notify_event = view_ruler_real_motion_notify_event;
+       G_OBJECT_CLASS (klass)->finalize = view_ruler_finalize;
+       g_signal_new ("position_changed", VIEW_TYPE_RULER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT);
+}
+
+
+static void view_ruler_instance_init (ViewRuler * self) {
+       self->priv = VIEW_RULER_GET_PRIVATE (self);
+}
+
+
+static void view_ruler_finalize (GObject* obj) {
+       ViewRuler * self;
+       self = VIEW_RULER (obj);
+       G_OBJECT_CLASS (view_ruler_parent_class)->finalize (obj);
+}
+
+
+GType view_ruler_get_type (void) {
+       static volatile gsize view_ruler_type_id__volatile = 0;
+       if (g_once_init_enter (&view_ruler_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (ViewRulerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) view_ruler_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ViewRuler), 0, (GInstanceInitFunc) view_ruler_instance_init, NULL };
+               GType view_ruler_type_id;
+               view_ruler_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "ViewRuler", &g_define_type_info, 0);
+               g_once_init_leave (&view_ruler_type_id__volatile, view_ruler_type_id);
+       }
+       return view_ruler_type_id__volatile;
+}
+
+
+
+