ported to GimpPreviewArea.

* plug-ins/common/tileit.c: ported to GimpPreviewArea.
This commit is contained in:
David Odin
2004-08-01 21:59:13 +00:00
parent c5f67ae992
commit e62343c737
2 changed files with 170 additions and 195 deletions

View File

@ -1,3 +1,7 @@
2004-08-01 DindinX <david@dindinx.org>
* plug-ins/common/tileit.c: ported to GimpPreviewArea.
2004-08-01 DindinX <david@dindinx.org> 2004-08-01 DindinX <david@dindinx.org>
* plug-ins/common/sinus.c: ported to GimpPreviewArea. * plug-ins/common/sinus.c: ported to GimpPreviewArea.

View File

@ -64,7 +64,7 @@
#define PREVIEW_MASK GDK_EXPOSURE_MASK | \ #define PREVIEW_MASK GDK_EXPOSURE_MASK | \
GDK_BUTTON_PRESS_MASK | \ GDK_BUTTON_PRESS_MASK | \
GDK_BUTTON_MOTION_MASK GDK_BUTTON_MOTION_MASK
/* Variables set in dialog box */ /* Variables set in dialog box */
typedef struct data typedef struct data
@ -96,25 +96,25 @@ static gint img_bpp;
static void query (void); static void query (void);
static void run (const gchar *name, static void run (const gchar *name,
gint nparams, gint nparams,
const GimpParam *param, const GimpParam *param,
gint *nreturn_vals, gint *nreturn_vals,
GimpParam **return_vals); GimpParam **return_vals);
static gboolean tileit_dialog (void); static gboolean tileit_dialog (void);
static void tileit_scale_update (GtkAdjustment *adjustment, static void tileit_scale_update (GtkAdjustment *adjustment,
gpointer data); gpointer data);
static void tileit_exp_update (GtkWidget *widget, gpointer value); static void tileit_exp_update (GtkWidget *widget, gpointer value);
static void tileit_exp_update_f (GtkWidget *widget, gpointer value); static void tileit_exp_update_f (GtkWidget *widget, gpointer value);
static void tileit_reset (GtkWidget *widget, static void tileit_reset (GtkWidget *widget,
gpointer value); gpointer value);
static void tileit_radio_update (GtkWidget *widget, static void tileit_radio_update (GtkWidget *widget,
gpointer data); gpointer data);
static void tileit_hvtoggle_update (GtkWidget *widget, static void tileit_hvtoggle_update (GtkWidget *widget,
gpointer data); gpointer data);
static void do_tiles (void); static void do_tiles (void);
static gint tiles_xy (gint width, gint height,gint x,gint y,gint *nx,gint *ny); static gint tiles_xy (gint width, gint height,gint x,gint y,gint *nx,gint *ny);
@ -123,11 +123,11 @@ static void alt_update (void);
static void explict_update (gboolean); static void explict_update (gboolean);
static void dialog_update_preview (void); static void dialog_update_preview (void);
static void cache_preview (void); static void cache_preview (void);
static gint tileit_preview_expose (GtkWidget *widget, static gint tileit_preview_expose (GtkWidget *widget,
GdkEvent *event); GdkEvent *event);
static gint tileit_preview_events (GtkWidget *widget, static gint tileit_preview_events (GtkWidget *widget,
GdkEvent *event); GdkEvent *event);
GimpPlugInInfo PLUG_IN_INFO = GimpPlugInInfo PLUG_IN_INFO =
@ -201,10 +201,10 @@ static gint do_vert = FALSE;
static gint opacity = 100; static gint opacity = 100;
/* Stuff for the preview bit */ /* Stuff for the preview bit */
static gint sel_x1, sel_y1, sel_x2, sel_y2; static gint sel_x1, sel_y1, sel_x2, sel_y2;
static gint sel_width, sel_height; static gint sel_width, sel_height;
static gint preview_width, preview_height; static gint preview_width, preview_height;
static gboolean has_alpha; static gboolean has_alpha;
MAIN () MAIN ()
@ -220,16 +220,16 @@ query (void)
}; };
gimp_install_procedure ("plug_in_small_tiles", gimp_install_procedure ("plug_in_small_tiles",
"Tiles image into smaller versions of the orginal", "Tiles image into smaller versions of the orginal",
"More here later", "More here later",
"Andy Thomas", "Andy Thomas",
"Andy Thomas", "Andy Thomas",
"1997", "1997",
N_("_Small Tiles..."), N_("_Small Tiles..."),
"RGB*, GRAY*", "RGB*, GRAY*",
GIMP_PLUGIN, GIMP_PLUGIN,
G_N_ELEMENTS (args), 0, G_N_ELEMENTS (args), 0,
args, NULL); args, NULL);
gimp_plugin_menu_register ("plug_in_small_tiles", gimp_plugin_menu_register ("plug_in_small_tiles",
N_("<Image>/Filters/Map")); N_("<Image>/Filters/Map"));
@ -264,7 +264,7 @@ run (const gchar *name,
has_alpha = gimp_drawable_has_alpha (tileitdrawable->drawable_id); has_alpha = gimp_drawable_has_alpha (tileitdrawable->drawable_id);
gimp_drawable_mask_bounds (drawable->drawable_id, gimp_drawable_mask_bounds (drawable->drawable_id,
&sel_x1, &sel_y1, &sel_x2, &sel_y2); &sel_x1, &sel_y1, &sel_x2, &sel_y2);
sel_width = sel_x2 - sel_x1; sel_width = sel_x2 - sel_x1;
sel_height = sel_y2 - sel_y1; sel_height = sel_y2 - sel_y1;
@ -290,21 +290,21 @@ run (const gchar *name,
case GIMP_RUN_INTERACTIVE: case GIMP_RUN_INTERACTIVE:
gimp_get_data ("plug_in_tileit", &itvals); gimp_get_data ("plug_in_tileit", &itvals);
if (! tileit_dialog ()) if (! tileit_dialog ())
{ {
gimp_drawable_detach (drawable); gimp_drawable_detach (drawable);
return; return;
} }
break; break;
case GIMP_RUN_NONINTERACTIVE: case GIMP_RUN_NONINTERACTIVE:
if (nparams != 4) if (nparams != 4)
{ {
status = GIMP_PDB_CALLING_ERROR; status = GIMP_PDB_CALLING_ERROR;
} }
else else
{ {
itvals.numtiles = param[3].data.d_int32; itvals.numtiles = param[3].data.d_int32;
} }
break; break;
case GIMP_RUN_WITH_LAST_VALS: case GIMP_RUN_WITH_LAST_VALS:
@ -321,17 +321,17 @@ run (const gchar *name,
/* Set the tile cache size */ /* Set the tile cache size */
gimp_tile_cache_ntiles ((drawable->width + gimp_tile_width () - 1) / gimp_tile_cache_ntiles ((drawable->width + gimp_tile_width () - 1) /
gimp_tile_width ()); gimp_tile_width ());
gimp_progress_init (_("Tiling...")); gimp_progress_init (_("Tiling..."));
do_tiles (); do_tiles ();
if (run_mode != GIMP_RUN_NONINTERACTIVE) if (run_mode != GIMP_RUN_NONINTERACTIVE)
gimp_displays_flush (); gimp_displays_flush ();
if (run_mode == GIMP_RUN_INTERACTIVE) if (run_mode == GIMP_RUN_INTERACTIVE)
gimp_set_data ("plug_in_tileit", &itvals, sizeof (TileItVals)); gimp_set_data ("plug_in_tileit", &itvals, sizeof (TileItVals));
} }
else else
{ {
@ -368,7 +368,7 @@ tileit_dialog (void)
dlg = gimp_dialog_new (_("TileIt"), "tileit", dlg = gimp_dialog_new (_("TileIt"), "tileit",
NULL, 0, NULL, 0,
gimp_standard_help_func, "plug-in-small-tiles", gimp_standard_help_func, "plug-in-small-tiles",
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK, GTK_STOCK_OK, GTK_RESPONSE_OK,
@ -378,7 +378,7 @@ tileit_dialog (void)
main_vbox = gtk_vbox_new (FALSE, 12); main_vbox = gtk_vbox_new (FALSE, 12);
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_vbox, gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), main_vbox,
TRUE, TRUE, 0); TRUE, TRUE, 0);
gtk_widget_show (main_vbox); gtk_widget_show (main_vbox);
hbox = gtk_hbox_new (FALSE, 12); hbox = gtk_hbox_new (FALSE, 12);
@ -394,8 +394,8 @@ tileit_dialog (void)
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame); gtk_widget_show (frame);
tint.preview = gtk_preview_new (GTK_PREVIEW_COLOR); tint.preview = gimp_preview_area_new ();
gtk_preview_size (GTK_PREVIEW (tint.preview), preview_width, preview_height); gtk_widget_set_size_request (tint.preview, preview_width, preview_height);
gtk_widget_set_events (GTK_WIDGET (tint.preview), PREVIEW_MASK); gtk_widget_set_events (GTK_WIDGET (tint.preview), PREVIEW_MASK);
gtk_container_add (GTK_CONTAINER (frame), tint.preview); gtk_container_add (GTK_CONTAINER (frame), tint.preview);
gtk_widget_show (tint.preview); gtk_widget_show (tint.preview);
@ -457,10 +457,10 @@ tileit_dialog (void)
gtk_widget_show (table); gtk_widget_show (table);
toggle = gtk_radio_button_new_with_mnemonic (orientation_group, toggle = gtk_radio_button_new_with_mnemonic (orientation_group,
_("A_ll tiles")); _("A_ll tiles"));
orientation_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); orientation_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, 0, 1, gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, 0, 1,
GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
gtk_widget_show (toggle); gtk_widget_show (toggle);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data", g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
@ -471,10 +471,10 @@ tileit_dialog (void)
&exp_call.type); &exp_call.type);
toggle = gtk_radio_button_new_with_mnemonic (orientation_group, toggle = gtk_radio_button_new_with_mnemonic (orientation_group,
_("Al_ternate tiles")); _("Al_ternate tiles"));
orientation_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); orientation_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, 1, 2, gtk_table_attach (GTK_TABLE (table), toggle, 0, 4, 1, 2,
GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
gtk_widget_show (toggle); gtk_widget_show (toggle);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data", g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
@ -485,16 +485,16 @@ tileit_dialog (void)
&exp_call.type); &exp_call.type);
toggle = gtk_radio_button_new_with_mnemonic (orientation_group, toggle = gtk_radio_button_new_with_mnemonic (orientation_group,
_("_Explicit tile")); _("_Explicit tile"));
orientation_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle)); orientation_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 2, 4, gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 2, 4,
GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0); GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0);
gtk_widget_show (toggle); gtk_widget_show (toggle);
label = gtk_label_new_with_mnemonic (_("Ro_w:")); label = gtk_label_new_with_mnemonic (_("Ro_w:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 1, 2, 2, 3, gtk_table_attach (GTK_TABLE (table), label, 1, 2, 2, 3,
GTK_FILL | GTK_SHRINK , GTK_FILL, 0, 0); GTK_FILL | GTK_SHRINK , GTK_FILL, 0, 0);
gtk_widget_show (label); gtk_widget_show (label);
gtk_widget_set_sensitive (label, FALSE); gtk_widget_set_sensitive (label, FALSE);
@ -503,7 +503,7 @@ tileit_dialog (void)
spinbutton = gimp_spin_button_new (&adj, 2, 1, 6, 1, 1, 0, 1, 0); spinbutton = gimp_spin_button_new (&adj, 2, 1, 6, 1, 1, 0, 1, 0);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 2, 3, gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 2, 3,
GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0); GTK_FILL | GTK_SHRINK, GTK_FILL, 0, 0);
gtk_widget_show (spinbutton); gtk_widget_show (spinbutton);
g_signal_connect (adj, "value_changed", g_signal_connect (adj, "value_changed",
@ -519,7 +519,7 @@ tileit_dialog (void)
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5); gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_widget_show (label); gtk_widget_show (label);
gtk_table_attach (GTK_TABLE (table), label, 1, 2, 3, 4, gtk_table_attach (GTK_TABLE (table), label, 1, 2, 3, 4,
GTK_FILL , GTK_FILL, 0, 0); GTK_FILL , GTK_FILL, 0, 0);
gtk_widget_set_sensitive (label, FALSE); gtk_widget_set_sensitive (label, FALSE);
g_object_set_data (G_OBJECT (spinbutton), "set_sensitive", label); g_object_set_data (G_OBJECT (spinbutton), "set_sensitive", label);
@ -527,7 +527,7 @@ tileit_dialog (void)
spinbutton = gimp_spin_button_new (&adj, 2, 1, 6, 1, 1, 0, 1, 0); spinbutton = gimp_spin_button_new (&adj, 2, 1, 6, 1, 1, 0, 1, 0);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 3, 4, gtk_table_attach (GTK_TABLE (table), spinbutton, 2, 3, 3, 4,
GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
gtk_widget_show (spinbutton); gtk_widget_show (spinbutton);
g_signal_connect (adj, "value_changed", g_signal_connect (adj, "value_changed",
@ -608,7 +608,7 @@ tileit_dialog (void)
static void static void
tileit_hvtoggle_update (GtkWidget *widget, tileit_hvtoggle_update (GtkWidget *widget,
gpointer data) gpointer data)
{ {
gimp_toggle_button_update (widget, data); gimp_toggle_button_update (widget, data);
@ -648,26 +648,26 @@ draw_explict_sel (void)
gdk_gc_set_function (tint.preview->style->black_gc, GDK_INVERT); gdk_gc_set_function (tint.preview->style->black_gc, GDK_INVERT);
gdk_draw_rectangle (tint.preview->window, gdk_draw_rectangle (tint.preview->window,
tint.preview->style->black_gc, tint.preview->style->black_gc,
0, 0,
(gint) x, (gint) x,
(gint) y, (gint) y,
(gint) width, (gint) width,
(gint) height); (gint) height);
gdk_draw_rectangle (tint.preview->window, gdk_draw_rectangle (tint.preview->window,
tint.preview->style->black_gc, tint.preview->style->black_gc,
0, 0,
(gint) x + 1, (gint) x + 1,
(gint) y + 1, (gint) y + 1,
(gint) width - 2, (gint) width - 2,
(gint) height - 2); (gint) height - 2);
gdk_draw_rectangle (tint.preview->window, gdk_draw_rectangle (tint.preview->window,
tint.preview->style->black_gc, tint.preview->style->black_gc,
0, 0,
(gint) x + 2, (gint) x + 2,
(gint) y + 2, (gint) y + 2,
(gint) width - 4, (gint) width - 4,
(gint) height - 4); (gint) height - 4);
gdk_gc_set_function (tint.preview->style->black_gc, GDK_COPY); gdk_gc_set_function (tint.preview->style->black_gc, GDK_COPY);
} }
@ -675,7 +675,7 @@ draw_explict_sel (void)
static gint static gint
tileit_preview_expose (GtkWidget *widget, tileit_preview_expose (GtkWidget *widget,
GdkEvent *event) GdkEvent *event)
{ {
draw_explict_sel (); draw_explict_sel ();
@ -684,7 +684,7 @@ tileit_preview_expose (GtkWidget *widget,
static void static void
exp_need_update (gint nx, exp_need_update (gint nx,
gint ny) gint ny)
{ {
if (nx <= 0 || nx > itvals.numtiles || ny <= 0 || ny > itvals.numtiles) if (nx <= 0 || nx > itvals.numtiles || ny <= 0 || ny > itvals.numtiles)
return; return;
@ -718,7 +718,7 @@ exp_need_update (gint nx,
static gboolean static gboolean
tileit_preview_events (GtkWidget *widget, tileit_preview_events (GtkWidget *widget,
GdkEvent *event) GdkEvent *event)
{ {
GdkEventButton *bevent; GdkEventButton *bevent;
GdkEventMotion *mevent; GdkEventMotion *mevent;
@ -741,9 +741,9 @@ tileit_preview_events (GtkWidget *widget,
case GDK_MOTION_NOTIFY: case GDK_MOTION_NOTIFY:
mevent = (GdkEventMotion *) event; mevent = (GdkEventMotion *) event;
if ( !mevent->state ) if ( !mevent->state )
break; break;
if(mevent->x < 0 || mevent->y < 0) if(mevent->x < 0 || mevent->y < 0)
break; break;
nx = mevent->x/twidth + 1; nx = mevent->x/twidth + 1;
ny = mevent->y/theight + 1; ny = mevent->y/theight + 1;
exp_need_update (nx, ny); exp_need_update (nx, ny);
@ -776,7 +776,7 @@ explict_update (gboolean settile)
/* Set it */ /* Set it */
if (settile) if (settile)
tileactions[x-1][y-1] = (((do_horz) ? HORIZONTAL : 0) | tileactions[x-1][y-1] = (((do_horz) ? HORIZONTAL : 0) |
((do_vert) ? VERTICAL : 0)); ((do_vert) ? VERTICAL : 0));
exp_call.x = x; exp_call.x = x;
exp_call.y = y; exp_call.y = y;
@ -790,7 +790,7 @@ all_update (void)
for (x = 0 ; x < MAX_SEGS; x++) for (x = 0 ; x < MAX_SEGS; x++)
for (y = 0 ; y < MAX_SEGS; y++) for (y = 0 ; y < MAX_SEGS; y++)
tileactions[x][y] |= (((do_horz) ? HORIZONTAL : 0) | tileactions[x][y] |= (((do_horz) ? HORIZONTAL : 0) |
((do_vert) ? VERTICAL : 0)); ((do_vert) ? VERTICAL : 0));
} }
static void static void
@ -801,36 +801,36 @@ alt_update (void)
for (x = 0 ; x < MAX_SEGS; x++) for (x = 0 ; x < MAX_SEGS; x++)
for (y = 0 ; y < MAX_SEGS; y++) for (y = 0 ; y < MAX_SEGS; y++)
if (!((x + y) % 2)) if (!((x + y) % 2))
tileactions[x][y] |= (((do_horz) ? HORIZONTAL : 0) | tileactions[x][y] |= (((do_horz) ? HORIZONTAL : 0) |
((do_vert) ? VERTICAL : 0)); ((do_vert) ? VERTICAL : 0));
} }
static void static void
tileit_radio_update (GtkWidget *widget, tileit_radio_update (GtkWidget *widget,
gpointer data) gpointer data)
{ {
gimp_radio_button_update (widget, data); gimp_radio_button_update (widget, data);
if (GTK_TOGGLE_BUTTON (widget)->active) if (GTK_TOGGLE_BUTTON (widget)->active)
{ {
switch (exp_call.type) switch (exp_call.type)
{ {
case ALL: case ALL:
/* Clear current settings */ /* Clear current settings */
memset (tileactions, 0, sizeof (tileactions)); memset (tileactions, 0, sizeof (tileactions));
all_update (); all_update ();
break; break;
case ALT: case ALT:
/* Clear current settings */ /* Clear current settings */
memset (tileactions, 0, sizeof (tileactions)); memset (tileactions, 0, sizeof (tileactions));
alt_update (); alt_update ();
break; break;
case EXPLICT: case EXPLICT:
explict_update (FALSE); explict_update (FALSE);
break; break;
} }
dialog_update_preview (); dialog_update_preview ();
} }
@ -839,7 +839,7 @@ tileit_radio_update (GtkWidget *widget,
static void static void
tileit_scale_update (GtkAdjustment *adjustment, tileit_scale_update (GtkAdjustment *adjustment,
gpointer data) gpointer data)
{ {
gimp_int_adjustment_update (adjustment, data); gimp_int_adjustment_update (adjustment, data);
@ -848,7 +848,7 @@ tileit_scale_update (GtkAdjustment *adjustment,
static void static void
tileit_reset (GtkWidget *widget, tileit_reset (GtkWidget *widget,
gpointer data) gpointer data)
{ {
Reset_Call *r = (Reset_Call *) data; Reset_Call *r = (Reset_Call *) data;
@ -883,7 +883,7 @@ tileit_reset (GtkWidget *widget,
static void static void
tileit_exp_update (GtkWidget *widget, tileit_exp_update (GtkWidget *widget,
gpointer applied) gpointer applied)
{ {
explict_update (TRUE); explict_update (TRUE);
dialog_update_preview (); dialog_update_preview ();
@ -891,7 +891,7 @@ tileit_exp_update (GtkWidget *widget,
static void static void
tileit_exp_update_f (GtkWidget *widget, tileit_exp_update_f (GtkWidget *widget,
gpointer applied) gpointer applied)
{ {
explict_update (FALSE); explict_update (FALSE);
dialog_update_preview (); dialog_update_preview ();
@ -910,7 +910,7 @@ cache_preview (void)
gboolean isgrey = FALSE; gboolean isgrey = FALSE;
gimp_pixel_rgn_init (&src_rgn, tileitdrawable, gimp_pixel_rgn_init (&src_rgn, tileitdrawable,
sel_x1, sel_y1, sel_width, sel_height, FALSE, FALSE); sel_x1, sel_y1, sel_width, sel_height, FALSE, FALSE);
src_rows = g_new (guchar, sel_width * 4); src_rows = g_new (guchar, sel_width * 4);
p = tint.pv_cache = g_new (guchar, preview_width * preview_height * 4); p = tint.pv_cache = g_new (guchar, preview_width * preview_height * 4);
@ -927,24 +927,24 @@ cache_preview (void)
for (y = 0; y < preview_height; y++) for (y = 0; y < preview_height; y++)
{ {
gimp_pixel_rgn_get_row (&src_rgn, gimp_pixel_rgn_get_row (&src_rgn,
src_rows, src_rows,
sel_x1, sel_x1,
sel_y1 + (y * sel_height) / preview_height, sel_y1 + (y * sel_height) / preview_height,
sel_width); sel_width);
for (x = 0; x < (preview_width); x ++) for (x = 0; x < (preview_width); x ++)
{ {
/* Get the pixels of each col */ /* Get the pixels of each col */
gint i; gint i;
for (i = 0 ; i < 3; i++) for (i = 0 ; i < 3; i++)
p[x * tint.img_bpp + i] = p[x * tint.img_bpp + i] =
src_rows[((x * sel_width) / preview_width) * src_rgn.bpp + src_rows[((x * sel_width) / preview_width) * src_rgn.bpp +
((isgrey) ? 0 : i)]; ((isgrey) ? 0 : i)];
if (has_alpha) if (has_alpha)
p[x * tint.img_bpp + 3] = p[x * tint.img_bpp + 3] =
src_rows[((x * sel_width) / preview_width) * src_rgn.bpp + src_rows[((x * sel_width) / preview_width) * src_rgn.bpp +
((isgrey) ? 1 : 3)]; ((isgrey) ? 1 : 3)];
} }
p += (preview_width * tint.img_bpp); p += (preview_width * tint.img_bpp);
} }
g_free (src_rows); g_free (src_rows);
@ -959,9 +959,9 @@ do_tiles(void)
guchar *dest_row; guchar *dest_row;
guchar *dest; guchar *dest;
gint row, col; gint row, col;
gint bpp; gint bpp;
guchar pixel[4]; guchar pixel[4];
gint nc, nr; gint nc, nr;
gint i; gint i;
GimpPixelFetcher *pft; GimpPixelFetcher *pft;
@ -1047,20 +1047,20 @@ tiles_xy (gint width,
if ((actiontype = tileactions[cnum][rnum])) if ((actiontype = tileactions[cnum][rnum]))
{ {
if (actiontype & HORIZONTAL) if (actiontype & HORIZONTAL)
{ {
gdouble pyr; gdouble pyr;
pyr = height - y - 1 + rnd; pyr = height - y - 1 + rnd;
py = ((gint) (pyr * (gdouble) itvals.numtiles)) % height; py = ((gint) (pyr * (gdouble) itvals.numtiles)) % height;
} }
if (actiontype & VERTICAL) if (actiontype & VERTICAL)
{ {
gdouble pxr; gdouble pxr;
pxr = width - x - 1 + rnd; pxr = width - x - 1 + rnd;
px = ((gint) (pxr * (gdouble) itvals.numtiles)) % width; px = ((gint) (pxr * (gdouble) itvals.numtiles)) % width;
} }
} }
*nx = px; *nx = px;
@ -1097,29 +1097,29 @@ do_tiles_preview (guchar *dest_row,
cnum = x*itvals.numtiles/width; cnum = x*itvals.numtiles/width;
if((actiontype = tileactions[cnum][rnum])) if((actiontype = tileactions[cnum][rnum]))
{ {
if(actiontype & HORIZONTAL) if(actiontype & HORIZONTAL)
{ {
gdouble pyr; gdouble pyr;
pyr = height - dh - 1 + rnd; pyr = height - dh - 1 + rnd;
py = ((int)(pyr*(gdouble)itvals.numtiles))%height; py = ((int)(pyr*(gdouble)itvals.numtiles))%height;
} }
if(actiontype & VERTICAL) if(actiontype & VERTICAL)
{ {
gdouble pxr; gdouble pxr;
pxr = width - x - 1 + rnd; pxr = width - x - 1 + rnd;
px = ((int)(pxr*(gdouble)itvals.numtiles))%width; px = ((int)(pxr*(gdouble)itvals.numtiles))%width;
} }
} }
for (i = 0 ; i < bpp; i++ ) for (i = 0 ; i < bpp; i++ )
dest_row[x*tint.img_bpp+i] = dest_row[x*tint.img_bpp+i] =
src_rows[(px + (py*width))*bpp+i]; src_rows[(px + (py*width))*bpp+i];
if (has_alpha) if (has_alpha)
dest_row[x*tint.img_bpp + (bpp - 1)] = dest_row[x*tint.img_bpp + (bpp - 1)] =
(dest_row[x*tint.img_bpp + (bpp - 1)]*opacity)/100; (dest_row[x*tint.img_bpp + (bpp - 1)]*opacity)/100;
} }
} }
@ -1127,58 +1127,29 @@ do_tiles_preview (guchar *dest_row,
static void static void
dialog_update_preview (void) dialog_update_preview (void)
{ {
gint y; gint y;
gint check, check_0, check_1; guchar *buffer;
buffer = g_new (guchar, preview_width * preview_height * tint.img_bpp);
for (y = 0; y < preview_height; y++) for (y = 0; y < preview_height; y++)
{ {
if ((y / GIMP_CHECK_SIZE) & 1)
{
check_0 = GIMP_CHECK_DARK * 255;
check_1 = GIMP_CHECK_LIGHT * 255;
}
else
{
check_0 = GIMP_CHECK_LIGHT * 255;
check_1 = GIMP_CHECK_DARK * 255;
}
do_tiles_preview (tint.preview_row, do_tiles_preview (tint.preview_row,
tint.pv_cache, tint.pv_cache,
preview_width, preview_width,
y, y,
preview_height, preview_height,
tint.img_bpp); tint.img_bpp);
if (tint.img_bpp > 3) memcpy (buffer + y* (preview_width * tint.img_bpp),
{ tint.preview_row,
gint i, j; preview_width * tint.img_bpp);
for (i = 0, j = 0 ; i < sizeof (tint.preview_row); i += 4, j += 3 )
{
gint alphaval;
if (((i/4) / GIMP_CHECK_SIZE) & 1)
check = check_0;
else
check = check_1;
alphaval = tint.preview_row[i + 3];
tint.preview_row[j] =
check + (((tint.preview_row[i] - check)*alphaval)/255);
tint.preview_row[j + 1] =
check + (((tint.preview_row[i + 1] - check)*alphaval)/255);
tint.preview_row[j + 2] =
check + (((tint.preview_row[i + 2] - check)*alphaval)/255);
}
}
gtk_preview_draw_row (GTK_PREVIEW (tint.preview),
tint.preview_row, 0, y, preview_width);
} }
gimp_preview_area_draw (GIMP_PREVIEW_AREA (tint.preview),
0, 0, preview_width, preview_height,
(tint.img_bpp>3)?GIMP_RGBA_IMAGE:GIMP_RGB_IMAGE,
buffer,
preview_width * tint.img_bpp);
g_free (buffer);
draw_explict_sel (); draw_explict_sel ();
gtk_widget_queue_draw (tint.preview); gtk_widget_queue_draw (tint.preview);
} }