summaryrefslogtreecommitdiff
path: root/liszt/contact-view.c
diff options
context:
space:
mode:
Diffstat (limited to 'liszt/contact-view.c')
-rw-r--r--liszt/contact-view.c87
1 files changed, 58 insertions, 29 deletions
diff --git a/liszt/contact-view.c b/liszt/contact-view.c
index 86d57b35c..b7daf7fc3 100644
--- a/liszt/contact-view.c
+++ b/liszt/contact-view.c
@@ -516,52 +516,71 @@ lol_contact_view_new (void)
}
static gboolean
-selected_timeout_add (gpointer data)
+to_blue_timeout (gpointer data)
{
LolContactView *self = data;
- LolContactViewPrivate *priv = self->priv;
- gfloat to_add = 3.2;
- gfloat height;
+ ClutterColor color;
+ gboolean out = TRUE;
+
+ clutter_box_get_color (CLUTTER_BOX (self), &color);
+
+ color.red -= 12;
+ color.green -= 8;
+ color.blue -= 2;
+
+ if (color.red <= 83)
+ color.red = 83;
- height = clutter_actor_get_height (priv->actions) + to_add;
+ if (color.green <= 136)
+ color.green = 136;
- clutter_actor_set_height (priv->actions, height);
+ if (color.blue <= 224)
+ color.blue = 224;
- if (height >= 32.0)
- return FALSE;
+ if (color.red == 83 && color.green == 136 && color.blue == 224)
+ out = FALSE;
- return TRUE;
+ clutter_box_set_color (CLUTTER_BOX (self), &color);
+
+ return out;
}
static gboolean
-selected_timeout_subtract (gpointer data)
+to_white_timeout (gpointer data)
{
LolContactView *self = data;
- LolContactViewPrivate *priv = self->priv;
- gfloat to_sub = 3.2;
- gfloat height;
+ ClutterColor color;
+ gboolean out = TRUE;
+
+ clutter_box_get_color (CLUTTER_BOX (self), &color);
+
+ if (color.red >= 243)
+ color.red = 255;
+ else
+ color.red += 12;
- height = clutter_actor_get_height (priv->actions) - to_sub;
+ if (color.green >= 247)
+ color.green = 255;
+ else
+ color.green += 8;
- if (height <= 0)
- height = 0.0;
+ if (color.blue >= 253)
+ color.blue = 255;
+ else
+ color.blue += 2;
- clutter_actor_set_height (priv->actions, height);
+ if (color.red == 255 && color.green == 255 && color.blue == 255)
+ out = FALSE;
- if (height == 0.0)
- {
- clutter_actor_hide (priv->actions);
- return FALSE;
- }
+ clutter_box_set_color (CLUTTER_BOX (self), &color);
- return TRUE;
+ return out;
}
void
lol_contact_view_toggle_selected (LolContactView *self)
{
LolContactViewPrivate *priv = self->priv;
- ClutterColor blue = { 83, 136, 224, 255 };
ClutterColor white = { 255, 255, 255, 255 };
ClutterColor black = { 0, 0, 0, 255 };
@@ -569,19 +588,29 @@ lol_contact_view_toggle_selected (LolContactView *self)
if (priv->selected)
{
- clutter_box_set_color (CLUTTER_BOX (self), &blue);
clutter_actor_show (priv->actions);
clutter_text_set_color (CLUTTER_TEXT (priv->name_text), &white);
- clutter_actor_set_height (priv->actions, 0);
- g_timeout_add (10, selected_timeout_add, self);
+ clutter_actor_set_height (priv->actions, 0.0);
+ clutter_actor_set_opacity (priv->actions, 0.0);
+
+ clutter_actor_animate (priv->actions, CLUTTER_LINEAR, 250,
+ "height", 32.0,
+ "opacity", 255,
+ NULL);
+
+ g_timeout_add (1, to_blue_timeout, self);
}
else
{
- clutter_box_set_color (CLUTTER_BOX (self), &white);
clutter_text_set_color (CLUTTER_TEXT (priv->name_text), &black);
- g_timeout_add (10, selected_timeout_subtract, self);
+ clutter_actor_animate (priv->actions, CLUTTER_LINEAR, 250,
+ "height", 0.0,
+ "opacity", 0,
+ NULL);
+
+ g_timeout_add (1, to_white_timeout, self);
}
g_signal_emit (self, signals[SELECTED], 0, priv->selected);