ported to GimpPreviewArea (from GimpPreviewArea)

* plug-ins/common/flarefx.c: ported to GimpPreviewArea (from GimpPreviewArea)
This commit is contained in:
David Odin
2004-08-06 00:36:47 +00:00
parent 46960e26d7
commit a560d35e23
2 changed files with 68 additions and 59 deletions

View File

@ -1,3 +1,8 @@
2004-08-06 DindinX <david@dindinx.org>
* plug-ins/common/flarefx.c: ported to GimpPreviewArea (from
GimpPreviewArea)
2004-08-06 Sven Neumann <sven@gimp.org>
* plug-ins/twain/Makefile.am (EXTRA_DIST): forgot to remove

View File

@ -56,13 +56,12 @@
#include "libgimp/stdplugins-intl.h"
#include "gimpoldpreview.h"
/* --- Defines --- */
#define ENTRY_WIDTH 75
#define PREVIEW_MASK (GDK_EXPOSURE_MASK | \
GDK_BUTTON_PRESS_MASK | \
GDK_BUTTON1_MOTION_MASK)
#define PREVIEW_SIZE (128)
#define PREVIEW 0x1
#define CURSOR 0x2
@ -156,14 +155,16 @@ static FlareValues fvals =
128, 128 /* posx, posy */
};
static gfloat scolor, sglow, sinner, souter; /* size */
static gfloat shalo;
static gint xs, ys;
static gint numref;
static RGBfloat color, glow, inner, outer, halo;
static Reflect ref1[19];
static GimpOldPreview *preview;
static gboolean show_cursor = TRUE;
static gfloat scolor, sglow, sinner, souter; /* size */
static gfloat shalo;
static gint xs, ys;
static gint numref;
static RGBfloat color, glow, inner, outer, halo;
static Reflect ref1[19];
static GtkWidget *preview;
static guchar *preview_cache;
static gint preview_width, preview_height, preview_bpp;
static gboolean show_cursor = TRUE;
/* --- Functions --- */
MAIN ()
@ -266,7 +267,7 @@ run (const gchar *name,
gimp_tile_cache_ntiles (2 *
(drawable->width / gimp_tile_width () + 1));
FlareFX (drawable, 0);
FlareFX (drawable, FALSE);
if (run_mode != GIMP_RUN_NONINTERACTIVE)
gimp_displays_flush ();
@ -315,6 +316,8 @@ flare_dialog (GimpDrawable *drawable)
gtk_widget_show (dlg);
FlareFX (drawable, TRUE);
run = (gimp_dialog_run (GIMP_DIALOG (dlg)) == GTK_RESPONSE_OK);
gtk_widget_destroy (dlg);
@ -327,24 +330,23 @@ static void
FlareFX (GimpDrawable *drawable,
gboolean preview_mode)
{
GimpPixelRgn srcPR, destPR;
gint width, height;
gint bytes;
guchar *dest, *d;
guchar *cur_row, *s;
gint row, col, i;
gint x1, y1, x2, y2;
gint matt;
gfloat hyp;
GimpPixelRgn srcPR, destPR;
gint width, height;
gint bytes;
guchar *cur_row, *s, *buffer = NULL;
gint row, col, i;
gint x1, y1, x2, y2;
gint matt;
gfloat hyp;
bytes = drawable->bpp;
if (preview_mode)
{
width = preview->width;
height = preview->height;
bytes = preview->bpp;
width = preview_width;
height = preview_height;
xs = (gdouble)fvals.posx * preview->scale_x;
ys = (gdouble)fvals.posy * preview->scale_y;
xs = (gdouble)fvals.posx * width / drawable->width;
ys = (gdouble)fvals.posy * height / drawable->height;
x1 = y1 = 0;
x2 = width;
@ -355,7 +357,6 @@ FlareFX (GimpDrawable *drawable,
gimp_drawable_mask_bounds (drawable->drawable_id, &x1, &y1, &x2, &y2);
width = drawable->width;
height = drawable->height;
bytes = drawable->bpp;
xs = fvals.posx; /* set x,y of flare center */
ys = fvals.posy;
@ -365,8 +366,7 @@ FlareFX (GimpDrawable *drawable,
if (preview_mode)
{
cur_row = g_new (guchar, preview->rowstride);
dest = g_new (guchar, preview->rowstride);
buffer = g_new (guchar, bytes * width * height);
}
else
{
@ -374,9 +374,8 @@ FlareFX (GimpDrawable *drawable,
gimp_pixel_rgn_init (&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
gimp_pixel_rgn_init (&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
cur_row = g_new (guchar, (x2 - x1) * bytes);
dest = g_new (guchar, (x2 - x1) * bytes);
}
cur_row = g_new (guchar, (x2 - x1) * bytes);
scolor = (gfloat)matt * 0.0375;
sglow = (gfloat)matt * 0.078125;
@ -396,13 +395,10 @@ FlareFX (GimpDrawable *drawable,
for (row = y1; row < y2; row++) /* y-coord */
{
if (preview_mode)
memcpy (cur_row,
preview->cache + preview->rowstride * row,
preview->rowstride);
memcpy (cur_row, preview_cache + row * width * bytes, width * bytes);
else
gimp_pixel_rgn_get_row (&srcPR, cur_row, x1, row, x2-x1);
d = dest;
s = cur_row;
for (col = x1; col < x2; col++) /* x-coord */
{
@ -436,7 +432,7 @@ FlareFX (GimpDrawable *drawable,
}
if (preview_mode)
{
gimp_old_preview_do_row (preview, row, preview->width, cur_row);
memcpy (buffer + row * width * bytes, cur_row, width * bytes);
}
else
{
@ -450,7 +446,12 @@ FlareFX (GimpDrawable *drawable,
if (preview_mode)
{
gtk_widget_queue_draw (preview->widget);
gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview),
0, 0, width, height,
gimp_drawable_type (drawable->drawable_id),
buffer,
width * bytes);
g_free (buffer);
}
else
{
@ -460,7 +461,6 @@ FlareFX (GimpDrawable *drawable,
gimp_drawable_update (drawable->drawable_id, x1, y1, (x2 - x1), (y2 - y1)); }
g_free (cur_row);
g_free (dest);
}
static void
@ -771,17 +771,23 @@ flare_center_create (GimpDrawable *drawable)
&fvals.posy);
/* PREVIEW */
preview = gimp_old_preview_new (drawable);
gtk_widget_add_events (GTK_WIDGET (preview->widget), PREVIEW_MASK);
gtk_table_attach (GTK_TABLE (table), preview->frame, 0, 4, 1, 2, 0, 0, 0, 0);
gtk_widget_show (preview->frame);
preview = gimp_preview_area_new ();
preview_width = preview_height = PREVIEW_SIZE;
preview_cache = gimp_drawable_get_thumbnail_data (drawable->drawable_id,
&preview_width,
&preview_height,
&preview_bpp);
gtk_widget_set_size_request (preview, preview_width, preview_height);
gtk_widget_add_events (GTK_WIDGET (preview), PREVIEW_MASK);
gtk_table_attach (GTK_TABLE (table), preview, 0, 4, 1, 2, 0, 0, 0, 0);
gtk_widget_show (preview);
g_object_set_data (G_OBJECT (preview->widget), "center", center);
g_object_set_data (G_OBJECT (preview), "center", center);
g_signal_connect_after (preview->widget, "expose_event",
g_signal_connect_after (preview, "expose_event",
G_CALLBACK (flare_center_preview_expose),
center);
g_signal_connect (preview->widget, "event",
g_signal_connect (preview, "event",
G_CALLBACK (flare_center_preview_events),
center);
@ -808,8 +814,6 @@ flare_center_create (GimpDrawable *drawable)
center->cursor = FALSE; /* Make sure that the cursor has not been drawn */
center->in_call = FALSE; /* End of initialization */
FlareFX (drawable, TRUE);
return frame;
}
@ -831,7 +835,7 @@ static void
flare_center_draw (FlareCenter *center,
gint update)
{
GtkWidget *prvw = preview->widget;
GtkWidget *prvw = preview;
if (update & PREVIEW)
{
@ -850,11 +854,11 @@ flare_center_draw (FlareCenter *center,
prvw->style->black_gc,
center->oldx, 1,
center->oldx,
preview->height - 1);
preview_height - 1);
gdk_draw_line (prvw->window,
prvw->style->black_gc,
1, center->oldy,
preview->width - 1,
preview_width - 1,
center->oldy);
}
@ -862,11 +866,11 @@ flare_center_draw (FlareCenter *center,
prvw->style->black_gc,
center->curx, 1,
center->curx,
preview->height - 1);
preview_height - 1);
gdk_draw_line (prvw->window,
prvw->style->black_gc,
1, center->cury,
preview->width - 1,
preview_width - 1,
center->cury);
}
@ -898,7 +902,7 @@ flare_center_adjustment_update (GtkAdjustment *adjustment,
{
flare_center_cursor_update (center);
flare_center_draw (center, CURSOR);
FlareFX(center->drawable, 1);
FlareFX(center->drawable, TRUE);
}
}
@ -910,11 +914,11 @@ flare_center_adjustment_update (GtkAdjustment *adjustment,
static void
flare_center_cursor_update (FlareCenter *center)
{
center->curx = fvals.posx * preview->width / center->dwidth;
center->cury = fvals.posy * preview->height / center->dheight;
center->curx = fvals.posx * preview_width / center->dwidth;
center->cury = fvals.posy * preview_height / center->dheight;
center->curx = CLAMP (center->curx, 0, preview->width - 1);
center->cury = CLAMP (center->cury, 0, preview->height - 1);
center->curx = CLAMP (center->curx, 0, preview_width - 1);
center->cury = CLAMP (center->cury, 0, preview_height - 1);
}
/*
@ -967,12 +971,12 @@ flare_center_preview_events (GtkWidget *widget,
center->in_call = TRUE;
gtk_adjustment_set_value (GTK_ADJUSTMENT (center->xadj),
center->curx * center->dwidth /
preview->width);
preview_width);
gtk_adjustment_set_value (GTK_ADJUSTMENT (center->yadj),
center->cury * center->dheight /
preview->height);
preview_height);
center->in_call = FALSE;
FlareFX(center->drawable, 1);
FlareFX(center->drawable, TRUE);
break;
default: