[gimp/wip/animation: 160/197] plug-ins: properly reorder panels on drag'n drop.
- From: Jehan Pagès <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/wip/animation: 160/197] plug-ins: properly reorder panels on drag'n drop.
- Date: Sat, 7 Oct 2017 03:11:53 +0000 (UTC)
commit eb7804d9bcffe8fd53dd97cc2bc27e2500d1bf27
Author: Jehan <jehan girinstud io>
Date: Sun Jun 25 00:28:31 2017 +0200
plug-ins: properly reorder panels on drag'n drop.
Do not reload the whole animation. Also properly reorder comments as
well.
.../animation-play/widgets/animation-storyboard.c | 69 +++++++++++++++++---
1 files changed, 60 insertions(+), 9 deletions(-)
---
diff --git a/plug-ins/animation-play/widgets/animation-storyboard.c
b/plug-ins/animation-play/widgets/animation-storyboard.c
index b813383..e7b9c87 100644
--- a/plug-ins/animation-play/widgets/animation-storyboard.c
+++ b/plug-ins/animation-play/widgets/animation-storyboard.c
@@ -534,7 +534,7 @@ animation_storyboard_load (Animation *animation,
G_CALLBACK (animation_storyboard_disposal_toggled),
animation);
view->priv->disposal_buttons = g_list_prepend (view->priv->disposal_buttons,
- disposal);
+ disposal);
gtk_widget_show (disposal);
}
g_signal_connect (view->priv->playback, "render",
@@ -826,14 +826,19 @@ animation_storyboard_move (AnimationStoryboard *storyboard,
image_id = animation_get_image_id (animation);
if (from_panel != to_panel)
{
- GtkWidget *button;
+ GtkWidget *layout;
+ GList *iter;
gpointer tattoo;
gint32 layer;
gint new_position;
+ gint i;
+
+ layout = gtk_bin_get_child (GTK_BIN (storyboard));
+ layout = gtk_bin_get_child (GTK_BIN (layout));
- button = g_list_nth_data (storyboard->priv->panel_buttons,
- from_panel);
- tattoo = g_object_get_data (G_OBJECT (button), "layer-tattoo");
+ iter = g_list_nth (storyboard->priv->panel_buttons,
+ from_panel);
+ tattoo = g_object_get_data (G_OBJECT (iter->data), "layer-tattoo");
layer = gimp_image_get_layer_by_tattoo (image_id,
GPOINTER_TO_INT (tattoo));
@@ -841,9 +846,55 @@ animation_storyboard_move (AnimationStoryboard *storyboard,
new_position = g_list_length (storyboard->priv->panel_buttons) - to_panel - 1;
gimp_image_reorder_item (image_id, layer, 0, new_position);
- /* For now, do a full reload. Ugly but that's a first version.
- * TODO: implement a saner, lighter reordering of the GUI.
- */
- animation_load (animation);
+ /* Reorder the internal lists. */
+ storyboard->priv->panel_buttons = g_list_remove_link (storyboard->priv->panel_buttons,
+ iter);
+ storyboard->priv->panel_buttons = g_list_insert (storyboard->priv->panel_buttons,
+ iter->data, to_panel);
+ g_list_free (iter);
+
+ iter = g_list_nth (storyboard->priv->comments,
+ from_panel);
+ storyboard->priv->comments = g_list_remove_link (storyboard->priv->comments,
+ iter);
+ storyboard->priv->comments = g_list_insert (storyboard->priv->comments,
+ iter->data, to_panel);
+ g_list_free (iter);
+
+ /* Refresh the GUI. */
+ i = MIN (from_panel, to_panel);
+ iter = g_list_nth (storyboard->priv->panel_buttons, i);
+ for (; iter; iter = iter->next, i++)
+ {
+ g_object_ref (iter->data);
+ gtk_container_remove (GTK_CONTAINER (layout), iter->data);
+ gtk_table_attach (GTK_TABLE (layout),
+ iter->data, 0, 4,
+ 6 * i + 1,
+ 6 * (i + 1),
+ GTK_EXPAND | GTK_FILL,
+ GTK_FILL,
+ 1, 1);
+ g_object_unref (iter->data);
+ g_object_set_data (G_OBJECT (iter->data), "panel-num",
+ GINT_TO_POINTER (i));
+ }
+ i = MIN (from_panel, to_panel);
+ iter = g_list_nth (storyboard->priv->comments, i);
+ for (; iter; iter = iter->next, i++)
+ {
+ g_object_ref (iter->data);
+ gtk_container_remove (GTK_CONTAINER (layout), iter->data);
+ gtk_table_attach (GTK_TABLE (layout),
+ iter->data, 5, 9,
+ 6 * i + 1,
+ 6 * (i + 1),
+ GTK_EXPAND | GTK_FILL,
+ GTK_FILL,
+ 0, 1);
+ g_object_unref (iter->data);
+ g_object_set_data (G_OBJECT (iter->data), "panel-num",
+ GINT_TO_POINTER (i));
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]