app: use a GimpPickableButton for GimpOperationTool's aux input

also WIP and currently looks like shit.
This commit is contained in:
Michael Natterer 2013-09-15 00:37:42 +02:00
parent 4e2868986a
commit 52fe319fcb
2 changed files with 26 additions and 51 deletions

View file

@ -41,11 +41,11 @@
#include "core/gimpimagemap.h"
#include "core/gimplist.h"
#include "core/gimpparamspecs-duplicate.h"
#include "core/gimppickable.h"
#include "core/gimpsettings.h"
#include "widgets/gimpcontainercombobox.h"
#include "widgets/gimpcontainerview.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimppickablebutton.h"
#include "widgets/gimpproptable.h"
#include "display/gimpdisplay.h"
@ -178,18 +178,8 @@ gimp_operation_tool_initialize (GimpTool *tool,
GimpDisplay *display,
GError **error)
{
GimpOperationTool *op_tool = GIMP_OPERATION_TOOL (tool);
if (GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error))
{
if (op_tool->aux_input_combo)
{
GimpImage *image = gimp_item_get_image (GIMP_ITEM (tool->drawable));
gimp_container_view_set_container (GIMP_CONTAINER_VIEW (op_tool->aux_input_combo),
gimp_image_get_channels (image));
}
return TRUE;
}
@ -210,8 +200,8 @@ gimp_operation_tool_control (GimpTool *tool,
break;
case GIMP_TOOL_ACTION_HALT:
if (op_tool->aux_input_combo)
gimp_container_view_set_container (GIMP_CONTAINER_VIEW (op_tool->aux_input_combo),
if (op_tool->aux_input_button)
gimp_pickable_button_set_pickable (GIMP_PICKABLE_BUTTON (op_tool->aux_input_button),
NULL);
break;
}
@ -263,11 +253,11 @@ gimp_operation_tool_dialog (GimpImageMapTool *image_map_tool)
FALSE, FALSE, 0);
gtk_widget_show (tool->options_box);
if (tool->aux_input_combo)
if (tool->aux_input_button)
{
gtk_box_pack_start (GTK_BOX (tool->options_box), tool->aux_input_combo,
gtk_box_pack_start (GTK_BOX (tool->options_box), tool->aux_input_button,
FALSE, FALSE, 0);
gtk_widget_show (tool->aux_input_combo);
gtk_widget_show (tool->aux_input_button);
}
if (tool->options_table)
@ -464,15 +454,15 @@ gimp_operation_tool_color_picked (GimpImageMapTool *im_tool,
}
static gboolean
gimp_operation_tool_aux_selected (GimpContainerView *view,
GimpViewable *viewable,
gpointer insert_data,
GeglNode *aux_input)
gimp_operation_tool_aux_notify (GimpPickableButton *button,
const GParamSpec *pspec,
GeglNode *aux_input)
{
GeglBuffer *buffer = NULL;
GimpPickable *pickable = gimp_pickable_button_get_pickable (button);
GeglBuffer *buffer = NULL;
if (viewable)
buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (viewable));
if (pickable)
buffer = gimp_pickable_get_buffer (pickable);
gegl_node_set (aux_input,
"buffer", buffer,
@ -521,10 +511,10 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
else
GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->settings_name = NULL; /* XXX hack */
if (tool->aux_input_combo)
if (tool->aux_input_button)
{
gtk_widget_destroy (tool->aux_input_combo);
tool->aux_input_combo = NULL;
gtk_widget_destroy (tool->aux_input_button);
tool->aux_input_button = NULL;
}
if (tool->options_table)
@ -541,10 +531,7 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
if (gegl_node_has_pad (im_tool->operation, "aux"))
{
GimpImage *image;
GimpContext *context;
GimpContainer *channels;
GimpChannel *channel;
GimpContext *context;
tool->aux_input = gegl_node_new_child (NULL,
"operation", "gegl:buffer-source",
@ -553,33 +540,21 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
gegl_node_connect_to (tool->aux_input, "output",
im_tool->operation, "aux");
image = gimp_item_get_image (GIMP_ITEM (GIMP_TOOL (tool)->drawable));
context = GIMP_CONTEXT (GIMP_TOOL_GET_OPTIONS (tool));
context = GIMP_CONTEXT (GIMP_TOOL_GET_OPTIONS (tool));
channels = gimp_image_get_channels (image);
tool->aux_input_combo =
gimp_container_combo_box_new (channels, context,
GIMP_VIEW_SIZE_SMALL, 1);
tool->aux_input_button =
gimp_pickable_button_new (context, GIMP_VIEW_SIZE_LARGE, 1);
if (tool->options_box)
{
gtk_box_pack_start (GTK_BOX (tool->options_box), tool->aux_input_combo,
gtk_box_pack_start (GTK_BOX (tool->options_box), tool->aux_input_button,
FALSE, FALSE, 0);
gtk_widget_show (tool->aux_input_combo);
gtk_widget_show (tool->aux_input_button);
}
g_signal_connect_object (tool->aux_input_combo, "select-item",
G_CALLBACK (gimp_operation_tool_aux_selected),
g_signal_connect_object (tool->aux_input_button, "notify::pickable",
G_CALLBACK (gimp_operation_tool_aux_notify),
tool->aux_input, 0);
channel = gimp_image_get_active_channel (image);
if (! channel)
channel = GIMP_CHANNEL (gimp_container_get_first_child (channels));
gimp_container_view_select_item (GIMP_CONTAINER_VIEW (tool->aux_input_combo),
GIMP_VIEWABLE (channel));
}
if (tool->config)

View file

@ -45,7 +45,7 @@ struct _GimpOperationTool
/* dialog */
GtkWidget *options_box;
GtkWidget *options_table;
GtkWidget *aux_input_combo;
GtkWidget *aux_input_button;
};
struct _GimpOperationToolClass