Tooltip fade in and fade out
authordanigm <dani@danigm.net>
Mon, 3 May 2010 00:01:15 +0000 (02:01 +0200)
committerdanigm <dani@danigm.net>
Mon, 3 May 2010 00:01:15 +0000 (02:01 +0200)
src/selector-tool.c
src/tbo-tooltip.c
src/tbo-tooltip.h
src/ui-drawing.c

index f608e0d..3ad21e4 100644 (file)
@@ -582,12 +582,12 @@ page_view_on_move (GtkWidget *widget,
             frame = (Frame*)frame_list->data;
             x1 = frame->x + (frame->width / 2);
             y1 = frame->y + (frame->height / 2);
-            tbo_tooltip_set (_("double click here"), x1, y1);
+            tbo_tooltip_set (_("double click here"), x1, y1, tbo);
             found = TRUE;
         }
     }
     if (!found)
-        tbo_tooltip_set(NULL, 0, 0);
+        tbo_tooltip_set(NULL, 0, 0, tbo);
 }
 
 void
@@ -628,6 +628,9 @@ page_view_on_click (GtkWidget *widget, GdkEventButton *event, TboWindow *tbo)
     {
         set_frame_view (SELECTED);
         empty_tool_area (tbo);
+        tbo_tooltip_set (NULL, 0, 0, tbo);
+        // TODO add tooltip_notify
+        //tbo_tooltip_set (_("press esc to go back"), 200, 50, tbo);
     }
 
     START_X = x;
index 4bc660d..b4a2348 100644 (file)
@@ -1,11 +1,17 @@
+#include <string.h>
 #include <math.h>
 #include <gtk/gtk.h>
 #include <glib.h>
 #include <cairo.h>
+#include "ui-drawing.h"
 #include "tbo-tooltip.h"
+#include "tbo-window.h"
 
 static GString *TOOLTIP = NULL;
 static int X=0, Y=0;
+static double ALPHA = 0.0;
+static double INC_ALPHA = 0.10;
+static gboolean DECREASING = FALSE;
 
 void
 cairo_rounded_rectangle (cairo_t *cr, int xx, int yy, int w, int h)
@@ -28,39 +34,88 @@ cairo_rounded_rectangle (cairo_t *cr, int xx, int yy, int w, int h)
     cairo_close_path (cr);
 }
 
+gboolean
+increase_alpha_cb (gpointer p)
+{
+    if (ALPHA >= 0.7)
+    {
+        ALPHA = 0.7;
+        return FALSE;
+    }
+
+    ALPHA += INC_ALPHA;
+    update_drawing ((TboWindow *)p);
+    return TRUE;
+}
+
+gboolean
+decrease_alpha_cb (gpointer p)
+{
+    if (!DECREASING)
+        return FALSE;
+
+    if (ALPHA <= 0.0 || !p)
+    {
+        ALPHA = 0.0;
+        g_string_free (TOOLTIP, TRUE);
+        TOOLTIP = NULL;
+        update_drawing ((TboWindow *)p);
+        return FALSE;
+    }
+
+    ALPHA -= INC_ALPHA;
+    update_drawing ((TboWindow *)p);
+    return TRUE;
+}
+
 void
 tbo_tooltip_draw_background (cairo_t *cr, int w, int h)
 {
     int margin = 5;
 
-    cairo_set_source_rgba (cr, 0, 0, 0, 0.6);
+    cairo_set_source_rgba (cr, 0, 0, 0, ALPHA);
     cairo_rounded_rectangle (cr, -margin, -margin, w + margin * 2, h + margin * 2);
     cairo_fill (cr);
-
 }
 
 void
-tbo_tooltip_set (const char *tooltip, int x, int y)
+tbo_tooltip_set (const char *tooltip, int x, int y, TboWindow *tbo)
 {
+
     if (!TOOLTIP)
     {
         if (tooltip)
         {
             TOOLTIP = g_string_new (tooltip);
+            ALPHA = 0.0;
+            g_timeout_add (50, increase_alpha_cb, tbo);
+            DECREASING = FALSE;
             X = x;
             Y = y;
         }
     }
     else
     {
+        // if it's the same passing
+        if (x == X && y == Y && !strcmp (tooltip, TOOLTIP->str))
+            return;
+
         if (!tooltip)
         {
-            g_string_free (TOOLTIP, TRUE);
-            TOOLTIP = NULL;
+            if (!DECREASING)
+            {
+                g_timeout_add (50, decrease_alpha_cb, tbo);
+                DECREASING = TRUE;
+            }
         }
         else
         {
-            TOOLTIP = g_string_overwrite (TOOLTIP, 0, tooltip);
+            g_string_free (TOOLTIP, TRUE);
+
+            TOOLTIP = g_string_new (tooltip);
+            ALPHA = 0.0;
+            g_timeout_add (50, increase_alpha_cb, tbo);
+            DECREASING = FALSE;
             X = x;
             Y = y;
         }
@@ -99,7 +154,7 @@ tbo_tooltip_draw (cairo_t *cr)
 
     tbo_tooltip_draw_background (cr, w, h);
 
-    cairo_set_source_rgb(cr, 1, 1, 1);
+    cairo_set_source_rgba (cr, 1, 1, 1, ALPHA);
     pango_cairo_show_layout (cr, layout);
 
     cairo_translate (cr, -posx, -posy);
index 64f9aa6..f54782f 100644 (file)
@@ -3,8 +3,9 @@
 
 #include <cairo.h>
 #include <glib.h>
+#include "tbo-window.h"
 
-void tbo_tooltip_set (const char *tooltip, int x, int y);
+void tbo_tooltip_set (const char *tooltip, int x, int y, TboWindow *tbo);
 GString *tbo_tooltip_get ();
 void tbo_tooltip_draw (cairo_t *cr);
 
index 430dac4..07539d7 100644 (file)
@@ -292,10 +292,6 @@ void
 set_frame_view (Frame *frame)
 {
     FRAME_VIEW = frame;
-    if (frame)
-    {
-        tbo_tooltip_set (NULL, 0, 0);
-    }
 }
 
 Frame *