[evolution/clutter-calendar-v2] more meaningful animations



commit ac3cd2359961841bfef222ec49f72adb537e08ca
Author: Srinivasa Ragavan <sragavan gnome org>
Date:   Thu Sep 16 18:24:24 2010 +0530

    more meaningful animations

 calendar/gui/e-week-view-clutter-event-item.c |   58 +++++++++++++++++++++++++
 calendar/gui/e-week-view-clutter-event-item.h |    4 ++
 calendar/gui/e-week-view-layout.c             |    1 +
 calendar/gui/e-week-view.c                    |   10 +++-
 4 files changed, 70 insertions(+), 3 deletions(-)
---
diff --git a/calendar/gui/e-week-view-clutter-event-item.c b/calendar/gui/e-week-view-clutter-event-item.c
index 86dd5bb..3c7cbe4 100644
--- a/calendar/gui/e-week-view-clutter-event-item.c
+++ b/calendar/gui/e-week-view-clutter-event-item.c
@@ -1687,3 +1687,61 @@ e_week_view_clutter_event_item_get_edit_text (EWeekViewClutterEventItem *item)
 	return clutter_text_get_text (item->priv->text_item);
 }
 
+
+static void
+scale_delete_stage2 (ClutterAnimation *amim, ClutterActor *actor)
+{
+	clutter_actor_destroy (actor);
+}
+
+static void
+scale_delete_stage1 (ClutterAnimation *amim, ClutterActor *item)
+{
+	clutter_actor_animate (item, CLUTTER_EASE_IN_SINE,
+				200,
+				"scale-x", 0.1,
+				"signal-after::completed", scale_delete_stage2, item,
+				NULL);
+	
+
+}
+
+static void
+wvce_animate_scale_delete (ClutterActor *item)
+{
+	float height=0, width=0;
+
+	clutter_actor_get_size (item, &width, &height);
+
+	g_object_set (item, "scale-center-x", width/2, "scale-center-y", height/2, NULL);
+
+	clutter_actor_animate (item, CLUTTER_EASE_OUT_SINE,
+				200,
+				"scale-y", 0.1,
+				"signal-after::completed", scale_delete_stage1, item,
+				NULL);
+}
+
+void
+e_week_view_clutter_event_item_scale_destroy (EWeekViewClutterEventItem *item)
+{
+	wvce_animate_scale_delete (item);
+}
+
+
+static void
+fade_delete_stage1 (ClutterAnimation *amim, ClutterActor *actor)
+{
+	clutter_actor_destroy (actor);
+}
+
+void
+e_week_view_clutter_event_item_fade_destroy (EWeekViewClutterEventItem *item)
+{
+	clutter_actor_animate (item, CLUTTER_EASE_OUT_SINE,
+				200,
+				"opacity", 0.0,
+				"signal-after::completed", fade_delete_stage1, item,
+				NULL);	
+}
+
diff --git a/calendar/gui/e-week-view-clutter-event-item.h b/calendar/gui/e-week-view-clutter-event-item.h
index c4af0c0..c9f483d 100644
--- a/calendar/gui/e-week-view-clutter-event-item.h
+++ b/calendar/gui/e-week-view-clutter-event-item.h
@@ -95,6 +95,10 @@ const char *	e_week_view_clutter_event_item_get_edit_text
 
 EWeekViewClutterEventItem * e_week_view_clutter_event_item_new (EWeekView *view);
 
+void		e_week_view_clutter_event_item_scale_destroy 
+						(EWeekViewClutterEventItem *item);
+void		e_week_view_clutter_event_item_fade_destroy 
+						(EWeekViewClutterEventItem *item);
 
 G_END_DECLS
 
diff --git a/calendar/gui/e-week-view-layout.c b/calendar/gui/e-week-view-layout.c
index 69f615e..392ff1e 100644
--- a/calendar/gui/e-week-view-layout.c
+++ b/calendar/gui/e-week-view-layout.c
@@ -201,6 +201,7 @@ e_week_view_layout_event	(EWeekViewEvent	*event,
 					event->spans_index + span_num);
 				span.background_item = old_span->background_item;
 				span.text_item = old_span->text_item;
+				span.actor_item = old_span->actor_item;
 				old_span->background_item = NULL;
 				old_span->text_item = NULL;
 				old_span->actor_item = NULL;
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 1e15e65..130490e 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -2473,6 +2473,7 @@ e_week_view_remove_event_cb (EWeekView *week_view,
 	EWeekViewEvent *event;
 	EWeekViewEventSpan *span;
 	gint span_num;
+	gboolean delete_from_cal = data != NULL ? TRUE : FALSE;
 
 	if (!is_array_index_in_bounds (week_view->events, event_num))
 		return TRUE;
@@ -2514,7 +2515,10 @@ e_week_view_remove_event_cb (EWeekView *week_view,
 			}
 #if HAVE_CLUTTER			
 			if (span->actor_item) {
-				clutter_actor_destroy (span->actor_item);
+				if (delete_from_cal)
+					e_week_view_clutter_event_item_scale_destroy (span->actor_item);
+				else
+					e_week_view_clutter_event_item_fade_destroy (span->actor_item);
 				span->actor_item = NULL;
 			}
 #endif			
@@ -4447,7 +4451,7 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
 		e_cal_component_get_uid (comp, &uid);
 		g_signal_handlers_disconnect_by_func(item, e_week_view_on_text_item_event, week_view);
 		e_week_view_foreach_event_with_uid (week_view, uid,
-						    e_week_view_remove_event_cb, NULL);
+						    e_week_view_remove_event_cb, TRUE);
 		week_view->event_destroyed = TRUE;
 #if HAVE_CLUTTER
 	if (WITHOUT_CLUTTER) {
@@ -4488,7 +4492,7 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
 					E_CALENDAR_VIEW (week_view));
 
 			/* we remove the object since we either got the update from the server or failed */
-			e_week_view_remove_event_cb (week_view, event_num, NULL);
+			e_week_view_remove_event_cb (week_view, event_num, TRUE);
 		} else {
 			CalObjModType mod = CALOBJ_MOD_ALL;
 			GtkWindow *toplevel;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]