gimp r25894 - in trunk: . plug-ins/common
- From: neo svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r25894 - in trunk: . plug-ins/common
- Date: Wed, 4 Jun 2008 19:45:44 +0000 (UTC)
Author: neo
Date: Wed Jun 4 19:45:43 2008
New Revision: 25894
URL: http://svn.gnome.org/viewvc/gimp?rev=25894&view=rev
Log:
2008-06-04 Sven Neumann <sven gimp org>
* plug-ins/common/tga.c: changed user interface for specifying
the
origin. Fixed header for origin at top-left (bug #450070).
Modified:
trunk/ChangeLog
trunk/plug-ins/common/tga.c
Modified: trunk/plug-ins/common/tga.c
==============================================================================
--- trunk/plug-ins/common/tga.c (original)
+++ trunk/plug-ins/common/tga.c Wed Jun 4 19:45:43 2008
@@ -97,17 +97,22 @@
#define SAVE_PROC "file-tga-save"
#define PLUG_IN_BINARY "tga"
+typedef enum
+{
+ ORIGIN_TOP_LEFT = 0,
+ ORIGIN_BOTTOM_LEFT = 1
+} TgaOrigin;
typedef struct _TgaSaveVals
{
- gint rle;
- gint origin;
+ gboolean rle;
+ TgaOrigin origin;
} TgaSaveVals;
static TgaSaveVals tsvals =
{
- 1, /* rle = ON */
- 1, /* origin = bottom left */
+ TRUE, /* rle */
+ ORIGIN_BOTTOM_LEFT /* origin */
};
@@ -467,28 +472,28 @@
switch (header[2])
{
case 1:
- info.imageType = TGA_TYPE_MAPPED;
+ info.imageType = TGA_TYPE_MAPPED;
info.imageCompression = TGA_COMP_NONE;
break;
case 2:
- info.imageType = TGA_TYPE_COLOR;
+ info.imageType = TGA_TYPE_COLOR;
info.imageCompression = TGA_COMP_NONE;
break;
case 3:
- info.imageType = TGA_TYPE_GRAY;
+ info.imageType = TGA_TYPE_GRAY;
info.imageCompression = TGA_COMP_NONE;
break;
case 9:
- info.imageType = TGA_TYPE_MAPPED;
+ info.imageType = TGA_TYPE_MAPPED;
info.imageCompression = TGA_COMP_RLE;
break;
case 10:
- info.imageType = TGA_TYPE_COLOR;
+ info.imageType = TGA_TYPE_COLOR;
info.imageCompression = TGA_COMP_RLE;
break;
case 11:
- info.imageType = TGA_TYPE_GRAY;
+ info.imageType = TGA_TYPE_GRAY;
info.imageCompression = TGA_COMP_RLE;
break;
@@ -1058,8 +1063,8 @@
read_line (fp, row, buffer, info, drawable, convert_cmap);
}
- gimp_progress_update ((double) (i + tileheight) /
- (double) info->height);
+ gimp_progress_update ((gdouble) (i + tileheight) /
+ (gdouble) info->height);
gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0,
info->height - i - tileheight,
info->width, tileheight);
@@ -1077,8 +1082,8 @@
read_line (fp, row, buffer, info, drawable, convert_cmap);
}
- gimp_progress_update ((double) (i + tileheight) /
- (double) info->height);
+ gimp_progress_update ((gdouble) (i + tileheight) /
+ (gdouble) info->height);
gimp_pixel_rgn_set_rect (&pixel_rgn, data, 0, i,
info->width, tileheight);
}
@@ -1178,8 +1183,8 @@
header[3] = header[4] = header[5] = header[6] = header[7] = 0;
}
- header[8] = header[9] = 0; /* xorigin */
- header[10] = header[11] = 0; /* yorigin */
+ header[8] = header[9] = 0; /* xorigin */
+ header[10] = header[11] = tsvals.origin ? 0 : height; /* yorigin */
header[12] = width % 256;
header[13] = width / 256;
@@ -1194,25 +1199,25 @@
case GIMP_INDEXEDA_IMAGE:
out_bpp = 1;
header[16] = 8; /* bpp */
- header[17] = (tsvals.origin) ? 0 : 0x20; /* alpha + orientation */
+ header[17] = tsvals.origin ? 0 : 0x20; /* alpha + orientation */
break;
case GIMP_GRAYA_IMAGE:
out_bpp = 2;
header[16] = 16; /* bpp */
- header[17] = (tsvals.origin) ? 8 : 0x28; /* alpha + orientation */
+ header[17] = tsvals.origin ? 8 : 0x28; /* alpha + orientation */
break;
case GIMP_RGB_IMAGE:
out_bpp = 3;
header[16] = 24; /* bpp */
- header[17] = (tsvals.origin) ? 0 : 0x20; /* alpha + orientation */
+ header[17] = tsvals.origin ? 0 : 0x20; /* alpha + orientation */
break;
case GIMP_RGBA_IMAGE:
out_bpp = 4;
header[16] = 32; /* bpp */
- header[17] = (tsvals.origin) ? 8 : 0x28; /* alpha + orientation */
+ header[17] = tsvals.origin ? 8 : 0x28; /* alpha + orientation */
break;
}
@@ -1239,6 +1244,7 @@
fputc (gimp_cmap[(i * 3) + 0], fp);
fputc (255, fp);
}
+
fputc (0, fp);
fputc (0, fp);
fputc (0, fp);
@@ -1256,11 +1262,13 @@
{
if (tsvals.origin)
{
- gimp_pixel_rgn_get_row (&pixel_rgn, pixels, 0, height-(row+1), width);
+ gimp_pixel_rgn_get_row (&pixel_rgn,
+ pixels, 0, height - (row + 1), width);
}
else
{
- gimp_pixel_rgn_get_row (&pixel_rgn, pixels, 0, row, width);
+ gimp_pixel_rgn_get_row (&pixel_rgn,
+ pixels, 0, row, width);
}
if (dtype == GIMP_RGB_IMAGE)
@@ -1295,11 +1303,14 @@
fwrite (data, width * out_bpp, 1, fp);
}
- gimp_progress_update ((gdouble) row / (gdouble) height);
+ if (row % 16 == 0)
+ gimp_progress_update ((gdouble) row / (gdouble) height);
}
gimp_drawable_detach (drawable);
+
g_free (data);
+ g_free (pixels);
/* footer must be the last thing written to file */
memset (footer, 0, 8); /* No extensions, no developer directory */
@@ -1315,9 +1326,11 @@
save_dialog (void)
{
GtkWidget *dialog;
+ GtkWidget *label;
GtkWidget *toggle;
- GtkWidget *origin;
+ GtkWidget *combo;
GtkWidget *vbox;
+ GtkWidget *hbox;
gboolean run;
dialog = gimp_dialog_new (_("Save as TGA"), PLUG_IN_BINARY,
@@ -1353,14 +1366,26 @@
&tsvals.rle);
/* origin */
- origin = gtk_check_button_new_with_mnemonic (_("Or_igin at bottom left"));
- gtk_box_pack_start (GTK_BOX (vbox), origin, FALSE, FALSE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (origin), tsvals.origin);
- gtk_widget_show (origin);
-
- g_signal_connect (origin, "toggled",
- G_CALLBACK (gimp_toggle_button_update),
- &tsvals.origin);
+ hbox = gtk_hbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new_with_mnemonic (_("Or_igin:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ combo = gimp_int_combo_box_new (_("Bottom left"), ORIGIN_BOTTOM_LEFT,
+ _("Top left"), ORIGIN_TOP_LEFT,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), combo, TRUE, TRUE, 0);
+ gtk_widget_show (combo);
+
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
+
+ gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
+ tsvals.origin,
+ G_CALLBACK (gimp_int_combo_box_get_active),
+ &tsvals.origin);
gtk_widget_show (dialog);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]