From 170a4cde002e8d204ab397f09e7b2ba2a9e8137b Mon Sep 17 00:00:00 2001 From: danigm Date: Mon, 14 Jun 2010 00:02:34 +0200 Subject: [PATCH] Remember the doodle and bubble tool status --- src/doodle-tool.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++----- src/tbo-window.c | 6 +++-- src/tbo-window.h | 3 ++- 3 files changed, 71 insertions(+), 9 deletions(-) diff --git a/src/doodle-tool.c b/src/doodle-tool.c index 19fa3af..ff13d52 100644 --- a/src/doodle-tool.c +++ b/src/doodle-tool.c @@ -11,11 +11,17 @@ #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){} diff --git a/src/tbo-window.c b/src/tbo-window.c index 0bc74fb..9ff9a5c 100644 --- a/src/tbo-window.c +++ b/src/tbo-window.c @@ -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; } diff --git a/src/tbo-window.h b/src/tbo-window.h index 4c9cbde..f4ee608 100644 --- a/src/tbo-window.h +++ b/src/tbo-window.h @@ -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); -- 2.1.4