Tooltip to enter in frame view
authordanigm <dani@danigm.net>
Sat, 1 May 2010 19:25:05 +0000 (21:25 +0200)
committerdanigm <dani@danigm.net>
Sat, 1 May 2010 19:25:05 +0000 (21:25 +0200)
src/Makefile.am
src/selector-tool.c
src/tbo-tooltip.c [new file with mode: 0644]
src/tbo-tooltip.h [new file with mode: 0644]
src/ui-drawing.c

index ee41e0c..e81f972 100644 (file)
@@ -25,6 +25,7 @@ tbo_SOURCES = \
        doodle-tool.c \
        custom-stock.c \
        doodle-treeview.c \
+       tbo-tooltip.c \
        text-tool.c \
        textobj.c \
        export.c \
@@ -55,6 +56,7 @@ tbo_SOURCES = \
        svgimage.h \
        piximage.h \
        textobj.h \
+       tbo-tooltip.h \
        dnd.h \
        tbo-object.h \
        comic-load.h \
index b4d8f6d..f29a404 100644 (file)
@@ -11,6 +11,7 @@
 #include "frame.h"
 #include "comic.h"
 #include "ui-drawing.h"
+#include "tbo-tooltip.h"
 
 #define R_SIZE 10
 
@@ -567,6 +568,21 @@ page_view_on_move (GtkWidget *widget,
             OVER_RESIZER = FALSE;
         }
     }
+
+    GList *frame_list;
+    Page *page = tbo_comic_get_current_page (tbo->comic);
+    gboolean found = FALSE;
+
+    for (frame_list = tbo_page_get_frames (page); frame_list && !found; frame_list = frame_list->next)
+    {
+        if (tbo_frame_point_inside ((Frame*)frame_list->data, (int)event->x, (int)event->y))
+        {
+            tbo_tooltip_set (_("double click here"), (int)event->x + 10, (int)event->y + 10);
+            found = TRUE;
+        }
+    }
+    if (!found)
+        tbo_tooltip_set(NULL, 0, 0);
 }
 
 void
diff --git a/src/tbo-tooltip.c b/src/tbo-tooltip.c
new file mode 100644 (file)
index 0000000..00685de
--- /dev/null
@@ -0,0 +1,64 @@
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <cairo.h>
+#include "tbo-tooltip.h"
+
+static GString *TOOLTIP = NULL;
+static int X=0, Y=0;
+
+void
+tbo_tooltip_set (const char *tooltip, int x, int y)
+{
+    if (!TOOLTIP)
+    {
+        if (tooltip)
+        {
+            TOOLTIP = g_string_new (tooltip);
+            X = x;
+            Y = y;
+        }
+    }
+    else
+    {
+        if (!tooltip)
+        {
+            g_string_free (TOOLTIP, TRUE);
+            TOOLTIP = NULL;
+        }
+        else
+        {
+            TOOLTIP = g_string_overwrite (TOOLTIP, 0, tooltip);
+            X = x;
+            Y = y;
+        }
+    }
+}
+
+GString *
+tbo_tooltip_get ()
+{
+    return TOOLTIP;
+}
+
+void
+tbo_tooltip_draw (cairo_t *cr)
+{
+    if (!TOOLTIP)
+        return;
+
+    gchar *text = TOOLTIP->str;
+
+    PangoLayout *layout;
+
+    cairo_set_source_rgb(cr, 0, 0, 0);
+
+    //TODO draw a background
+    layout = pango_cairo_create_layout (cr);
+    pango_layout_set_text (layout, text, -1);
+    //pango_layout_set_font_description (layout, desc);
+    pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
+
+    cairo_translate (cr, X, Y);
+    pango_cairo_show_layout (cr, layout);
+    cairo_translate (cr, -X, -Y);
+}
diff --git a/src/tbo-tooltip.h b/src/tbo-tooltip.h
new file mode 100644 (file)
index 0000000..64f9aa6
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef __TBO_TOOLTIP_H__
+#define __TBO_TOOLTIP_H__
+
+#include <cairo.h>
+#include <glib.h>
+
+void tbo_tooltip_set (const char *tooltip, int x, int y);
+GString *tbo_tooltip_get ();
+void tbo_tooltip_draw (cairo_t *cr);
+
+#endif
index 8256e86..07539d7 100644 (file)
@@ -20,6 +20,8 @@
 #include "doodle-tool.h"
 #include "dnd.h"
 
+#include "tbo-tooltip.h"
+
 
 Frame *FRAME_VIEW = NULL;
 float ZOOM_STEP = 0.05;
@@ -151,6 +153,8 @@ on_expose_cb (GtkWidget      *widget,
 
     tbo_drawing_draw (cr, tbo);
 
+    tbo_tooltip_draw (cr);
+
     // Update drawing helpers
     tool = get_selected_tool ();
     tool_signal (tool, TOOL_DRAWING, cr);
@@ -180,6 +184,7 @@ on_move_cb (GtkWidget     *widget,
 
     update_drawing (tbo);
     tbo_window_update_status (tbo, (int)event->x, (int)event->y);
+
     return FALSE;
 }