X-Git-Url: http://git.maemo.org/git/?p=fillmore;a=blobdiff_plain;f=src%2Fmarina%2Fmarina%2Fui_clip.c;fp=src%2Fmarina%2Fmarina%2Fui_clip.c;h=02ec30d78e8a2fe97e7c99650a548b47c1074d36;hp=0000000000000000000000000000000000000000;hb=a712cd772f4f3db8bed7037bb95c4de94767b230;hpb=2f0296582bf5d3f51db40d299f434fc8240ca6a5 diff --git a/src/marina/marina/ui_clip.c b/src/marina/marina/ui_clip.c new file mode 100644 index 0000000..02ec30d --- /dev/null +++ b/src/marina/marina/ui_clip.c @@ -0,0 +1,1334 @@ +/* ui_clip.c generated by valac, the Vala compiler + * generated from ui_clip.vala, do not modify */ + +/* Copyright 2009-2010 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 +#include +#include +#include +#include +#include +#include +#include +#include + + +#define TYPE_GAP_VIEW (gap_view_get_type ()) +#define GAP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_GAP_VIEW, GapView)) +#define GAP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_GAP_VIEW, GapViewClass)) +#define IS_GAP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_GAP_VIEW)) +#define IS_GAP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_GAP_VIEW)) +#define GAP_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_GAP_VIEW, GapViewClass)) + +typedef struct _GapView GapView; +typedef struct _GapViewClass GapViewClass; +typedef struct _GapViewPrivate GapViewPrivate; + +#define MODEL_TYPE_GAP (model_gap_get_type ()) +#define MODEL_GAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_GAP, ModelGap)) +#define MODEL_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_GAP, ModelGapClass)) +#define MODEL_IS_GAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_GAP)) +#define MODEL_IS_GAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_GAP)) +#define MODEL_GAP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_GAP, ModelGapClass)) + +typedef struct _ModelGap ModelGap; +typedef struct _ModelGapClass ModelGapClass; +#define _model_gap_unref0(var) ((var == NULL) ? NULL : (var = (model_gap_unref (var), NULL))) + +#define TYPE_CLIP_VIEW (clip_view_get_type ()) +#define CLIP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_CLIP_VIEW, ClipView)) +#define CLIP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_CLIP_VIEW, ClipViewClass)) +#define IS_CLIP_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_CLIP_VIEW)) +#define IS_CLIP_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_CLIP_VIEW)) +#define CLIP_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_CLIP_VIEW, ClipViewClass)) + +typedef struct _ClipView ClipView; +typedef struct _ClipViewClass ClipViewClass; +typedef struct _ClipViewPrivate ClipViewPrivate; + +#define MODEL_TYPE_CLIP (model_clip_get_type ()) +#define MODEL_CLIP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP, ModelClip)) +#define MODEL_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP, ModelClipClass)) +#define MODEL_IS_CLIP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP)) +#define MODEL_IS_CLIP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP)) +#define MODEL_CLIP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP, ModelClipClass)) + +typedef struct _ModelClip ModelClip; +typedef struct _ModelClipClass ModelClipClass; + +#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 TYPE_TRANSPORT_DELEGATE (transport_delegate_get_type ()) +#define TRANSPORT_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TRANSPORT_DELEGATE, TransportDelegate)) +#define IS_TRANSPORT_DELEGATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TRANSPORT_DELEGATE)) +#define TRANSPORT_DELEGATE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), TYPE_TRANSPORT_DELEGATE, TransportDelegateIface)) + +typedef struct _TransportDelegate TransportDelegate; +typedef struct _TransportDelegateIface TransportDelegateIface; + +#define CLIP_VIEW_TYPE_MOTION_MODE (clip_view_motion_mode_get_type ()) +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) +typedef struct _ModelClipPrivate ModelClipPrivate; + +#define MODEL_TYPE_CLIP_FILE (model_clip_file_get_type ()) +#define MODEL_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFile)) +#define MODEL_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_CLIP_FILE, ModelClipFileClass)) +#define MODEL_IS_CLIP_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_CLIP_FILE)) +#define MODEL_IS_CLIP_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_CLIP_FILE)) +#define MODEL_CLIP_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_CLIP_FILE, ModelClipFileClass)) + +typedef struct _ModelClipFile ModelClipFile; +typedef struct _ModelClipFileClass ModelClipFileClass; + +#define MODEL_TYPE_MEDIA_TYPE (model_media_type_get_type ()) + +#define LOGGING_TYPE_FACILITY (logging_facility_get_type ()) + +#define LOGGING_TYPE_LEVEL (logging_level_get_type ()) +#define _g_free0(var) (var = (g_free (var), NULL)) + +struct _GapView { + GtkDrawingArea parent_instance; + GapViewPrivate * priv; + ModelGap* gap; +}; + +struct _GapViewClass { + GtkDrawingAreaClass parent_class; +}; + +struct _GapViewPrivate { + GdkColor fill_color; +}; + +struct _ClipView { + GtkDrawingArea parent_instance; + ClipViewPrivate * priv; + ModelClip* clip; + gint64 initial_time; + gboolean is_selected; + gint height; +}; + +struct _ClipViewClass { + 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 _TransportDelegateIface { + GTypeInterface parent_iface; + gboolean (*is_playing) (TransportDelegate* self); + gboolean (*is_recording) (TransportDelegate* self); + gboolean (*is_stopped) (TransportDelegate* self); +}; + +typedef enum { + CLIP_VIEW_MOTION_MODE_NONE, + CLIP_VIEW_MOTION_MODE_DRAGGING, + CLIP_VIEW_MOTION_MODE_LEFT_TRIM, + CLIP_VIEW_MOTION_MODE_RIGHT_TRIM +} ClipViewMotionMode; + +struct _ClipViewPrivate { + ModelTimeSystem* time_provider; + TransportDelegate* transport_delegate; + GdkColor color_black; + GdkColor color_normal; + GdkColor color_selected; + gint drag_point; + gint snap_amount; + gboolean snapped; + ClipViewMotionMode motion_mode; + gboolean button_down; + gboolean pending_selection; +}; + +typedef enum { + MODEL_MEDIA_TYPE_AUDIO, + MODEL_MEDIA_TYPE_VIDEO +} ModelMediaType; + +struct _ModelClip { + GObject parent_instance; + ModelClipPrivate * priv; + ModelClipFile* clipfile; + ModelMediaType type; + gboolean is_recording; + char* name; +}; + +struct _ModelClipClass { + GObjectClass parent_class; +}; + +typedef enum { + LOGGING_FACILITY_SIGNAL_HANDLERS, + LOGGING_FACILITY_DEVELOPER_WARNINGS, + LOGGING_FACILITY_GRAPH, + LOGGING_FACILITY_LOADING, + LOGGING_FACILITY_IMPORT, + LOGGING_FACILITY_SINGLEDECODEBIN +} LoggingFacility; + +typedef enum { + LOGGING_LEVEL_CRITICAL, + LOGGING_LEVEL_HIGH, + LOGGING_LEVEL_MEDIUM, + LOGGING_LEVEL_LOW, + LOGGING_LEVEL_INFO, + LOGGING_LEVEL_VERBOSE +} LoggingLevel; + + +static gpointer gap_view_parent_class = NULL; +extern GtkMenu* clip_view_context_menu; +GtkMenu* clip_view_context_menu = NULL; +static GdkCursor* clip_view_left_trim_cursor; +static GdkCursor* clip_view_left_trim_cursor = NULL; +static GdkCursor* clip_view_right_trim_cursor; +static GdkCursor* clip_view_right_trim_cursor = NULL; +static GdkCursor* clip_view_hand_cursor; +static GdkCursor* clip_view_hand_cursor = NULL; +static GdkCursor* clip_view_plus_cursor; +static GdkCursor* clip_view_plus_cursor = NULL; +static gpointer clip_view_parent_class = NULL; + +GType gap_view_get_type (void); +gpointer model_gap_ref (gpointer instance); +void model_gap_unref (gpointer instance); +GParamSpec* model_param_spec_gap (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); +void model_value_set_gap (GValue* value, gpointer v_object); +void model_value_take_gap (GValue* value, gpointer v_object); +gpointer model_value_get_gap (const GValue* value); +GType model_gap_get_type (void); +#define GAP_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_GAP_VIEW, GapViewPrivate)) +enum { + GAP_VIEW_DUMMY_PROPERTY +}; +ModelGap* model_gap_new (gint64 start, gint64 end); +ModelGap* model_gap_construct (GType object_type, gint64 start, gint64 end); +GapView* gap_view_new (gint64 start, gint64 length, gint width, gint height); +GapView* gap_view_construct (GType object_type, gint64 start, gint64 length, gint width, gint height); +void gap_view_remove (GapView* self); +void gap_view_unselect (GapView* self); +void draw_rounded_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x0, gint y0, gint width, gint height); +static gboolean gap_view_real_expose_event (GtkWidget* base, GdkEventExpose* e); +static void gap_view_finalize (GObject* obj); +GType clip_view_get_type (void); +GType model_clip_get_type (void); +GType model_time_system_get_type (void); +GType transport_delegate_get_type (void); +static GType clip_view_motion_mode_get_type (void) G_GNUC_UNUSED; +#define CLIP_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_CLIP_VIEW, ClipViewPrivate)) +enum { + CLIP_VIEW_DUMMY_PROPERTY +}; +#define CLIP_VIEW_MIN_DRAG 5 +#define CLIP_VIEW_TRIM_WIDTH 10 +#define CLIP_VIEW_SNAP_DELTA 10 +void clip_view_on_clip_moved (ClipView* self, ModelClip* clip); +static void _clip_view_on_clip_moved_model_clip_moved (ModelClip* _sender, ModelClip* clip, gpointer self); +static void clip_view_on_clip_updated (ClipView* self); +static void _clip_view_on_clip_updated_model_clip_updated (ModelClip* _sender, ModelClip* clip, gpointer self); +static void clip_view_get_clip_colors (ClipView* self); +void clip_view_adjust_size (ClipView* self, gint height); +ClipView* clip_view_new (TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height); +ClipView* clip_view_construct (GType object_type, TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height); +GType model_clip_file_get_type (void); +GType model_media_type_get_type (void); +gboolean model_clip_file_is_online (ModelClipFile* self); +GType logging_facility_get_type (void); +GType logging_level_get_type (void); +void logging_emit (GObject* object, LoggingFacility facility, LoggingLevel level, const char* message); +gint model_time_system_time_to_xpos (ModelTimeSystem* self, gint64 time); +gint64 model_clip_get_start (ModelClip* self); +gint64 model_clip_get_duration (ModelClip* self); +void clip_view_delete_clip (ClipView* self); +gint64 model_clip_get_media_start (ModelClip* self); +gint64 model_clip_file_get_length (ModelClipFile* self); +void draw_left_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_square_rectangle (GdkWindow* window, GdkColor* color, gboolean filled, gint x, gint y, gint width, gint height); +void clip_view_draw (ClipView* self); +static gboolean clip_view_real_expose_event (GtkWidget* base, GdkEventExpose* event); +gboolean transport_delegate_is_stopped (TransportDelegate* self); +static gboolean clip_view_is_left_trim (ClipView* self, double x, double y); +static gboolean clip_view_is_right_trim (ClipView* self, double x, double y); +static gboolean clip_view_real_button_press_event (GtkWidget* base, GdkEventButton* event); +gint64 model_time_system_xsize_to_time (ModelTimeSystem* self, gint x); +static gboolean clip_view_real_button_release_event (GtkWidget* base, GdkEventButton* event); +void model_clip_trim (ModelClip* self, gint64 delta, GdkWindowEdge edge); +static gboolean clip_view_real_motion_notify_event (GtkWidget* base, GdkEventMotion* event); +static gboolean clip_view_is_trim_height (ClipView* self, double y); +void clip_view_select (ClipView* self); +gint model_time_system_time_to_xsize (ModelTimeSystem* self, gint64 time); +void clip_view_snap (ClipView* self, gint64 amount); +static void clip_view_finalize (GObject* obj); + + +static void g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); +static void g_cclosure_user_marshal_VOID__OBJECT_INT64 (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); +static void g_cclosure_user_marshal_VOID__OBJECT_ENUM (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data); + +#line 13 "ui_clip.vala" +GapView* gap_view_construct (GType object_type, gint64 start, gint64 length, gint width, gint height) { +#line 305 "ui_clip.c" + GapView * self; + ModelGap* _tmp0_; + self = g_object_newv (object_type, 0, NULL); +#line 15 "ui_clip.vala" + self->gap = (_tmp0_ = model_gap_new (start, start + length), _model_gap_unref0 (self->gap), _tmp0_); +#line 17 "ui_clip.vala" + gdk_color_parse ("#777", &self->priv->fill_color); +#line 19 "ui_clip.vala" + GTK_WIDGET_SET_FLAGS (GTK_WIDGET (self), GTK_NO_WINDOW); +#line 21 "ui_clip.vala" + gtk_widget_set_size_request (GTK_WIDGET (self), width, height); +#line 317 "ui_clip.c" + return self; +} + + +#line 13 "ui_clip.vala" +GapView* gap_view_new (gint64 start, gint64 length, gint width, gint height) { +#line 13 "ui_clip.vala" + return gap_view_construct (TYPE_GAP_VIEW, start, length, width, height); +#line 326 "ui_clip.c" +} + + +#line 27 "ui_clip.vala" +void gap_view_remove (GapView* self) { +#line 27 "ui_clip.vala" + g_return_if_fail (IS_GAP_VIEW (self)); +#line 28 "ui_clip.vala" + g_signal_emit_by_name (self, "removed", self); +#line 336 "ui_clip.c" +} + + +#line 31 "ui_clip.vala" +void gap_view_unselect (GapView* self) { +#line 31 "ui_clip.vala" + g_return_if_fail (IS_GAP_VIEW (self)); +#line 32 "ui_clip.vala" + g_signal_emit_by_name (self, "unselected", self); +#line 346 "ui_clip.c" +} + + +#line 35 "ui_clip.vala" +static gboolean gap_view_real_expose_event (GtkWidget* base, GdkEventExpose* e) { +#line 352 "ui_clip.c" + GapView * self; + gboolean result = FALSE; + self = GAP_VIEW (base); +#line 36 "ui_clip.vala" + draw_rounded_rectangle (GTK_WIDGET (self)->window, &self->priv->fill_color, TRUE, GTK_WIDGET (self)->allocation.x, GTK_WIDGET (self)->allocation.y, GTK_WIDGET (self)->allocation.width - 1, GTK_WIDGET (self)->allocation.height - 1); +#line 358 "ui_clip.c" + result = TRUE; +#line 38 "ui_clip.vala" + return result; +#line 362 "ui_clip.c" +} + + +static void gap_view_class_init (GapViewClass * klass) { + gap_view_parent_class = g_type_class_peek_parent (klass); + g_type_class_add_private (klass, sizeof (GapViewPrivate)); + GTK_WIDGET_CLASS (klass)->expose_event = gap_view_real_expose_event; + G_OBJECT_CLASS (klass)->finalize = gap_view_finalize; + g_signal_new ("removed", TYPE_GAP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_GAP_VIEW); + g_signal_new ("unselected", TYPE_GAP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_GAP_VIEW); +} + + +static void gap_view_instance_init (GapView * self) { + self->priv = GAP_VIEW_GET_PRIVATE (self); +} + + +static void gap_view_finalize (GObject* obj) { + GapView * self; + self = GAP_VIEW (obj); + _model_gap_unref0 (self->gap); + G_OBJECT_CLASS (gap_view_parent_class)->finalize (obj); +} + + +GType gap_view_get_type (void) { + static volatile gsize gap_view_type_id__volatile = 0; + if (g_once_init_enter (&gap_view_type_id__volatile)) { + static const GTypeInfo g_define_type_info = { sizeof (GapViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gap_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GapView), 0, (GInstanceInitFunc) gap_view_instance_init, NULL }; + GType gap_view_type_id; + gap_view_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "GapView", &g_define_type_info, 0); + g_once_init_leave (&gap_view_type_id__volatile, gap_view_type_id); + } + return gap_view_type_id__volatile; +} + + +static GType clip_view_motion_mode_get_type (void) { + static volatile gsize clip_view_motion_mode_type_id__volatile = 0; + if (g_once_init_enter (&clip_view_motion_mode_type_id__volatile)) { + static const GEnumValue values[] = {{CLIP_VIEW_MOTION_MODE_NONE, "CLIP_VIEW_MOTION_MODE_NONE", "none"}, {CLIP_VIEW_MOTION_MODE_DRAGGING, "CLIP_VIEW_MOTION_MODE_DRAGGING", "dragging"}, {CLIP_VIEW_MOTION_MODE_LEFT_TRIM, "CLIP_VIEW_MOTION_MODE_LEFT_TRIM", "left-trim"}, {CLIP_VIEW_MOTION_MODE_RIGHT_TRIM, "CLIP_VIEW_MOTION_MODE_RIGHT_TRIM", "right-trim"}, {0, NULL, NULL}}; + GType clip_view_motion_mode_type_id; + clip_view_motion_mode_type_id = g_enum_register_static ("ClipViewMotionMode", values); + g_once_init_leave (&clip_view_motion_mode_type_id__volatile, clip_view_motion_mode_type_id); + } + return clip_view_motion_mode_type_id__volatile; +} + + +static gpointer _g_object_ref0 (gpointer self) { + return self ? g_object_ref (self) : NULL; +} + + +#line 132 "ui_clip.vala" +static void _clip_view_on_clip_moved_model_clip_moved (ModelClip* _sender, ModelClip* clip, gpointer self) { +#line 420 "ui_clip.c" + clip_view_on_clip_moved (self, clip); +} + + +#line 117 "ui_clip.vala" +static void _clip_view_on_clip_updated_model_clip_updated (ModelClip* _sender, ModelClip* clip, gpointer self) { +#line 427 "ui_clip.c" + clip_view_on_clip_updated (self); +} + + +#line 86 "ui_clip.vala" +ClipView* clip_view_construct (GType object_type, TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height) { +#line 434 "ui_clip.c" + ClipView * self; + TransportDelegate* _tmp0_; + ModelClip* _tmp1_; +#line 86 "ui_clip.vala" + g_return_val_if_fail (IS_TRANSPORT_DELEGATE (transport_delegate), NULL); +#line 86 "ui_clip.vala" + g_return_val_if_fail (MODEL_IS_CLIP (clip), NULL); +#line 86 "ui_clip.vala" + g_return_val_if_fail (MODEL_IS_TIME_SYSTEM (time_provider), NULL); +#line 444 "ui_clip.c" + self = g_object_newv (object_type, 0, NULL); +#line 88 "ui_clip.vala" + self->priv->transport_delegate = (_tmp0_ = _g_object_ref0 (transport_delegate), _g_object_unref0 (self->priv->transport_delegate), _tmp0_); +#line 89 "ui_clip.vala" + self->clip = (_tmp1_ = _g_object_ref0 (clip), _g_object_unref0 (self->clip), _tmp1_); +#line 90 "ui_clip.vala" + self->priv->time_provider = time_provider; +#line 91 "ui_clip.vala" + self->height = height; +#line 92 "ui_clip.vala" + self->is_selected = FALSE; +#line 94 "ui_clip.vala" + g_signal_connect_object (clip, "moved", (GCallback) _clip_view_on_clip_moved_model_clip_moved, self, 0); +#line 95 "ui_clip.vala" + g_signal_connect_object (clip, "updated", (GCallback) _clip_view_on_clip_updated_model_clip_updated, self, 0); +#line 97 "ui_clip.vala" + gdk_color_parse ("000", &self->priv->color_black); +#line 98 "ui_clip.vala" + clip_view_get_clip_colors (self); +#line 100 "ui_clip.vala" + GTK_WIDGET_SET_FLAGS (GTK_WIDGET (self), GTK_NO_WINDOW); +#line 102 "ui_clip.vala" + clip_view_adjust_size (self, height); +#line 468 "ui_clip.c" + return self; +} + + +#line 86 "ui_clip.vala" +ClipView* clip_view_new (TransportDelegate* transport_delegate, ModelClip* clip, ModelTimeSystem* time_provider, gint height) { +#line 86 "ui_clip.vala" + return clip_view_construct (TYPE_CLIP_VIEW, transport_delegate, clip, time_provider, height); +#line 477 "ui_clip.c" +} + + +#line 105 "ui_clip.vala" +static void clip_view_get_clip_colors (ClipView* self) { +#line 105 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 106 "ui_clip.vala" + if (model_clip_file_is_online (self->clip->clipfile)) { +#line 487 "ui_clip.c" + const char* _tmp0_; + const char* _tmp1_; + _tmp0_ = NULL; +#line 107 "ui_clip.vala" + if (self->clip->type == MODEL_MEDIA_TYPE_VIDEO) { +#line 107 "ui_clip.vala" + _tmp0_ = "#d82"; +#line 495 "ui_clip.c" + } else { +#line 107 "ui_clip.vala" + _tmp0_ = "#84a"; +#line 499 "ui_clip.c" + } +#line 107 "ui_clip.vala" + gdk_color_parse (_tmp0_, &self->priv->color_selected); +#line 503 "ui_clip.c" + _tmp1_ = NULL; +#line 109 "ui_clip.vala" + if (self->clip->type == MODEL_MEDIA_TYPE_VIDEO) { +#line 109 "ui_clip.vala" + _tmp1_ = "#da5"; +#line 509 "ui_clip.c" + } else { +#line 109 "ui_clip.vala" + _tmp1_ = "#b9d"; +#line 513 "ui_clip.c" + } +#line 109 "ui_clip.vala" + gdk_color_parse (_tmp1_, &self->priv->color_normal); +#line 517 "ui_clip.c" + } else { +#line 112 "ui_clip.vala" + gdk_color_parse ("red", &self->priv->color_selected); +#line 113 "ui_clip.vala" + gdk_color_parse ("#AA0000", &self->priv->color_normal); +#line 523 "ui_clip.c" + } +} + + +#line 117 "ui_clip.vala" +static void clip_view_on_clip_updated (ClipView* self) { +#line 117 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 118 "ui_clip.vala" + logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_updated"); +#line 119 "ui_clip.vala" + clip_view_get_clip_colors (self); +#line 120 "ui_clip.vala" + gtk_widget_queue_draw (GTK_WIDGET (self)); +#line 538 "ui_clip.c" +} + + +#line 126 "ui_clip.vala" +void clip_view_adjust_size (ClipView* self, gint height) { +#line 544 "ui_clip.c" + gint width; +#line 126 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 127 "ui_clip.vala" + width = model_time_system_time_to_xpos (self->priv->time_provider, model_clip_get_start (self->clip) + model_clip_get_duration (self->clip)) - model_time_system_time_to_xpos (self->priv->time_provider, model_clip_get_start (self->clip)); +#line 129 "ui_clip.vala" + gtk_widget_set_size_request (GTK_WIDGET (self), width + 1, height); +#line 552 "ui_clip.c" +} + + +#line 132 "ui_clip.vala" +void clip_view_on_clip_moved (ClipView* self, ModelClip* clip) { +#line 132 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 132 "ui_clip.vala" + g_return_if_fail (MODEL_IS_CLIP (clip)); +#line 133 "ui_clip.vala" + logging_emit (G_OBJECT (self), LOGGING_FACILITY_SIGNAL_HANDLERS, LOGGING_LEVEL_INFO, "on_clip_moved"); +#line 134 "ui_clip.vala" + clip_view_adjust_size (self, self->height); +#line 135 "ui_clip.vala" + g_signal_emit_by_name (self, "clip-moved", self); +#line 568 "ui_clip.c" +} + + +#line 138 "ui_clip.vala" +void clip_view_delete_clip (ClipView* self) { +#line 138 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 139 "ui_clip.vala" + g_signal_emit_by_name (self, "clip-deleted", self->clip); +#line 578 "ui_clip.c" +} + + +#line 142 "ui_clip.vala" +void clip_view_draw (ClipView* self) { +#line 584 "ui_clip.c" + GdkColor _tmp0_ = {0}; + GdkColor fill; + gboolean _tmp1_ = FALSE; + gboolean left_trimmed; + gboolean _tmp2_ = FALSE; + gboolean right_trimmed; + gboolean _tmp3_ = FALSE; + GdkGC* gc; + GdkRectangle _tmp6_ = {0}; + GdkRectangle r; + PangoLayout* layout; + gint width = 0; + gint height = 0; +#line 142 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 143 "ui_clip.vala" + if (self->is_selected) { +#line 143 "ui_clip.vala" + _tmp0_ = self->priv->color_selected; +#line 604 "ui_clip.c" + } else { +#line 143 "ui_clip.vala" + _tmp0_ = self->priv->color_normal; +#line 608 "ui_clip.c" + } +#line 143 "ui_clip.vala" + fill = _tmp0_; +#line 145 "ui_clip.vala" + if (model_clip_get_media_start (self->clip) != 0) { +#line 145 "ui_clip.vala" + _tmp1_ = !self->clip->is_recording; +#line 616 "ui_clip.c" + } else { +#line 145 "ui_clip.vala" + _tmp1_ = FALSE; +#line 620 "ui_clip.c" + } +#line 145 "ui_clip.vala" + left_trimmed = _tmp1_; +#line 147 "ui_clip.vala" + if (model_clip_file_is_online (self->clip->clipfile)) { +#line 148 "ui_clip.vala" + _tmp2_ = (model_clip_get_media_start (self->clip) + model_clip_get_duration (self->clip)) != model_clip_file_get_length (self->clip->clipfile); +#line 628 "ui_clip.c" + } else { +#line 148 "ui_clip.vala" + _tmp2_ = FALSE; +#line 632 "ui_clip.c" + } +#line 147 "ui_clip.vala" + right_trimmed = _tmp2_; +#line 150 "ui_clip.vala" + if (!left_trimmed) { +#line 150 "ui_clip.vala" + _tmp3_ = !right_trimmed; +#line 640 "ui_clip.c" + } else { +#line 150 "ui_clip.vala" + _tmp3_ = FALSE; +#line 644 "ui_clip.c" + } +#line 150 "ui_clip.vala" + if (_tmp3_) { +#line 151 "ui_clip.vala" + draw_rounded_rectangle (GTK_WIDGET (self)->window, &fill, TRUE, GTK_WIDGET (self)->allocation.x + 1, GTK_WIDGET (self)->allocation.y + 1, GTK_WIDGET (self)->allocation.width - 2, GTK_WIDGET (self)->allocation.height - 2); +#line 153 "ui_clip.vala" + draw_rounded_rectangle (GTK_WIDGET (self)->window, &self->priv->color_black, FALSE, GTK_WIDGET (self)->allocation.x, GTK_WIDGET (self)->allocation.y, GTK_WIDGET (self)->allocation.width - 1, GTK_WIDGET (self)->allocation.height - 1); +#line 652 "ui_clip.c" + } else { + gboolean _tmp4_ = FALSE; +#line 156 "ui_clip.vala" + if (!left_trimmed) { +#line 156 "ui_clip.vala" + _tmp4_ = right_trimmed; +#line 659 "ui_clip.c" + } else { +#line 156 "ui_clip.vala" + _tmp4_ = FALSE; +#line 663 "ui_clip.c" + } +#line 156 "ui_clip.vala" + if (_tmp4_) { +#line 157 "ui_clip.vala" + draw_left_rounded_rectangle (GTK_WIDGET (self)->window, &fill, TRUE, GTK_WIDGET (self)->allocation.x + 1, GTK_WIDGET (self)->allocation.y + 1, GTK_WIDGET (self)->allocation.width - 2, GTK_WIDGET (self)->allocation.height - 2); +#line 159 "ui_clip.vala" + draw_left_rounded_rectangle (GTK_WIDGET (self)->window, &self->priv->color_black, FALSE, GTK_WIDGET (self)->allocation.x, GTK_WIDGET (self)->allocation.y, GTK_WIDGET (self)->allocation.width - 1, GTK_WIDGET (self)->allocation.height - 1); +#line 671 "ui_clip.c" + } else { + gboolean _tmp5_ = FALSE; +#line 162 "ui_clip.vala" + if (left_trimmed) { +#line 162 "ui_clip.vala" + _tmp5_ = !right_trimmed; +#line 678 "ui_clip.c" + } else { +#line 162 "ui_clip.vala" + _tmp5_ = FALSE; +#line 682 "ui_clip.c" + } +#line 162 "ui_clip.vala" + if (_tmp5_) { +#line 163 "ui_clip.vala" + draw_right_rounded_rectangle (GTK_WIDGET (self)->window, &fill, TRUE, GTK_WIDGET (self)->allocation.x + 1, GTK_WIDGET (self)->allocation.y + 1, GTK_WIDGET (self)->allocation.width - 2, GTK_WIDGET (self)->allocation.height - 2); +#line 165 "ui_clip.vala" + draw_right_rounded_rectangle (GTK_WIDGET (self)->window, &self->priv->color_black, FALSE, GTK_WIDGET (self)->allocation.x, GTK_WIDGET (self)->allocation.y, GTK_WIDGET (self)->allocation.width - 1, GTK_WIDGET (self)->allocation.height - 1); +#line 690 "ui_clip.c" + } else { +#line 169 "ui_clip.vala" + draw_square_rectangle (GTK_WIDGET (self)->window, &fill, TRUE, GTK_WIDGET (self)->allocation.x + 1, GTK_WIDGET (self)->allocation.y + 1, GTK_WIDGET (self)->allocation.width - 2, GTK_WIDGET (self)->allocation.height - 2); +#line 171 "ui_clip.vala" + draw_square_rectangle (GTK_WIDGET (self)->window, &self->priv->color_black, FALSE, GTK_WIDGET (self)->allocation.x, GTK_WIDGET (self)->allocation.y, GTK_WIDGET (self)->allocation.width - 1, GTK_WIDGET (self)->allocation.height - 1); +#line 696 "ui_clip.c" + } + } + } +#line 175 "ui_clip.vala" + gc = gdk_gc_new (GDK_DRAWABLE (GTK_WIDGET (self)->window)); +#line 176 "ui_clip.vala" + r = (_tmp6_.x = 0, _tmp6_.y = 0, _tmp6_.width = 0, _tmp6_.height = 0, _tmp6_); +#line 179 "ui_clip.vala" + r.x = GTK_WIDGET (self)->allocation.x; +#line 180 "ui_clip.vala" + r.y = GTK_WIDGET (self)->allocation.y; +#line 181 "ui_clip.vala" + r.width = GTK_WIDGET (self)->allocation.width; +#line 182 "ui_clip.vala" + r.height = GTK_WIDGET (self)->allocation.height; +#line 184 "ui_clip.vala" + gdk_gc_set_clip_rectangle (gc, &r); +#line 714 "ui_clip.c" + layout = NULL; +#line 187 "ui_clip.vala" + if (self->clip->is_recording) { +#line 718 "ui_clip.c" + PangoLayout* _tmp7_; +#line 188 "ui_clip.vala" + layout = (_tmp7_ = gtk_widget_create_pango_layout (GTK_WIDGET (self), "Recording"), _g_object_unref0 (layout), _tmp7_); +#line 722 "ui_clip.c" + } else { +#line 189 "ui_clip.vala" + if (!model_clip_file_is_online (self->clip->clipfile)) { +#line 726 "ui_clip.c" + PangoLayout* _tmp9_; + char* _tmp8_; +#line 190 "ui_clip.vala" + layout = (_tmp9_ = gtk_widget_create_pango_layout (GTK_WIDGET (self), _tmp8_ = g_strdup_printf ("%s (Offline)", self->clip->name)), _g_object_unref0 (layout), _tmp9_); +#line 731 "ui_clip.c" + _g_free0 (_tmp8_); + } else { + PangoLayout* _tmp11_; + char* _tmp10_; +#line 193 "ui_clip.vala" + layout = (_tmp11_ = gtk_widget_create_pango_layout (GTK_WIDGET (self), _tmp10_ = g_strdup_printf ("%s", self->clip->name)), _g_object_unref0 (layout), _tmp11_); +#line 738 "ui_clip.c" + _g_free0 (_tmp10_); + } + } +#line 196 "ui_clip.vala" + pango_layout_get_pixel_size (layout, &width, &height); +#line 197 "ui_clip.vala" + gdk_draw_layout (GDK_DRAWABLE (GTK_WIDGET (self)->window), gc, GTK_WIDGET (self)->allocation.x + 10, GTK_WIDGET (self)->allocation.y + height, layout); +#line 746 "ui_clip.c" + _g_object_unref0 (gc); + _g_object_unref0 (layout); +} + + +#line 200 "ui_clip.vala" +static gboolean clip_view_real_expose_event (GtkWidget* base, GdkEventExpose* event) { +#line 754 "ui_clip.c" + ClipView * self; + gboolean result = FALSE; + self = CLIP_VIEW (base); +#line 201 "ui_clip.vala" + clip_view_draw (self); +#line 760 "ui_clip.c" + result = TRUE; +#line 202 "ui_clip.vala" + return result; +#line 764 "ui_clip.c" +} + + +#line 205 "ui_clip.vala" +static gboolean clip_view_real_button_press_event (GtkWidget* base, GdkEventButton* event) { +#line 770 "ui_clip.c" + ClipView * self; + gboolean result = FALSE; + gboolean primary_press; + gboolean extend_selection; + self = CLIP_VIEW (base); +#line 206 "ui_clip.vala" + if (!transport_delegate_is_stopped (self->priv->transport_delegate)) { +#line 778 "ui_clip.c" + result = TRUE; +#line 207 "ui_clip.vala" + return result; +#line 782 "ui_clip.c" + } +#line 210 "ui_clip.vala" + (*event).x = (*event).x - ((double) GTK_WIDGET (self)->allocation.x); +#line 211 "ui_clip.vala" + primary_press = (*event).button == 1; +#line 212 "ui_clip.vala" + if (primary_press) { +#line 213 "ui_clip.vala" + self->priv->button_down = TRUE; +#line 214 "ui_clip.vala" + self->priv->drag_point = (gint) (*event).x; +#line 215 "ui_clip.vala" + self->priv->snap_amount = 0; +#line 216 "ui_clip.vala" + self->priv->snapped = FALSE; +#line 798 "ui_clip.c" + } +#line 219 "ui_clip.vala" + extend_selection = ((*event).state & GDK_CONTROL_MASK) != 0; +#line 223 "ui_clip.vala" + if (clip_view_is_left_trim (self, (*event).x, (*event).y)) { +#line 224 "ui_clip.vala" + g_signal_emit_by_name (self, "selection-request", self, FALSE); +#line 225 "ui_clip.vala" + if (primary_press) { +#line 226 "ui_clip.vala" + g_signal_emit_by_name (self, "trim-begin", self, GDK_WINDOW_EDGE_WEST); +#line 227 "ui_clip.vala" + self->priv->motion_mode = CLIP_VIEW_MOTION_MODE_LEFT_TRIM; +#line 812 "ui_clip.c" + } + } else { +#line 229 "ui_clip.vala" + if (clip_view_is_right_trim (self, (*event).x, (*event).y)) { +#line 230 "ui_clip.vala" + g_signal_emit_by_name (self, "selection-request", self, FALSE); +#line 231 "ui_clip.vala" + if (primary_press) { +#line 232 "ui_clip.vala" + g_signal_emit_by_name (self, "trim-begin", self, GDK_WINDOW_EDGE_EAST); +#line 233 "ui_clip.vala" + self->priv->motion_mode = CLIP_VIEW_MOTION_MODE_RIGHT_TRIM; +#line 825 "ui_clip.c" + } + } else { +#line 236 "ui_clip.vala" + if (!self->is_selected) { +#line 237 "ui_clip.vala" + self->priv->pending_selection = FALSE; +#line 238 "ui_clip.vala" + g_signal_emit_by_name (self, "selection-request", self, extend_selection); +#line 834 "ui_clip.c" + } else { +#line 240 "ui_clip.vala" + self->priv->pending_selection = TRUE; +#line 838 "ui_clip.c" + } + } + } +#line 244 "ui_clip.vala" + if ((*event).button == 3) { +#line 245 "ui_clip.vala" + gtk_menu_shell_select_first (GTK_MENU_SHELL (clip_view_context_menu), TRUE); +#line 246 "ui_clip.vala" + gtk_menu_popup (clip_view_context_menu, NULL, NULL, NULL, NULL, (*event).button, (*event).time); +#line 848 "ui_clip.c" + } else { +#line 248 "ui_clip.vala" + gtk_menu_popdown (clip_view_context_menu); +#line 852 "ui_clip.c" + } + result = TRUE; +#line 251 "ui_clip.vala" + return result; +#line 857 "ui_clip.c" +} + + +#line 254 "ui_clip.vala" +static gboolean clip_view_real_button_release_event (GtkWidget* base, GdkEventButton* event) { +#line 863 "ui_clip.c" + ClipView * self; + gboolean result = FALSE; + self = CLIP_VIEW (base); +#line 255 "ui_clip.vala" + if (!transport_delegate_is_stopped (self->priv->transport_delegate)) { +#line 869 "ui_clip.c" + result = TRUE; +#line 256 "ui_clip.vala" + return result; +#line 873 "ui_clip.c" + } +#line 259 "ui_clip.vala" + (*event).x = (*event).x - ((double) GTK_WIDGET (self)->allocation.x); +#line 260 "ui_clip.vala" + self->priv->button_down = FALSE; +#line 261 "ui_clip.vala" + if ((*event).button == 1) { +#line 262 "ui_clip.vala" + switch (self->priv->motion_mode) { +#line 883 "ui_clip.c" + case CLIP_VIEW_MOTION_MODE_NONE: + { + { +#line 264 "ui_clip.vala" + if (self->priv->pending_selection) { +#line 265 "ui_clip.vala" + g_signal_emit_by_name (self, "selection-request", self, TRUE); +#line 891 "ui_clip.c" + } + } +#line 268 "ui_clip.vala" + break; +#line 896 "ui_clip.c" + } + case CLIP_VIEW_MOTION_MODE_DRAGGING: + { + { + gint64 delta; +#line 270 "ui_clip.vala" + delta = model_time_system_xsize_to_time (self->priv->time_provider, ((gint) (*event).x) - self->priv->drag_point); +#line 271 "ui_clip.vala" + if (self->priv->motion_mode == CLIP_VIEW_MOTION_MODE_DRAGGING) { +#line 272 "ui_clip.vala" + g_signal_emit_by_name (self, "move-commit", self, delta); +#line 908 "ui_clip.c" + } + } +#line 275 "ui_clip.vala" + break; +#line 913 "ui_clip.c" + } + case CLIP_VIEW_MOTION_MODE_LEFT_TRIM: + { +#line 277 "ui_clip.vala" + g_signal_emit_by_name (self, "trim-commit", self, GDK_WINDOW_EDGE_WEST); +#line 278 "ui_clip.vala" + break; +#line 921 "ui_clip.c" + } + case CLIP_VIEW_MOTION_MODE_RIGHT_TRIM: + { +#line 280 "ui_clip.vala" + g_signal_emit_by_name (self, "trim-commit", self, GDK_WINDOW_EDGE_EAST); +#line 281 "ui_clip.vala" + break; +#line 929 "ui_clip.c" + } + } + } +#line 284 "ui_clip.vala" + self->priv->motion_mode = CLIP_VIEW_MOTION_MODE_NONE; +#line 935 "ui_clip.c" + result = TRUE; +#line 285 "ui_clip.vala" + return result; +#line 939 "ui_clip.c" +} + + +#line 288 "ui_clip.vala" +static gboolean clip_view_real_motion_notify_event (GtkWidget* base, GdkEventMotion* event) { +#line 945 "ui_clip.c" + ClipView * self; + gboolean result = FALSE; + gint delta_pixels; + gint64 delta_time; + self = CLIP_VIEW (base); +#line 289 "ui_clip.vala" + if (!transport_delegate_is_stopped (self->priv->transport_delegate)) { +#line 953 "ui_clip.c" + result = TRUE; +#line 290 "ui_clip.vala" + return result; +#line 957 "ui_clip.c" + } +#line 293 "ui_clip.vala" + (*event).x = (*event).x - ((double) GTK_WIDGET (self)->allocation.x); +#line 294 "ui_clip.vala" + delta_pixels = ((gint) ((*event).x - self->priv->drag_point)) - self->priv->snap_amount; +#line 295 "ui_clip.vala" + if (self->priv->snapped) { +#line 296 "ui_clip.vala" + self->priv->snap_amount = self->priv->snap_amount + delta_pixels; +#line 297 "ui_clip.vala" + if (abs (self->priv->snap_amount) < CLIP_VIEW_SNAP_DELTA) { +#line 969 "ui_clip.c" + result = TRUE; +#line 298 "ui_clip.vala" + return result; +#line 973 "ui_clip.c" + } +#line 300 "ui_clip.vala" + delta_pixels = delta_pixels + self->priv->snap_amount; +#line 301 "ui_clip.vala" + self->priv->snap_amount = 0; +#line 302 "ui_clip.vala" + self->priv->snapped = FALSE; +#line 981 "ui_clip.c" + } +#line 305 "ui_clip.vala" + delta_time = model_time_system_xsize_to_time (self->priv->time_provider, delta_pixels); +#line 307 "ui_clip.vala" + switch (self->priv->motion_mode) { +#line 987 "ui_clip.c" + case CLIP_VIEW_MOTION_MODE_NONE: + { + gboolean _tmp0_ = FALSE; +#line 309 "ui_clip.vala" + if (!self->priv->button_down) { +#line 309 "ui_clip.vala" + _tmp0_ = clip_view_is_left_trim (self, (*event).x, (*event).y); +#line 995 "ui_clip.c" + } else { +#line 309 "ui_clip.vala" + _tmp0_ = FALSE; +#line 999 "ui_clip.c" + } +#line 309 "ui_clip.vala" + if (_tmp0_) { +#line 310 "ui_clip.vala" + gdk_window_set_cursor (GTK_WIDGET (self)->window, clip_view_left_trim_cursor); +#line 1005 "ui_clip.c" + } else { + gboolean _tmp1_ = FALSE; +#line 311 "ui_clip.vala" + if (!self->priv->button_down) { +#line 311 "ui_clip.vala" + _tmp1_ = clip_view_is_right_trim (self, (*event).x, (*event).y); +#line 1012 "ui_clip.c" + } else { +#line 311 "ui_clip.vala" + _tmp1_ = FALSE; +#line 1016 "ui_clip.c" + } +#line 311 "ui_clip.vala" + if (_tmp1_) { +#line 312 "ui_clip.vala" + gdk_window_set_cursor (GTK_WIDGET (self)->window, clip_view_right_trim_cursor); +#line 1022 "ui_clip.c" + } else { + gboolean _tmp2_ = FALSE; +#line 313 "ui_clip.vala" + if (self->is_selected) { +#line 313 "ui_clip.vala" + _tmp2_ = self->priv->button_down; +#line 1029 "ui_clip.c" + } else { +#line 313 "ui_clip.vala" + _tmp2_ = FALSE; +#line 1033 "ui_clip.c" + } +#line 313 "ui_clip.vala" + if (_tmp2_) { +#line 314 "ui_clip.vala" + if (abs (delta_pixels) > CLIP_VIEW_MIN_DRAG) { +#line 1039 "ui_clip.c" + gboolean do_copy; +#line 315 "ui_clip.vala" + do_copy = ((*event).state & GDK_CONTROL_MASK) != 0; +#line 316 "ui_clip.vala" + if (do_copy) { +#line 317 "ui_clip.vala" + gdk_window_set_cursor (GTK_WIDGET (self)->window, clip_view_plus_cursor); +#line 1047 "ui_clip.c" + } else { +#line 319 "ui_clip.vala" + gdk_window_set_cursor (GTK_WIDGET (self)->window, clip_view_hand_cursor); +#line 1051 "ui_clip.c" + } +#line 321 "ui_clip.vala" + self->priv->motion_mode = CLIP_VIEW_MOTION_MODE_DRAGGING; +#line 322 "ui_clip.vala" + g_signal_emit_by_name (self, "move-begin", self, do_copy); +#line 1057 "ui_clip.c" + } + } else { +#line 325 "ui_clip.vala" + gdk_window_set_cursor (GTK_WIDGET (self)->window, NULL); +#line 1062 "ui_clip.c" + } + } + } +#line 327 "ui_clip.vala" + break; +#line 1068 "ui_clip.c" + } + case CLIP_VIEW_MOTION_MODE_RIGHT_TRIM: + case CLIP_VIEW_MOTION_MODE_LEFT_TRIM: + { +#line 330 "ui_clip.vala" + if (self->priv->button_down) { +#line 331 "ui_clip.vala" + if (self->priv->motion_mode == CLIP_VIEW_MOTION_MODE_LEFT_TRIM) { +#line 332 "ui_clip.vala" + model_clip_trim (self->clip, delta_time, GDK_WINDOW_EDGE_WEST); +#line 1079 "ui_clip.c" + } else { + gint64 duration; +#line 334 "ui_clip.vala" + duration = model_clip_get_duration (self->clip); +#line 335 "ui_clip.vala" + model_clip_trim (self->clip, delta_time, GDK_WINDOW_EDGE_EAST); +#line 336 "ui_clip.vala" + if (duration != model_clip_get_duration (self->clip)) { +#line 337 "ui_clip.vala" + self->priv->drag_point = self->priv->drag_point + ((gint) delta_pixels); +#line 1090 "ui_clip.c" + } + } + } + result = TRUE; +#line 341 "ui_clip.vala" + return result; +#line 1097 "ui_clip.c" + } + case CLIP_VIEW_MOTION_MODE_DRAGGING: + { +#line 343 "ui_clip.vala" + g_signal_emit_by_name (self, "move-request", self, delta_time); +#line 1103 "ui_clip.c" + result = TRUE; +#line 344 "ui_clip.vala" + return result; +#line 1107 "ui_clip.c" + } + } + result = FALSE; +#line 346 "ui_clip.vala" + return result; +#line 1113 "ui_clip.c" +} + + +#line 349 "ui_clip.vala" +static gboolean clip_view_is_trim_height (ClipView* self, double y) { +#line 1119 "ui_clip.c" + gboolean result = FALSE; +#line 349 "ui_clip.vala" + g_return_val_if_fail (IS_CLIP_VIEW (self), FALSE); +#line 1123 "ui_clip.c" + result = (y - GTK_WIDGET (self)->allocation.y) > (GTK_WIDGET (self)->allocation.height / 2); +#line 350 "ui_clip.vala" + return result; +#line 1127 "ui_clip.c" +} + + +#line 353 "ui_clip.vala" +static gboolean clip_view_is_left_trim (ClipView* self, double x, double y) { +#line 1133 "ui_clip.c" + gboolean result = FALSE; + gboolean _tmp0_ = FALSE; + gboolean _tmp1_ = FALSE; +#line 353 "ui_clip.vala" + g_return_val_if_fail (IS_CLIP_VIEW (self), FALSE); +#line 354 "ui_clip.vala" + if (clip_view_is_trim_height (self, y)) { +#line 354 "ui_clip.vala" + _tmp1_ = x > 0; +#line 1143 "ui_clip.c" + } else { +#line 354 "ui_clip.vala" + _tmp1_ = FALSE; +#line 1147 "ui_clip.c" + } +#line 354 "ui_clip.vala" + if (_tmp1_) { +#line 354 "ui_clip.vala" + _tmp0_ = x < CLIP_VIEW_TRIM_WIDTH; +#line 1153 "ui_clip.c" + } else { +#line 354 "ui_clip.vala" + _tmp0_ = FALSE; +#line 1157 "ui_clip.c" + } + result = _tmp0_; +#line 354 "ui_clip.vala" + return result; +#line 1162 "ui_clip.c" +} + + +#line 357 "ui_clip.vala" +static gboolean clip_view_is_right_trim (ClipView* self, double x, double y) { +#line 1168 "ui_clip.c" + gboolean result = FALSE; + gboolean _tmp0_ = FALSE; + gboolean _tmp1_ = FALSE; +#line 357 "ui_clip.vala" + g_return_val_if_fail (IS_CLIP_VIEW (self), FALSE); +#line 358 "ui_clip.vala" + if (clip_view_is_trim_height (self, y)) { +#line 358 "ui_clip.vala" + _tmp1_ = x > (GTK_WIDGET (self)->allocation.width - CLIP_VIEW_TRIM_WIDTH); +#line 1178 "ui_clip.c" + } else { +#line 358 "ui_clip.vala" + _tmp1_ = FALSE; +#line 1182 "ui_clip.c" + } +#line 358 "ui_clip.vala" + if (_tmp1_) { +#line 359 "ui_clip.vala" + _tmp0_ = x < GTK_WIDGET (self)->allocation.width; +#line 1188 "ui_clip.c" + } else { +#line 358 "ui_clip.vala" + _tmp0_ = FALSE; +#line 1192 "ui_clip.c" + } + result = _tmp0_; +#line 358 "ui_clip.vala" + return result; +#line 1197 "ui_clip.c" +} + + +#line 362 "ui_clip.vala" +void clip_view_select (ClipView* self) { +#line 362 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 363 "ui_clip.vala" + if (!self->is_selected) { +#line 364 "ui_clip.vala" + g_signal_emit_by_name (self, "selection-request", self, TRUE); +#line 1209 "ui_clip.c" + } +} + + +#line 368 "ui_clip.vala" +void clip_view_snap (ClipView* self, gint64 amount) { +#line 368 "ui_clip.vala" + g_return_if_fail (IS_CLIP_VIEW (self)); +#line 369 "ui_clip.vala" + self->priv->snap_amount = model_time_system_time_to_xsize (self->priv->time_provider, amount); +#line 370 "ui_clip.vala" + self->priv->snapped = TRUE; +#line 1222 "ui_clip.c" +} + + +static void clip_view_class_init (ClipViewClass * klass) { + clip_view_parent_class = g_type_class_peek_parent (klass); + g_type_class_add_private (klass, sizeof (ClipViewPrivate)); + GTK_WIDGET_CLASS (klass)->expose_event = clip_view_real_expose_event; + GTK_WIDGET_CLASS (klass)->button_press_event = clip_view_real_button_press_event; + GTK_WIDGET_CLASS (klass)->button_release_event = clip_view_real_button_release_event; + GTK_WIDGET_CLASS (klass)->motion_notify_event = clip_view_real_motion_notify_event; + G_OBJECT_CLASS (klass)->finalize = clip_view_finalize; + g_signal_new ("clip_deleted", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, MODEL_TYPE_CLIP); + g_signal_new ("clip_moved", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, TYPE_CLIP_VIEW); + g_signal_new ("selection_request", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, TYPE_CLIP_VIEW, G_TYPE_BOOLEAN); + g_signal_new ("move_request", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_INT64, G_TYPE_NONE, 2, TYPE_CLIP_VIEW, G_TYPE_INT64); + g_signal_new ("move_commit", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_INT64, G_TYPE_NONE, 2, TYPE_CLIP_VIEW, G_TYPE_INT64); + g_signal_new ("move_begin", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN, G_TYPE_NONE, 2, TYPE_CLIP_VIEW, G_TYPE_BOOLEAN); + g_signal_new ("trim_begin", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_ENUM, G_TYPE_NONE, 2, TYPE_CLIP_VIEW, GDK_TYPE_WINDOW_EDGE); + g_signal_new ("trim_commit", TYPE_CLIP_VIEW, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_ENUM, G_TYPE_NONE, 2, TYPE_CLIP_VIEW, GDK_TYPE_WINDOW_EDGE); + clip_view_left_trim_cursor = gdk_cursor_new (GDK_LEFT_SIDE); + clip_view_right_trim_cursor = gdk_cursor_new (GDK_RIGHT_SIDE); + clip_view_hand_cursor = gdk_cursor_new_from_name (gdk_display_get_default (), "dnd-none"); + clip_view_plus_cursor = gdk_cursor_new_from_name (gdk_display_get_default (), "dnd-copy"); +} + + +static void clip_view_instance_init (ClipView * self) { + self->priv = CLIP_VIEW_GET_PRIVATE (self); + self->priv->motion_mode = CLIP_VIEW_MOTION_MODE_NONE; + self->priv->button_down = FALSE; +} + + +static void clip_view_finalize (GObject* obj) { + ClipView * self; + self = CLIP_VIEW (obj); + _g_object_unref0 (self->clip); + _g_object_unref0 (self->priv->transport_delegate); + G_OBJECT_CLASS (clip_view_parent_class)->finalize (obj); +} + + +GType clip_view_get_type (void) { + static volatile gsize clip_view_type_id__volatile = 0; + if (g_once_init_enter (&clip_view_type_id__volatile)) { + static const GTypeInfo g_define_type_info = { sizeof (ClipViewClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) clip_view_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ClipView), 0, (GInstanceInitFunc) clip_view_instance_init, NULL }; + GType clip_view_type_id; + clip_view_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "ClipView", &g_define_type_info, 0); + g_once_init_leave (&clip_view_type_id__volatile, clip_view_type_id); + } + return clip_view_type_id__volatile; +} + + + +static void g_cclosure_user_marshal_VOID__OBJECT_BOOLEAN (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__OBJECT_BOOLEAN) (gpointer data1, gpointer arg_1, gboolean arg_2, gpointer data2); + register GMarshalFunc_VOID__OBJECT_BOOLEAN callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__OBJECT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_object (param_values + 1), g_value_get_boolean (param_values + 2), data2); +} + + +static void g_cclosure_user_marshal_VOID__OBJECT_INT64 (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__OBJECT_INT64) (gpointer data1, gpointer arg_1, gint64 arg_2, gpointer data2); + register GMarshalFunc_VOID__OBJECT_INT64 callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__OBJECT_INT64) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_object (param_values + 1), g_value_get_int64 (param_values + 2), data2); +} + + +static void g_cclosure_user_marshal_VOID__OBJECT_ENUM (GClosure * closure, GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) { + typedef void (*GMarshalFunc_VOID__OBJECT_ENUM) (gpointer data1, gpointer arg_1, gint arg_2, gpointer data2); + register GMarshalFunc_VOID__OBJECT_ENUM callback; + register GCClosure * cc; + register gpointer data1, data2; + cc = (GCClosure *) closure; + g_return_if_fail (n_param_values == 3); + if (G_CCLOSURE_SWAP_DATA (closure)) { + data1 = closure->data; + data2 = param_values->data[0].v_pointer; + } else { + data1 = param_values->data[0].v_pointer; + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__OBJECT_ENUM) (marshal_data ? marshal_data : cc->callback); + callback (data1, g_value_get_object (param_values + 1), g_value_get_enum (param_values + 2), data2); +} + + +