Use static GdkPixmaps in the image_window and for the tool icons.

--Sven
This commit is contained in:
Sven Neumann 2000-02-08 23:45:20 +00:00
parent 3a0da284c8
commit d517927260
18 changed files with 381 additions and 309 deletions

View File

@ -1,3 +1,15 @@
Tue Feb 8 21:35:10 CET 2000 Sven Neumann <sven@gimp.org>
* app/devices.c
* app/gimpdnd.c
* app/interface.c
* app/interface.h
* app/tools.c
* app/tools.h: create the pixmaps in the image_window and in the
toolbox static and reuse them everywhere. Added tool pixmaps to
the tool_options dialog as an extra goodie. Should help to
visualize that these are tools.
2000-02-08 Michael Natterer <mitch@gimp.org>
* app/by_color_select.c: show our selection mode cursors (REPLACE,

View File

@ -735,7 +735,6 @@ void
device_status_create (void)
{
DeviceInfo *device_info;
GdkPixmap *pixmap;
GtkWidget *label;
GList *list;
gint i;
@ -815,9 +814,7 @@ device_status_create (void)
deviceD->eventboxes[i] = gtk_event_box_new();
pixmap = create_tool_pixmap (deviceD->table, RECT_SELECT);
deviceD->tools[i] = gtk_pixmap_new (pixmap, NULL);
gdk_pixmap_unref (pixmap);
deviceD->tools[i] = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_drag_source_set (deviceD->eventboxes[i],
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -984,7 +981,6 @@ device_status_update_current (void)
void
device_status_update (guint32 deviceid)
{
GdkPixmap *pixmap;
GdkDeviceInfo *gdk_info;
DeviceInfo *device_info;
guchar buffer[CELL_SIZE*3];
@ -1022,10 +1018,9 @@ device_status_update (guint32 deviceid)
{
gtk_widget_show (deviceD->frames[i]);
pixmap = create_tool_pixmap (deviceD->table,
gimp_context_get_tool (device_info->context));
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]), pixmap, NULL);
gdk_pixmap_unref (pixmap);
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]),
tool_get_pixmap (gimp_context_get_tool (device_info->context)),
NULL);
gtk_widget_draw (deviceD->tools[i], NULL);
gtk_widget_show (deviceD->tools[i]);

View File

@ -50,6 +50,7 @@
#include "libgimp/gimpintl.h"
/* local functions */
static void tools_select_update (GtkWidget *widget,
gpointer data);
@ -312,29 +313,32 @@ create_color_area (GtkWidget *parent)
gtk_widget_show (frame);
}
GdkPixmap *
create_tool_pixmap (GtkWidget *parent,
ToolType type)
/* creates all icons */
static void
create_tool_pixmaps (GtkWidget *parent)
{
/*
* FIXME this really should be dones without using the #defined tool names
* but it should work this way for now
*/
if (type == SCALE || type == SHEAR || type == PERSPECTIVE)
type = ROTATE;
ToolType type;
gint i;
if (tool_info[(int) type].icon_data)
return create_pixmap (parent->window, NULL,
tool_info[(int) type].icon_data,
22, 22);
else
return create_pixmap (parent->window, NULL,
dialog_bits,
22, 22);
g_return_if_fail (parent != NULL);
g_return_val_if_fail (FALSE, NULL);
for (i = 0; i < num_tools; i++)
{
type = i;
return NULL; /* not reached */
if (type == SCALE || type == SHEAR || type == PERSPECTIVE)
type = ROTATE;
if (tool_info[type].icon_data)
tool_info[i].icon_pixmap = create_pixmap (parent->window, NULL,
tool_info[type].icon_data,
22, 22);
else
tool_info[i].icon_pixmap = create_pixmap (parent->window, NULL,
dialog_bits,
22, 22);
}
}
static void
@ -350,6 +354,8 @@ create_tools (GtkWidget *parent)
wbox = parent;
gtk_widget_realize (gtk_widget_get_toplevel (wbox));
create_tool_pixmaps (wbox);
group = NULL;
@ -371,7 +377,7 @@ create_tools (GtkWidget *parent)
gtk_container_set_border_width (GTK_CONTAINER (alignment), 0);
gtk_container_add (GTK_CONTAINER (button), alignment);
pixmap = create_pixmap_widget (wbox->window, tool_info[j].icon_data, 22, 22);
pixmap = gtk_pixmap_new (tool_get_pixmap ((ToolType)j), NULL);
gtk_container_add (GTK_CONTAINER (alignment), pixmap);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
@ -499,23 +505,6 @@ create_pixmap (GdkWindow *parent,
return pixmap;
}
GtkWidget*
create_pixmap_widget (GdkWindow *parent,
gchar **data,
gint width,
gint height)
{
GtkWidget *widget;
GdkPixmap *pixmap;
GdkBitmap *mask;
pixmap = create_pixmap (parent, &mask, data, width, height);
widget = gtk_pixmap_new (pixmap, mask);
gdk_pixmap_unref (pixmap);
gdk_bitmap_unref (mask);
return (widget);
}
void
create_toolbox (void)
@ -623,6 +612,9 @@ toolbox_free (void)
gtk_widget_destroy (toolbox_shell);
for (i = 0; i < num_tools; i++)
{
if (tool_info[i].icon_pixmap)
gdk_pixmap_unref (tool_info[i].icon_pixmap);
if (!tool_info[i].icon_data)
gtk_object_sink (GTK_OBJECT (tool_info[i].tool_widget));
}
@ -645,6 +637,13 @@ create_display_shell (GDisplay* gdisp,
{
static GtkWidget *image_popup_menu = NULL;
static GtkAccelGroup *image_accel_group = NULL;
static GdkPixmap *qmasksel_pixmap = NULL;
static GdkBitmap *qmasksel_mask = NULL;
static GdkPixmap *qmasknosel_pixmap = NULL;
static GdkBitmap *qmasknosel_mask = NULL;
static GdkPixmap *navbutton_pixmap = NULL;
static GdkBitmap *navbutton_mask = NULL;
GtkWidget *vbox;
GtkWidget *table;
@ -851,48 +850,37 @@ create_display_shell (GDisplay* gdisp,
gtk_widget_set_usize (GTK_WIDGET (gdisp->qmaskon), 15, 15);
gtk_widget_set_usize (GTK_WIDGET (gdisp->qmaskoff), 15, 15);
/* Draw pixmaps - note: you must realize the parent prior to doing the
/* Create pixmaps - note: you must realize the parent prior to doing the
rest! */
{
GdkPixmap *pxmp;
GdkBitmap *mask;
GtkStyle *style;
if (!qmasksel_pixmap)
{
GtkStyle *style;
gtk_widget_realize (gdisp->shell);
style = gtk_widget_get_style (gdisp->shell);
qmasksel_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &qmasksel_mask,
&style->bg[GTK_STATE_NORMAL],
qmasksel_xpm);
qmasknosel_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &qmasknosel_mask,
&style->bg[GTK_STATE_NORMAL],
qmasknosel_xpm);
navbutton_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &navbutton_mask,
&style->bg[GTK_STATE_NORMAL],
navbutton_xpm);
}
gtk_widget_realize (gdisp->shell);
style = gtk_widget_get_style (gdisp->shell);
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
qmasksel_xpm);
pixmap = gtk_pixmap_new (qmasksel_pixmap, qmasksel_mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
gtk_widget_show (pixmap);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
gtk_widget_show (pixmap);
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
qmasknosel_xpm);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
pixmap = gtk_pixmap_new (qmasknosel_pixmap, qmasknosel_mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
gtk_widget_show (pixmap);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
gtk_widget_show (pixmap);
/* nav button pixmap */
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
navbutton_xpm);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
gtk_container_add (GTK_CONTAINER (navhbox), pixmap);
gtk_widget_show (pixmap);
}
pixmap = gtk_pixmap_new (navbutton_pixmap, navbutton_mask);
gtk_container_add (GTK_CONTAINER (navhbox), pixmap);
gtk_widget_show (pixmap);
gdisp->canvas = gtk_drawing_area_new ();
gtk_drawing_area_size (GTK_DRAWING_AREA (gdisp->canvas), n_width, n_height);

View File

@ -27,9 +27,6 @@ GtkWidget * create_pixmap_widget (GdkWindow *parent,
gint width,
gint height);
GdkPixmap * create_tool_pixmap (GtkWidget *parent,
ToolType type);
void create_toolbox (void);
void toolbox_free (void);

View File

@ -50,6 +50,7 @@
#include "libgimp/gimpintl.h"
/* local functions */
static void tools_select_update (GtkWidget *widget,
gpointer data);
@ -312,29 +313,32 @@ create_color_area (GtkWidget *parent)
gtk_widget_show (frame);
}
GdkPixmap *
create_tool_pixmap (GtkWidget *parent,
ToolType type)
/* creates all icons */
static void
create_tool_pixmaps (GtkWidget *parent)
{
/*
* FIXME this really should be dones without using the #defined tool names
* but it should work this way for now
*/
if (type == SCALE || type == SHEAR || type == PERSPECTIVE)
type = ROTATE;
ToolType type;
gint i;
if (tool_info[(int) type].icon_data)
return create_pixmap (parent->window, NULL,
tool_info[(int) type].icon_data,
22, 22);
else
return create_pixmap (parent->window, NULL,
dialog_bits,
22, 22);
g_return_if_fail (parent != NULL);
g_return_val_if_fail (FALSE, NULL);
for (i = 0; i < num_tools; i++)
{
type = i;
return NULL; /* not reached */
if (type == SCALE || type == SHEAR || type == PERSPECTIVE)
type = ROTATE;
if (tool_info[type].icon_data)
tool_info[i].icon_pixmap = create_pixmap (parent->window, NULL,
tool_info[type].icon_data,
22, 22);
else
tool_info[i].icon_pixmap = create_pixmap (parent->window, NULL,
dialog_bits,
22, 22);
}
}
static void
@ -350,6 +354,8 @@ create_tools (GtkWidget *parent)
wbox = parent;
gtk_widget_realize (gtk_widget_get_toplevel (wbox));
create_tool_pixmaps (wbox);
group = NULL;
@ -371,7 +377,7 @@ create_tools (GtkWidget *parent)
gtk_container_set_border_width (GTK_CONTAINER (alignment), 0);
gtk_container_add (GTK_CONTAINER (button), alignment);
pixmap = create_pixmap_widget (wbox->window, tool_info[j].icon_data, 22, 22);
pixmap = gtk_pixmap_new (tool_get_pixmap ((ToolType)j), NULL);
gtk_container_add (GTK_CONTAINER (alignment), pixmap);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
@ -499,23 +505,6 @@ create_pixmap (GdkWindow *parent,
return pixmap;
}
GtkWidget*
create_pixmap_widget (GdkWindow *parent,
gchar **data,
gint width,
gint height)
{
GtkWidget *widget;
GdkPixmap *pixmap;
GdkBitmap *mask;
pixmap = create_pixmap (parent, &mask, data, width, height);
widget = gtk_pixmap_new (pixmap, mask);
gdk_pixmap_unref (pixmap);
gdk_bitmap_unref (mask);
return (widget);
}
void
create_toolbox (void)
@ -623,6 +612,9 @@ toolbox_free (void)
gtk_widget_destroy (toolbox_shell);
for (i = 0; i < num_tools; i++)
{
if (tool_info[i].icon_pixmap)
gdk_pixmap_unref (tool_info[i].icon_pixmap);
if (!tool_info[i].icon_data)
gtk_object_sink (GTK_OBJECT (tool_info[i].tool_widget));
}
@ -645,6 +637,13 @@ create_display_shell (GDisplay* gdisp,
{
static GtkWidget *image_popup_menu = NULL;
static GtkAccelGroup *image_accel_group = NULL;
static GdkPixmap *qmasksel_pixmap = NULL;
static GdkBitmap *qmasksel_mask = NULL;
static GdkPixmap *qmasknosel_pixmap = NULL;
static GdkBitmap *qmasknosel_mask = NULL;
static GdkPixmap *navbutton_pixmap = NULL;
static GdkBitmap *navbutton_mask = NULL;
GtkWidget *vbox;
GtkWidget *table;
@ -851,48 +850,37 @@ create_display_shell (GDisplay* gdisp,
gtk_widget_set_usize (GTK_WIDGET (gdisp->qmaskon), 15, 15);
gtk_widget_set_usize (GTK_WIDGET (gdisp->qmaskoff), 15, 15);
/* Draw pixmaps - note: you must realize the parent prior to doing the
/* Create pixmaps - note: you must realize the parent prior to doing the
rest! */
{
GdkPixmap *pxmp;
GdkBitmap *mask;
GtkStyle *style;
if (!qmasksel_pixmap)
{
GtkStyle *style;
gtk_widget_realize (gdisp->shell);
style = gtk_widget_get_style (gdisp->shell);
qmasksel_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &qmasksel_mask,
&style->bg[GTK_STATE_NORMAL],
qmasksel_xpm);
qmasknosel_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &qmasknosel_mask,
&style->bg[GTK_STATE_NORMAL],
qmasknosel_xpm);
navbutton_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &navbutton_mask,
&style->bg[GTK_STATE_NORMAL],
navbutton_xpm);
}
gtk_widget_realize (gdisp->shell);
style = gtk_widget_get_style (gdisp->shell);
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
qmasksel_xpm);
pixmap = gtk_pixmap_new (qmasksel_pixmap, qmasksel_mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
gtk_widget_show (pixmap);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
gtk_widget_show (pixmap);
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
qmasknosel_xpm);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
pixmap = gtk_pixmap_new (qmasknosel_pixmap, qmasknosel_mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
gtk_widget_show (pixmap);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
gtk_widget_show (pixmap);
/* nav button pixmap */
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
navbutton_xpm);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
gtk_container_add (GTK_CONTAINER (navhbox), pixmap);
gtk_widget_show (pixmap);
}
pixmap = gtk_pixmap_new (navbutton_pixmap, navbutton_mask);
gtk_container_add (GTK_CONTAINER (navhbox), pixmap);
gtk_widget_show (pixmap);
gdisp->canvas = gtk_drawing_area_new ();
gtk_drawing_area_size (GTK_DRAWING_AREA (gdisp->canvas), n_width, n_height);

View File

@ -27,9 +27,6 @@ GtkWidget * create_pixmap_widget (GdkWindow *parent,
gint width,
gint height);
GdkPixmap * create_tool_pixmap (GtkWidget *parent,
ToolType type);
void create_toolbox (void);
void toolbox_free (void);

View File

@ -939,7 +939,6 @@ gimp_dnd_get_tool_icon (GtkWidget *widget,
GtkSignalFunc get_tool_func,
gpointer get_tool_data)
{
GdkPixmap *tool_pixmap;
GtkWidget *tool_icon;
ToolType tool_type;
@ -949,11 +948,7 @@ gimp_dnd_get_tool_icon (GtkWidget *widget,
if (((gint) tool_type < 0) || ((gint) tool_type >= num_tools))
return NULL;
tool_pixmap = create_tool_pixmap (widget, tool_type);
tool_icon = gtk_pixmap_new (tool_pixmap, NULL);
gdk_pixmap_unref (tool_pixmap);
tool_icon = gtk_pixmap_new (tool_get_pixmap (tool_type), NULL);
return tool_icon;
}

View File

@ -735,7 +735,6 @@ void
device_status_create (void)
{
DeviceInfo *device_info;
GdkPixmap *pixmap;
GtkWidget *label;
GList *list;
gint i;
@ -815,9 +814,7 @@ device_status_create (void)
deviceD->eventboxes[i] = gtk_event_box_new();
pixmap = create_tool_pixmap (deviceD->table, RECT_SELECT);
deviceD->tools[i] = gtk_pixmap_new (pixmap, NULL);
gdk_pixmap_unref (pixmap);
deviceD->tools[i] = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_drag_source_set (deviceD->eventboxes[i],
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -984,7 +981,6 @@ device_status_update_current (void)
void
device_status_update (guint32 deviceid)
{
GdkPixmap *pixmap;
GdkDeviceInfo *gdk_info;
DeviceInfo *device_info;
guchar buffer[CELL_SIZE*3];
@ -1022,10 +1018,9 @@ device_status_update (guint32 deviceid)
{
gtk_widget_show (deviceD->frames[i]);
pixmap = create_tool_pixmap (deviceD->table,
gimp_context_get_tool (device_info->context));
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]), pixmap, NULL);
gdk_pixmap_unref (pixmap);
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]),
tool_get_pixmap (gimp_context_get_tool (device_info->context)),
NULL);
gtk_widget_draw (deviceD->tools[i], NULL);
gtk_widget_show (deviceD->tools[i]);

View File

@ -735,7 +735,6 @@ void
device_status_create (void)
{
DeviceInfo *device_info;
GdkPixmap *pixmap;
GtkWidget *label;
GList *list;
gint i;
@ -815,9 +814,7 @@ device_status_create (void)
deviceD->eventboxes[i] = gtk_event_box_new();
pixmap = create_tool_pixmap (deviceD->table, RECT_SELECT);
deviceD->tools[i] = gtk_pixmap_new (pixmap, NULL);
gdk_pixmap_unref (pixmap);
deviceD->tools[i] = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_drag_source_set (deviceD->eventboxes[i],
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -984,7 +981,6 @@ device_status_update_current (void)
void
device_status_update (guint32 deviceid)
{
GdkPixmap *pixmap;
GdkDeviceInfo *gdk_info;
DeviceInfo *device_info;
guchar buffer[CELL_SIZE*3];
@ -1022,10 +1018,9 @@ device_status_update (guint32 deviceid)
{
gtk_widget_show (deviceD->frames[i]);
pixmap = create_tool_pixmap (deviceD->table,
gimp_context_get_tool (device_info->context));
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]), pixmap, NULL);
gdk_pixmap_unref (pixmap);
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]),
tool_get_pixmap (gimp_context_get_tool (device_info->context)),
NULL);
gtk_widget_draw (deviceD->tools[i], NULL);
gtk_widget_show (deviceD->tools[i]);

View File

@ -50,6 +50,7 @@
#include "libgimp/gimpintl.h"
/* local functions */
static void tools_select_update (GtkWidget *widget,
gpointer data);
@ -312,29 +313,32 @@ create_color_area (GtkWidget *parent)
gtk_widget_show (frame);
}
GdkPixmap *
create_tool_pixmap (GtkWidget *parent,
ToolType type)
/* creates all icons */
static void
create_tool_pixmaps (GtkWidget *parent)
{
/*
* FIXME this really should be dones without using the #defined tool names
* but it should work this way for now
*/
if (type == SCALE || type == SHEAR || type == PERSPECTIVE)
type = ROTATE;
ToolType type;
gint i;
if (tool_info[(int) type].icon_data)
return create_pixmap (parent->window, NULL,
tool_info[(int) type].icon_data,
22, 22);
else
return create_pixmap (parent->window, NULL,
dialog_bits,
22, 22);
g_return_if_fail (parent != NULL);
g_return_val_if_fail (FALSE, NULL);
for (i = 0; i < num_tools; i++)
{
type = i;
return NULL; /* not reached */
if (type == SCALE || type == SHEAR || type == PERSPECTIVE)
type = ROTATE;
if (tool_info[type].icon_data)
tool_info[i].icon_pixmap = create_pixmap (parent->window, NULL,
tool_info[type].icon_data,
22, 22);
else
tool_info[i].icon_pixmap = create_pixmap (parent->window, NULL,
dialog_bits,
22, 22);
}
}
static void
@ -350,6 +354,8 @@ create_tools (GtkWidget *parent)
wbox = parent;
gtk_widget_realize (gtk_widget_get_toplevel (wbox));
create_tool_pixmaps (wbox);
group = NULL;
@ -371,7 +377,7 @@ create_tools (GtkWidget *parent)
gtk_container_set_border_width (GTK_CONTAINER (alignment), 0);
gtk_container_add (GTK_CONTAINER (button), alignment);
pixmap = create_pixmap_widget (wbox->window, tool_info[j].icon_data, 22, 22);
pixmap = gtk_pixmap_new (tool_get_pixmap ((ToolType)j), NULL);
gtk_container_add (GTK_CONTAINER (alignment), pixmap);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
@ -499,23 +505,6 @@ create_pixmap (GdkWindow *parent,
return pixmap;
}
GtkWidget*
create_pixmap_widget (GdkWindow *parent,
gchar **data,
gint width,
gint height)
{
GtkWidget *widget;
GdkPixmap *pixmap;
GdkBitmap *mask;
pixmap = create_pixmap (parent, &mask, data, width, height);
widget = gtk_pixmap_new (pixmap, mask);
gdk_pixmap_unref (pixmap);
gdk_bitmap_unref (mask);
return (widget);
}
void
create_toolbox (void)
@ -623,6 +612,9 @@ toolbox_free (void)
gtk_widget_destroy (toolbox_shell);
for (i = 0; i < num_tools; i++)
{
if (tool_info[i].icon_pixmap)
gdk_pixmap_unref (tool_info[i].icon_pixmap);
if (!tool_info[i].icon_data)
gtk_object_sink (GTK_OBJECT (tool_info[i].tool_widget));
}
@ -645,6 +637,13 @@ create_display_shell (GDisplay* gdisp,
{
static GtkWidget *image_popup_menu = NULL;
static GtkAccelGroup *image_accel_group = NULL;
static GdkPixmap *qmasksel_pixmap = NULL;
static GdkBitmap *qmasksel_mask = NULL;
static GdkPixmap *qmasknosel_pixmap = NULL;
static GdkBitmap *qmasknosel_mask = NULL;
static GdkPixmap *navbutton_pixmap = NULL;
static GdkBitmap *navbutton_mask = NULL;
GtkWidget *vbox;
GtkWidget *table;
@ -851,48 +850,37 @@ create_display_shell (GDisplay* gdisp,
gtk_widget_set_usize (GTK_WIDGET (gdisp->qmaskon), 15, 15);
gtk_widget_set_usize (GTK_WIDGET (gdisp->qmaskoff), 15, 15);
/* Draw pixmaps - note: you must realize the parent prior to doing the
/* Create pixmaps - note: you must realize the parent prior to doing the
rest! */
{
GdkPixmap *pxmp;
GdkBitmap *mask;
GtkStyle *style;
if (!qmasksel_pixmap)
{
GtkStyle *style;
gtk_widget_realize (gdisp->shell);
style = gtk_widget_get_style (gdisp->shell);
qmasksel_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &qmasksel_mask,
&style->bg[GTK_STATE_NORMAL],
qmasksel_xpm);
qmasknosel_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &qmasknosel_mask,
&style->bg[GTK_STATE_NORMAL],
qmasknosel_xpm);
navbutton_pixmap = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &navbutton_mask,
&style->bg[GTK_STATE_NORMAL],
navbutton_xpm);
}
gtk_widget_realize (gdisp->shell);
style = gtk_widget_get_style (gdisp->shell);
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
qmasksel_xpm);
pixmap = gtk_pixmap_new (qmasksel_pixmap, qmasksel_mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
gtk_widget_show (pixmap);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskon), pixmap);
gtk_widget_show (pixmap);
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
qmasknosel_xpm);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
pixmap = gtk_pixmap_new (qmasknosel_pixmap, qmasknosel_mask);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
gtk_widget_show (pixmap);
gtk_container_add (GTK_CONTAINER (gdisp->qmaskoff), pixmap);
gtk_widget_show (pixmap);
/* nav button pixmap */
pxmp = gdk_pixmap_create_from_xpm_d (gdisp->shell->window, &mask,
&style->bg[GTK_STATE_NORMAL],
navbutton_xpm);
pixmap = gtk_pixmap_new (pxmp, mask);
gdk_pixmap_unref (pxmp);
gdk_bitmap_unref (mask);
gtk_container_add (GTK_CONTAINER (navhbox), pixmap);
gtk_widget_show (pixmap);
}
pixmap = gtk_pixmap_new (navbutton_pixmap, navbutton_mask);
gtk_container_add (GTK_CONTAINER (navhbox), pixmap);
gtk_widget_show (pixmap);
gdisp->canvas = gtk_drawing_area_new ();
gtk_drawing_area_size (GTK_DRAWING_AREA (gdisp->canvas), n_width, n_height);

View File

@ -27,9 +27,6 @@ GtkWidget * create_pixmap_widget (GdkWindow *parent,
gint width,
gint height);
GdkPixmap * create_tool_pixmap (GtkWidget *parent,
ToolType type);
void create_toolbox (void);
void toolbox_free (void);

View File

@ -43,6 +43,7 @@
#include "fuzzy_select.h"
#include "histogram_tool.h"
#include "ink.h"
#include "interface.h"
#include "iscissors.h"
#include "levels.h"
#include "magnify.h"
@ -74,6 +75,7 @@ Tool * active_tool = NULL;
static GtkWidget * options_shell = NULL;
static GtkWidget * options_vbox = NULL;
static GtkWidget * options_label = NULL;
static GtkWidget * options_pixmap = NULL;
static GtkWidget * options_reset_button = NULL;
static gint global_tool_ID = 0;
@ -86,6 +88,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Rect Select"),
"R",
(char **) rect_bits,
NULL,
N_("Select rectangular regions"),
"tools/rect_select.html",
RECT_SELECT,
@ -102,6 +105,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Ellipse Select"),
"E",
(char **) circ_bits,
NULL,
N_("Select elliptical regions"),
"tools/ellipse_select.html",
ELLIPSE_SELECT,
@ -118,6 +122,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Free Select"),
"F",
(char **) free_bits,
NULL,
N_("Select hand-drawn regions"),
"tools/free_select.html",
FREE_SELECT,
@ -134,6 +139,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Fuzzy Select"),
"Z",
(char **) fuzzy_bits,
NULL,
N_("Select contiguous regions"),
"tools/fuzzy_select.html",
FUZZY_SELECT,
@ -150,6 +156,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Bezier Select"),
"B",
(char **) bezier_bits,
NULL,
N_("Select regions using Bezier curves"),
"tools/bezier_select.html",
BEZIER_SELECT,
@ -166,6 +173,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Intelligent Scissors"),
"I",
(char **) iscissors_bits,
NULL,
N_("Select shapes from image"),
"tools/intelligent_scissors.html",
ISCISSORS,
@ -182,6 +190,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Move"),
"M",
(char **) move_bits,
NULL,
N_("Move layers & selections"),
"tools/move.html",
MOVE,
@ -198,6 +207,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Magnify"),
"<shift>M",
(char **) magnify_bits,
NULL,
N_("Zoom in & out"),
"tools/magnify.html",
MAGNIFY,
@ -214,6 +224,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Crop & Resize"),
"<shift>C",
(char **) crop_bits,
NULL,
N_("Crop or resize the image"),
"tools/crop.html",
CROP,
@ -230,6 +241,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Transform"),
"<shift>T",
(char **) scale_bits,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
ROTATE,
@ -246,6 +258,7 @@ ToolInfo tool_info[] =
NULL,
NULL,
NULL,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
SCALE,
@ -262,6 +275,7 @@ ToolInfo tool_info[] =
NULL,
NULL,
NULL,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
SHEAR,
@ -278,6 +292,7 @@ ToolInfo tool_info[] =
NULL,
NULL,
NULL,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
PERSPECTIVE,
@ -294,6 +309,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Flip"),
"<shift>F",
(char **) flip_bits,
NULL,
N_("Flip the layer or selection"),
"tools/flip.html",
FLIP,
@ -310,6 +326,7 @@ ToolInfo tool_info[] =
N_("/Tools/Text"),
"T",
(char **) text_bits,
NULL,
N_("Add text to the image"),
"tools/text.html",
TEXT,
@ -326,6 +343,7 @@ ToolInfo tool_info[] =
N_("/Tools/Color Picker"),
"O",
(char **) colorpicker_bits,
NULL,
N_("Pick colors from the image"),
"tools/color_picker.html",
COLOR_PICKER,
@ -342,6 +360,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Bucket Fill"),
"<shift>B",
(char **) fill_bits,
NULL,
N_("Fill with a color or pattern"),
"tools/bucket_fill.html",
BUCKET_FILL,
@ -358,6 +377,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Blend"),
"L",
(char **) gradient_bits,
NULL,
N_("Fill with a color gradient"),
"tools/blend.html",
BLEND,
@ -374,6 +394,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Pencil"),
"<shift>P",
(char **) pencil_bits,
NULL,
N_("Draw sharp pencil strokes"),
"tools/pencil.html",
PENCIL,
@ -390,6 +411,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Paintbrush"),
"P",
(char **) paint_bits,
NULL,
N_("Paint fuzzy brush strokes"),
"tools/paintbrush.html",
PAINTBRUSH,
@ -406,6 +428,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Eraser"),
"<shift>E",
(char **) erase_bits,
NULL,
N_("Erase to background or transparency"),
"tools/eraser.html",
ERASER,
@ -422,6 +445,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Airbrush"),
"A",
(char **) airbrush_bits,
NULL,
N_("Airbrush with variable pressure"),
"tools/airbrush.html",
AIRBRUSH,
@ -438,6 +462,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Clone"),
"C",
(char **) clone_bits,
NULL,
N_("Paint using patterns or image regions"),
"tools/clone.html",
CLONE,
@ -454,6 +479,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Convolve"),
"V",
(char **) blur_bits,
NULL,
N_("Blur or sharpen"),
"tools/convolve.html",
CONVOLVE,
@ -470,6 +496,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Ink"),
"K",
(char **) ink_bits,
NULL,
N_("Draw in ink"),
"tools/ink.html",
INK,
@ -486,6 +513,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/DodgeBurn"),
"<shift>D",
(char **) dodge_bits,
NULL,
N_("Dodge or Burn"),
"tools/dodgeburn.html",
DODGEBURN,
@ -502,6 +530,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Smudge"),
"<shift>S",
(char **) smudge_bits,
NULL,
N_("Smudge"),
"tools/smudge.html",
SMUDGE,
@ -518,6 +547,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/XinputAirbrush"),
"<shift>A",
(char **) xinput_airbrush_bits,
NULL,
N_("Natural Airbrush"),
"tools/xinput_airbrush.html",
XINPUT_AIRBRUSH,
@ -534,6 +564,7 @@ ToolInfo tool_info[] =
N_("/Tools/Measure"),
"",
(char **) measure_bits,
NULL,
N_("Measure distances and angles"),
"tools/measure.html",
MEASURE,
@ -550,6 +581,7 @@ ToolInfo tool_info[] =
N_("/Tools/Path"),
"",
(char **) path_tool_bits,
NULL,
N_("Manipulate paths"),
"tools/path.html",
PATH_TOOL,
@ -568,6 +600,7 @@ ToolInfo tool_info[] =
N_("/Select/By Color..."),
NULL,
NULL,
NULL,
N_("Select regions by color"),
"tools/by_color_select.html",
BY_COLOR_SELECT,
@ -584,6 +617,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Color Balance..."),
NULL,
NULL,
NULL,
N_("Adjust color balance"),
"tools/color_balance.html",
COLOR_BALANCE,
@ -600,6 +634,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Brightness-Contrast..."),
NULL,
NULL,
NULL,
N_("Adjust brightness and contrast"),
"tools/brightness_contrast.html",
BRIGHTNESS_CONTRAST,
@ -616,6 +651,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Hue-Saturation..."),
NULL,
NULL,
NULL,
N_("Adjust hue and saturation"),
"tools/hue_saturation.html",
HUE_SATURATION,
@ -632,6 +668,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Posterize..."),
NULL,
NULL,
NULL,
N_("Reduce image to a fixed numer of colors"),
"tools/posterize.html",
POSTERIZE,
@ -648,6 +685,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Threshold..."),
NULL,
NULL,
NULL,
N_("Reduce image to two colors using a threshold"),
"tools/threshold.html",
THRESHOLD,
@ -664,6 +702,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Curves..."),
NULL,
NULL,
NULL,
N_("Adjust color curves"),
"tools/curves.html",
CURVES,
@ -680,6 +719,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Levels..."),
NULL,
NULL,
NULL,
N_("Adjust color levels"),
"tools/levels.html",
LEVELS,
@ -696,6 +736,7 @@ ToolInfo tool_info[] =
N_("/Image/Histogram..."),
NULL,
NULL,
NULL,
N_("View image histogram"),
"tools/histogram.html",
HISTOGRAM,
@ -785,6 +826,7 @@ tools_initialize (ToolType tool_type,
/* don't set gdisp_ptr here! (see commands.c) */
}
void
active_tool_control (ToolAction action,
void *gdisp_ptr)
@ -970,6 +1012,9 @@ tools_register (ToolType tool_type,
}
gtk_label_set_text (GTK_LABEL (options_label), tool_options->title);
gtk_pixmap_set (GTK_PIXMAP (options_pixmap), tool_get_pixmap (tool_type), NULL);
gtk_widget_queue_draw (options_pixmap);
}
/* Tool options function */
@ -978,6 +1023,7 @@ void
tool_options_dialog_new (void)
{
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *vbox;
/* The shell and main vbox */
@ -1017,9 +1063,16 @@ tool_options_dialog_new (void)
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
hbox = gtk_hbox_new (FALSE, 4);
gtk_container_add (GTK_CONTAINER (frame), hbox);
gtk_widget_show (hbox);
options_pixmap = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_box_pack_start (GTK_BOX (hbox), options_pixmap, FALSE, FALSE, 0);
gtk_widget_show (options_pixmap);
options_label = gtk_label_new ("");
gtk_misc_set_padding (GTK_MISC (options_label), 1, 0);
gtk_container_add (GTK_CONTAINER (frame), options_label);
gtk_box_pack_start (GTK_BOX (hbox), options_label, FALSE, FALSE, 1);
gtk_widget_show (options_label);
options_vbox = gtk_vbox_new (FALSE, 0);
@ -1071,6 +1124,9 @@ tool_options_show (ToolType tool_type)
gtk_label_set_text (GTK_LABEL (options_label),
tool_info[tool_type].tool_options->title);
gtk_pixmap_set (GTK_PIXMAP (options_pixmap), tool_get_pixmap (tool_type), NULL);
gtk_widget_queue_draw (options_pixmap);
if (tool_info[tool_type].tool_options->reset_func)
gtk_widget_set_sensitive (options_reset_button, TRUE);
else
@ -1163,3 +1219,9 @@ tool_active_PDB_string (void)
return toolStr;
}
GdkPixmap *
tool_get_pixmap (ToolType type)
{
return (tool_info[type].icon_pixmap);
}

View File

@ -88,15 +88,16 @@ struct _ToolInfo
{
ToolOptions *tool_options;
gchar *tool_name;
gchar *tool_name;
gchar *menu_path;
gchar *menu_accel;
gchar *menu_path;
gchar *menu_accel;
gchar **icon_data;
gchar **icon_data;
GdkPixmap *icon_pixmap;
gchar *tool_desc;
gchar *private_tip;
gchar *tool_desc;
gchar *private_tip;
ToolType tool_id;
@ -104,7 +105,7 @@ struct _ToolInfo
ToolInfoFreeFunc free_func;
ToolInfoInitFunc init_func;
GtkWidget *tool_widget;
GtkWidget *tool_widget;
GimpContext *tool_context;
};
@ -135,4 +136,11 @@ void tool_options_dialog_free (void);
gchar * tool_active_PDB_string (void);
/* don't unref this pixmap, it is static! */
GdkPixmap * tool_get_pixmap (ToolType tool_type);
#endif /* __TOOLS_H__ */

View File

@ -43,6 +43,7 @@
#include "fuzzy_select.h"
#include "histogram_tool.h"
#include "ink.h"
#include "interface.h"
#include "iscissors.h"
#include "levels.h"
#include "magnify.h"
@ -74,6 +75,7 @@ Tool * active_tool = NULL;
static GtkWidget * options_shell = NULL;
static GtkWidget * options_vbox = NULL;
static GtkWidget * options_label = NULL;
static GtkWidget * options_pixmap = NULL;
static GtkWidget * options_reset_button = NULL;
static gint global_tool_ID = 0;
@ -86,6 +88,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Rect Select"),
"R",
(char **) rect_bits,
NULL,
N_("Select rectangular regions"),
"tools/rect_select.html",
RECT_SELECT,
@ -102,6 +105,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Ellipse Select"),
"E",
(char **) circ_bits,
NULL,
N_("Select elliptical regions"),
"tools/ellipse_select.html",
ELLIPSE_SELECT,
@ -118,6 +122,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Free Select"),
"F",
(char **) free_bits,
NULL,
N_("Select hand-drawn regions"),
"tools/free_select.html",
FREE_SELECT,
@ -134,6 +139,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Fuzzy Select"),
"Z",
(char **) fuzzy_bits,
NULL,
N_("Select contiguous regions"),
"tools/fuzzy_select.html",
FUZZY_SELECT,
@ -150,6 +156,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Bezier Select"),
"B",
(char **) bezier_bits,
NULL,
N_("Select regions using Bezier curves"),
"tools/bezier_select.html",
BEZIER_SELECT,
@ -166,6 +173,7 @@ ToolInfo tool_info[] =
N_("/Tools/Select Tools/Intelligent Scissors"),
"I",
(char **) iscissors_bits,
NULL,
N_("Select shapes from image"),
"tools/intelligent_scissors.html",
ISCISSORS,
@ -182,6 +190,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Move"),
"M",
(char **) move_bits,
NULL,
N_("Move layers & selections"),
"tools/move.html",
MOVE,
@ -198,6 +207,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Magnify"),
"<shift>M",
(char **) magnify_bits,
NULL,
N_("Zoom in & out"),
"tools/magnify.html",
MAGNIFY,
@ -214,6 +224,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Crop & Resize"),
"<shift>C",
(char **) crop_bits,
NULL,
N_("Crop or resize the image"),
"tools/crop.html",
CROP,
@ -230,6 +241,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Transform"),
"<shift>T",
(char **) scale_bits,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
ROTATE,
@ -246,6 +258,7 @@ ToolInfo tool_info[] =
NULL,
NULL,
NULL,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
SCALE,
@ -262,6 +275,7 @@ ToolInfo tool_info[] =
NULL,
NULL,
NULL,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
SHEAR,
@ -278,6 +292,7 @@ ToolInfo tool_info[] =
NULL,
NULL,
NULL,
NULL,
N_("Rotation, scaling, shearing, perspective."),
"tools/transform.html",
PERSPECTIVE,
@ -294,6 +309,7 @@ ToolInfo tool_info[] =
N_("/Tools/Transform Tools/Flip"),
"<shift>F",
(char **) flip_bits,
NULL,
N_("Flip the layer or selection"),
"tools/flip.html",
FLIP,
@ -310,6 +326,7 @@ ToolInfo tool_info[] =
N_("/Tools/Text"),
"T",
(char **) text_bits,
NULL,
N_("Add text to the image"),
"tools/text.html",
TEXT,
@ -326,6 +343,7 @@ ToolInfo tool_info[] =
N_("/Tools/Color Picker"),
"O",
(char **) colorpicker_bits,
NULL,
N_("Pick colors from the image"),
"tools/color_picker.html",
COLOR_PICKER,
@ -342,6 +360,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Bucket Fill"),
"<shift>B",
(char **) fill_bits,
NULL,
N_("Fill with a color or pattern"),
"tools/bucket_fill.html",
BUCKET_FILL,
@ -358,6 +377,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Blend"),
"L",
(char **) gradient_bits,
NULL,
N_("Fill with a color gradient"),
"tools/blend.html",
BLEND,
@ -374,6 +394,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Pencil"),
"<shift>P",
(char **) pencil_bits,
NULL,
N_("Draw sharp pencil strokes"),
"tools/pencil.html",
PENCIL,
@ -390,6 +411,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Paintbrush"),
"P",
(char **) paint_bits,
NULL,
N_("Paint fuzzy brush strokes"),
"tools/paintbrush.html",
PAINTBRUSH,
@ -406,6 +428,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Eraser"),
"<shift>E",
(char **) erase_bits,
NULL,
N_("Erase to background or transparency"),
"tools/eraser.html",
ERASER,
@ -422,6 +445,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Airbrush"),
"A",
(char **) airbrush_bits,
NULL,
N_("Airbrush with variable pressure"),
"tools/airbrush.html",
AIRBRUSH,
@ -438,6 +462,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Clone"),
"C",
(char **) clone_bits,
NULL,
N_("Paint using patterns or image regions"),
"tools/clone.html",
CLONE,
@ -454,6 +479,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Convolve"),
"V",
(char **) blur_bits,
NULL,
N_("Blur or sharpen"),
"tools/convolve.html",
CONVOLVE,
@ -470,6 +496,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Ink"),
"K",
(char **) ink_bits,
NULL,
N_("Draw in ink"),
"tools/ink.html",
INK,
@ -486,6 +513,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/DodgeBurn"),
"<shift>D",
(char **) dodge_bits,
NULL,
N_("Dodge or Burn"),
"tools/dodgeburn.html",
DODGEBURN,
@ -502,6 +530,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/Smudge"),
"<shift>S",
(char **) smudge_bits,
NULL,
N_("Smudge"),
"tools/smudge.html",
SMUDGE,
@ -518,6 +547,7 @@ ToolInfo tool_info[] =
N_("/Tools/Paint Tools/XinputAirbrush"),
"<shift>A",
(char **) xinput_airbrush_bits,
NULL,
N_("Natural Airbrush"),
"tools/xinput_airbrush.html",
XINPUT_AIRBRUSH,
@ -534,6 +564,7 @@ ToolInfo tool_info[] =
N_("/Tools/Measure"),
"",
(char **) measure_bits,
NULL,
N_("Measure distances and angles"),
"tools/measure.html",
MEASURE,
@ -550,6 +581,7 @@ ToolInfo tool_info[] =
N_("/Tools/Path"),
"",
(char **) path_tool_bits,
NULL,
N_("Manipulate paths"),
"tools/path.html",
PATH_TOOL,
@ -568,6 +600,7 @@ ToolInfo tool_info[] =
N_("/Select/By Color..."),
NULL,
NULL,
NULL,
N_("Select regions by color"),
"tools/by_color_select.html",
BY_COLOR_SELECT,
@ -584,6 +617,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Color Balance..."),
NULL,
NULL,
NULL,
N_("Adjust color balance"),
"tools/color_balance.html",
COLOR_BALANCE,
@ -600,6 +634,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Brightness-Contrast..."),
NULL,
NULL,
NULL,
N_("Adjust brightness and contrast"),
"tools/brightness_contrast.html",
BRIGHTNESS_CONTRAST,
@ -616,6 +651,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Hue-Saturation..."),
NULL,
NULL,
NULL,
N_("Adjust hue and saturation"),
"tools/hue_saturation.html",
HUE_SATURATION,
@ -632,6 +668,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Posterize..."),
NULL,
NULL,
NULL,
N_("Reduce image to a fixed numer of colors"),
"tools/posterize.html",
POSTERIZE,
@ -648,6 +685,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Threshold..."),
NULL,
NULL,
NULL,
N_("Reduce image to two colors using a threshold"),
"tools/threshold.html",
THRESHOLD,
@ -664,6 +702,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Curves..."),
NULL,
NULL,
NULL,
N_("Adjust color curves"),
"tools/curves.html",
CURVES,
@ -680,6 +719,7 @@ ToolInfo tool_info[] =
N_("/Image/Colors/Levels..."),
NULL,
NULL,
NULL,
N_("Adjust color levels"),
"tools/levels.html",
LEVELS,
@ -696,6 +736,7 @@ ToolInfo tool_info[] =
N_("/Image/Histogram..."),
NULL,
NULL,
NULL,
N_("View image histogram"),
"tools/histogram.html",
HISTOGRAM,
@ -785,6 +826,7 @@ tools_initialize (ToolType tool_type,
/* don't set gdisp_ptr here! (see commands.c) */
}
void
active_tool_control (ToolAction action,
void *gdisp_ptr)
@ -970,6 +1012,9 @@ tools_register (ToolType tool_type,
}
gtk_label_set_text (GTK_LABEL (options_label), tool_options->title);
gtk_pixmap_set (GTK_PIXMAP (options_pixmap), tool_get_pixmap (tool_type), NULL);
gtk_widget_queue_draw (options_pixmap);
}
/* Tool options function */
@ -978,6 +1023,7 @@ void
tool_options_dialog_new (void)
{
GtkWidget *frame;
GtkWidget *hbox;
GtkWidget *vbox;
/* The shell and main vbox */
@ -1017,9 +1063,16 @@ tool_options_dialog_new (void)
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
hbox = gtk_hbox_new (FALSE, 4);
gtk_container_add (GTK_CONTAINER (frame), hbox);
gtk_widget_show (hbox);
options_pixmap = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_box_pack_start (GTK_BOX (hbox), options_pixmap, FALSE, FALSE, 0);
gtk_widget_show (options_pixmap);
options_label = gtk_label_new ("");
gtk_misc_set_padding (GTK_MISC (options_label), 1, 0);
gtk_container_add (GTK_CONTAINER (frame), options_label);
gtk_box_pack_start (GTK_BOX (hbox), options_label, FALSE, FALSE, 1);
gtk_widget_show (options_label);
options_vbox = gtk_vbox_new (FALSE, 0);
@ -1071,6 +1124,9 @@ tool_options_show (ToolType tool_type)
gtk_label_set_text (GTK_LABEL (options_label),
tool_info[tool_type].tool_options->title);
gtk_pixmap_set (GTK_PIXMAP (options_pixmap), tool_get_pixmap (tool_type), NULL);
gtk_widget_queue_draw (options_pixmap);
if (tool_info[tool_type].tool_options->reset_func)
gtk_widget_set_sensitive (options_reset_button, TRUE);
else
@ -1163,3 +1219,9 @@ tool_active_PDB_string (void)
return toolStr;
}
GdkPixmap *
tool_get_pixmap (ToolType type)
{
return (tool_info[type].icon_pixmap);
}

View File

@ -88,15 +88,16 @@ struct _ToolInfo
{
ToolOptions *tool_options;
gchar *tool_name;
gchar *tool_name;
gchar *menu_path;
gchar *menu_accel;
gchar *menu_path;
gchar *menu_accel;
gchar **icon_data;
gchar **icon_data;
GdkPixmap *icon_pixmap;
gchar *tool_desc;
gchar *private_tip;
gchar *tool_desc;
gchar *private_tip;
ToolType tool_id;
@ -104,7 +105,7 @@ struct _ToolInfo
ToolInfoFreeFunc free_func;
ToolInfoInitFunc init_func;
GtkWidget *tool_widget;
GtkWidget *tool_widget;
GimpContext *tool_context;
};
@ -135,4 +136,11 @@ void tool_options_dialog_free (void);
gchar * tool_active_PDB_string (void);
/* don't unref this pixmap, it is static! */
GdkPixmap * tool_get_pixmap (ToolType tool_type);
#endif /* __TOOLS_H__ */

View File

@ -735,7 +735,6 @@ void
device_status_create (void)
{
DeviceInfo *device_info;
GdkPixmap *pixmap;
GtkWidget *label;
GList *list;
gint i;
@ -815,9 +814,7 @@ device_status_create (void)
deviceD->eventboxes[i] = gtk_event_box_new();
pixmap = create_tool_pixmap (deviceD->table, RECT_SELECT);
deviceD->tools[i] = gtk_pixmap_new (pixmap, NULL);
gdk_pixmap_unref (pixmap);
deviceD->tools[i] = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_drag_source_set (deviceD->eventboxes[i],
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -984,7 +981,6 @@ device_status_update_current (void)
void
device_status_update (guint32 deviceid)
{
GdkPixmap *pixmap;
GdkDeviceInfo *gdk_info;
DeviceInfo *device_info;
guchar buffer[CELL_SIZE*3];
@ -1022,10 +1018,9 @@ device_status_update (guint32 deviceid)
{
gtk_widget_show (deviceD->frames[i]);
pixmap = create_tool_pixmap (deviceD->table,
gimp_context_get_tool (device_info->context));
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]), pixmap, NULL);
gdk_pixmap_unref (pixmap);
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]),
tool_get_pixmap (gimp_context_get_tool (device_info->context)),
NULL);
gtk_widget_draw (deviceD->tools[i], NULL);
gtk_widget_show (deviceD->tools[i]);

View File

@ -735,7 +735,6 @@ void
device_status_create (void)
{
DeviceInfo *device_info;
GdkPixmap *pixmap;
GtkWidget *label;
GList *list;
gint i;
@ -815,9 +814,7 @@ device_status_create (void)
deviceD->eventboxes[i] = gtk_event_box_new();
pixmap = create_tool_pixmap (deviceD->table, RECT_SELECT);
deviceD->tools[i] = gtk_pixmap_new (pixmap, NULL);
gdk_pixmap_unref (pixmap);
deviceD->tools[i] = gtk_pixmap_new (tool_get_pixmap (RECT_SELECT), NULL);
gtk_drag_source_set (deviceD->eventboxes[i],
GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
@ -984,7 +981,6 @@ device_status_update_current (void)
void
device_status_update (guint32 deviceid)
{
GdkPixmap *pixmap;
GdkDeviceInfo *gdk_info;
DeviceInfo *device_info;
guchar buffer[CELL_SIZE*3];
@ -1022,10 +1018,9 @@ device_status_update (guint32 deviceid)
{
gtk_widget_show (deviceD->frames[i]);
pixmap = create_tool_pixmap (deviceD->table,
gimp_context_get_tool (device_info->context));
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]), pixmap, NULL);
gdk_pixmap_unref (pixmap);
gtk_pixmap_set (GTK_PIXMAP (deviceD->tools[i]),
tool_get_pixmap (gimp_context_get_tool (device_info->context)),
NULL);
gtk_widget_draw (deviceD->tools[i], NULL);
gtk_widget_show (deviceD->tools[i]);

View File

@ -939,7 +939,6 @@ gimp_dnd_get_tool_icon (GtkWidget *widget,
GtkSignalFunc get_tool_func,
gpointer get_tool_data)
{
GdkPixmap *tool_pixmap;
GtkWidget *tool_icon;
ToolType tool_type;
@ -949,11 +948,7 @@ gimp_dnd_get_tool_icon (GtkWidget *widget,
if (((gint) tool_type < 0) || ((gint) tool_type >= num_tools))
return NULL;
tool_pixmap = create_tool_pixmap (widget, tool_type);
tool_icon = gtk_pixmap_new (tool_pixmap, NULL);
gdk_pixmap_unref (tool_pixmap);
tool_icon = gtk_pixmap_new (tool_get_pixmap (tool_type), NULL);
return tool_icon;
}