Remember the doodle and bubble tool status
authordanigm <dani@danigm.net>
Sun, 13 Jun 2010 22:02:34 +0000 (00:02 +0200)
committerdanigm <dani@danigm.net>
Sun, 13 Jun 2010 22:02:34 +0000 (00:02 +0200)
src/doodle-tool.c
src/tbo-window.c
src/tbo-window.h

index 19fa3af..ff13d52 100644 (file)
 #include "doodle-tool.h"
 
 static gboolean BUBBLE_MODE = FALSE;
+static GtkWidget *BUBBLE_TREE = NULL;
+static GtkWidget *DOODLE_TREE = NULL;
+static GtkWidget *TREE = NULL;
+static gdouble HADJUSTD, HADJUSTB = 0;
+static gdouble VADJUSTD, VADJUSTB = 0;
 
 void
 doodle_tool_bubble_on_select (TboWindow *tbo)
 {
     BUBBLE_MODE = TRUE;
+    TREE = BUBBLE_TREE;
     doodle_tool_on_select (tbo);
 }
 
@@ -24,26 +30,79 @@ doodle_tool_bubble_on_unselect (TboWindow *tbo)
 {
     doodle_tool_on_unselect (tbo);
     BUBBLE_MODE = FALSE;
+    BUBBLE_TREE = TREE;
+}
+
+gboolean
+update_scroll_cb (gpointer p)
+{
+    GtkAdjustment *adjust;
+    gdouble hadjust, vadjust;
+    TboWindow *tbo = (TboWindow *)p;
+    if (BUBBLE_MODE)
+    {
+        hadjust = HADJUSTB;
+        vadjust = VADJUSTB;
+    }
+    else
+    {
+        hadjust = HADJUSTD;
+        vadjust = VADJUSTD;
+    }
+    adjust = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (tbo->scroll2));
+    gtk_adjustment_set_value (adjust, hadjust);
+    adjust = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (tbo->scroll2));
+    gtk_adjustment_set_value (adjust, vadjust);
+    return FALSE;
 }
 
 void
 doodle_tool_on_select (TboWindow *tbo)
 {
-    GtkWidget *tree;
+    if (!BUBBLE_MODE)
+        TREE = DOODLE_TREE;
+    if (!TREE)
+    {
+        TREE = doodle_setup_tree (tbo, BUBBLE_MODE);
+        gtk_widget_show_all (TREE);
+        TREE = g_object_ref (TREE);
+    }
 
-    tree = doodle_setup_tree (tbo, BUBBLE_MODE);
+    tbo_empty_tool_area (tbo);
+    gtk_container_add (GTK_CONTAINER (tbo->toolarea), TREE);
 
-    gtk_widget_show_all (tree);
 
-    tbo_empty_tool_area (tbo);
-    gtk_container_add (GTK_CONTAINER (tbo->toolarea), tree);
+    g_timeout_add (5, update_scroll_cb, tbo);
 }
 
 void
 doodle_tool_on_unselect (TboWindow *tbo)
 {
+    GtkAdjustment *adjust;
+    gdouble hadjust, vadjust;
+    if (GTK_IS_WIDGET (TREE) && TREE->parent == GTK_WIDGET (tbo->toolarea))
+    {
+        adjust = gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (tbo->scroll2));
+        hadjust = gtk_adjustment_get_value (adjust);
+        adjust = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (tbo->scroll2));
+        vadjust = gtk_adjustment_get_value (adjust);
+
+        if (!BUBBLE_MODE)
+        {
+            DOODLE_TREE = TREE;
+            HADJUSTD = hadjust;
+            VADJUSTD = vadjust;
+        }
+        else
+        {
+            HADJUSTB = hadjust;
+            VADJUSTB = vadjust;
+        }
+
+        gtk_container_remove (GTK_CONTAINER (tbo->toolarea), TREE);
+    }
+
     tbo_empty_tool_area (tbo);
-    doodle_free_all ();
 }
 
 void doodle_tool_on_move (GtkWidget *widget, GdkEventMotion *event, TboWindow *tbo){}
index 0bc74fb..9ff9a5c 100644 (file)
@@ -13,6 +13,7 @@ static int NWINDOWS = 0;
 
 TboWindow *
 tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll,
+                GtkWidget *scroll2,
                 GtkWidget *notebook, GtkWidget *toolarea,
                 GtkWidget *status, GtkWidget *vbox, Comic *comic)
 {
@@ -22,6 +23,7 @@ tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll,
     tbo = malloc (sizeof (TboWindow));
     tbo->window = window;
     tbo->dw_scroll = dw_scroll;
+    tbo->scroll2 = scroll2;
     list = gtk_container_get_children (GTK_CONTAINER (dw_scroll));
     tbo->drawing = GTK_WIDGET (list->data);
     tbo->status = status;
@@ -145,7 +147,7 @@ tbo_new_tbo (int width, int height)
 
     status = gtk_statusbar_new ();
 
-    tbo = tbo_window_new (window, scrolled, notebook, tool_paned, status, container, comic);
+    tbo = tbo_window_new (window, scrolled, scrolled2, notebook, tool_paned, status, container, comic);
     tbo_window_update_status (tbo, 0, 0);
 
     // ui-drawing.c (expose, motion and click)
@@ -192,7 +194,7 @@ tbo_window_update_status (TboWindow *tbo, int x, int y)
 gboolean
 remove_cb (GtkWidget *widget, gpointer data)
 {
-    gtk_widget_destroy(widget);
+    gtk_widget_destroy (widget);
     return FALSE;
 }
 
index 4c9cbde..f4ee608 100644 (file)
@@ -8,6 +8,7 @@ typedef struct
 {
     GtkWidget *window;
     GtkWidget *dw_scroll;
+    GtkWidget *scroll2;
     GtkWidget *toolarea;
     GtkWidget *notebook;
     GtkWidget *drawing;
@@ -17,7 +18,7 @@ typedef struct
     char *path;
 } TboWindow;
 
-TboWindow *tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll, GtkWidget *notebook, GtkWidget *toolarea, GtkWidget *status, GtkWidget *vbox, Comic *comic);
+TboWindow *tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll, GtkWidget *scroll2, GtkWidget *notebook, GtkWidget *toolarea, GtkWidget *status, GtkWidget *vbox, Comic *comic);
 void tbo_window_free (TboWindow *tbo);
 gboolean tbo_window_free_cb (GtkWidget *widget, GdkEventExpose *event, TboWindow *tbo);
 GdkPixbuf *create_pixbuf (const gchar * filename);