mirror of https://github.com/GNOME/gimp.git
*** empty log message ***
This commit is contained in:
parent
71e5fefec9
commit
7f5fbf42ff
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2000-04-16 Jens Lautenbacher <jtl@gimp.org>
|
||||
Sven Neumann <sven@gimp.org>
|
||||
|
||||
* plug-ins/common/bumpmap.c: bumped version number to 3.0-pre1-ac1
|
||||
- Now able not to tile the bumpmap - this is the default.
|
||||
- Added new PDB call plug_in_bumpmap_tiled.
|
||||
- Added scrollbars for preview.
|
||||
- Fixed slider feedback for bumpmap offset and set initial offsets
|
||||
from drawable offsets.
|
||||
- Make it work as intended from the very beginning...
|
||||
|
||||
Sat Apr 15 15:10:39 PDT 2000 Manish Singh <yosh@gimp.org>
|
||||
|
||||
* autogen.sh: tightened the regexs for build tool sanity checks
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||
*
|
||||
* Bump map plug-in --- emboss an image by using another image as a bump map
|
||||
* Copyright (C) 1997 Federico Mena Quintero
|
||||
* federico@nuclecu.unam.mx
|
||||
* Copyright (C) 1997 Jens Lautenbacher
|
||||
* jens@lemming0.lem.uni-karlsruhe.de
|
||||
* Copyright (C) 1997 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
||||
* Copyright (C) 1997-2000 Jens Lautenbacher <jtl@gimp.org>
|
||||
* Copyright (C) 2000 Sven Neumann <sven@gimp.org>
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -29,6 +29,16 @@
|
|||
* bump-map to another image, producing a nice embossing effect.
|
||||
*/
|
||||
|
||||
/* Version 3.0-pre1-ac1:
|
||||
*
|
||||
* - Now able not to tile the bumpmap - this is the default.
|
||||
* - Added new PDB call plug_in_bumpmap_tiled.
|
||||
* - Added scrollbars for preview.
|
||||
* - Fixed slider feedback for bumpmap offset and set initial offsets
|
||||
* from drawable offsets.
|
||||
* - Make it work as intended from the very beginning...
|
||||
*/
|
||||
|
||||
/* Version 2.04:
|
||||
*
|
||||
* - The preview is now scrollable via draging with button 1 in the
|
||||
|
@ -103,8 +113,7 @@
|
|||
|
||||
/***** Magic numbers *****/
|
||||
|
||||
#define PLUG_IN_NAME "plug_in_bump_map"
|
||||
#define PLUG_IN_VERSION "August 1997, 2.04"
|
||||
#define PLUG_IN_VERSION "April 2000, 3.0-pre1-ac1"
|
||||
|
||||
#define PREVIEW_SIZE 128
|
||||
#define SCALE_WIDTH 0
|
||||
|
@ -138,49 +147,55 @@ typedef struct
|
|||
gint compensate;
|
||||
gint invert;
|
||||
gint type;
|
||||
gint tiled;
|
||||
} bumpmap_vals_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int lx, ly; /* X and Y components of light vector */
|
||||
int nz2, nzlz; /* nz^2, nz*lz */
|
||||
int background; /* Shade for vertical normals */
|
||||
double compensation; /* Background compensation */
|
||||
guchar lut[256]; /* Look-up table for modes */
|
||||
gint lx, ly; /* X and Y components of light vector */
|
||||
gint nz2, nzlz; /* nz^2, nz*lz */
|
||||
gint background; /* Shade for vertical normals */
|
||||
gdouble compensation; /* Background compensation */
|
||||
guchar lut[256]; /* Look-up table for modes */
|
||||
} bumpmap_params_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GtkWidget *preview;
|
||||
int preview_width;
|
||||
int preview_height;
|
||||
int mouse_x;
|
||||
int mouse_y;
|
||||
int preview_xofs;
|
||||
int preview_yofs;
|
||||
int drag_mode;
|
||||
GtkWidget *preview;
|
||||
GtkObject *preview_adj_x;
|
||||
GtkObject *preview_adj_y;
|
||||
gint preview_width;
|
||||
gint preview_height;
|
||||
gint mouse_x;
|
||||
gint mouse_y;
|
||||
gint preview_xofs;
|
||||
gint preview_yofs;
|
||||
gint drag_mode;
|
||||
|
||||
guchar *check_row_0;
|
||||
guchar *check_row_1;
|
||||
GtkObject *offset_adj_x;
|
||||
GtkObject *offset_adj_y;
|
||||
|
||||
guchar *check_row_0;
|
||||
guchar *check_row_1;
|
||||
|
||||
guchar **src_rows;
|
||||
guchar **bm_rows;
|
||||
guchar **src_rows;
|
||||
guchar **bm_rows;
|
||||
|
||||
int src_yofs;
|
||||
int bm_yofs;
|
||||
gint src_yofs;
|
||||
gint bm_yofs;
|
||||
|
||||
GDrawable *bm_drawable;
|
||||
int bm_width;
|
||||
int bm_height;
|
||||
int bm_bpp;
|
||||
int bm_has_alpha;
|
||||
GDrawable *bm_drawable;
|
||||
gint bm_width;
|
||||
gint bm_height;
|
||||
gint bm_bpp;
|
||||
gint bm_has_alpha;
|
||||
|
||||
GPixelRgn src_rgn;
|
||||
GPixelRgn bm_rgn;
|
||||
GPixelRgn src_rgn;
|
||||
GPixelRgn bm_rgn;
|
||||
|
||||
bumpmap_params_t params;
|
||||
|
||||
gint run;
|
||||
gint run;
|
||||
} bumpmap_interface_t;
|
||||
|
||||
|
||||
|
@ -205,6 +220,8 @@ static void bumpmap_row (guchar *src_row,
|
|||
guchar *bm_row3,
|
||||
gint bm_width,
|
||||
gint bm_xofs,
|
||||
gboolean tiled,
|
||||
gboolean row_in_bumpmap,
|
||||
bumpmap_params_t *params);
|
||||
static void bumpmap_convert_row (guchar *row,
|
||||
gint width,
|
||||
|
@ -227,6 +244,7 @@ static void dialog_fill_bumpmap_rows (gint start, gint how_many, gint yofs);
|
|||
|
||||
static void dialog_compensate_callback (GtkWidget *widget, gpointer data);
|
||||
static void dialog_invert_callback (GtkWidget *widget, gpointer data);
|
||||
static void dialog_tiled_callback (GtkWidget *widget, gpointer data);
|
||||
static void dialog_map_type_callback (GtkWidget *widget, gpointer data);
|
||||
static gint dialog_constrain (gint32 image_id, gint32 drawable_id,
|
||||
gpointer data);
|
||||
|
@ -259,12 +277,15 @@ static bumpmap_vals_t bmvals =
|
|||
0, /* ambient */
|
||||
FALSE, /* compensate */
|
||||
FALSE, /* invert */
|
||||
LINEAR /* type */
|
||||
LINEAR, /* type */
|
||||
FALSE /* tiled */
|
||||
};
|
||||
|
||||
static bumpmap_interface_t bmint =
|
||||
{
|
||||
NULL, /* preview */
|
||||
NULL, /* preview_adj_x */
|
||||
NULL, /* preview_adj_y */
|
||||
0, /* preview_width */
|
||||
0, /* preview_height */
|
||||
0, /* mouse_x */
|
||||
|
@ -272,6 +293,8 @@ static bumpmap_interface_t bmint =
|
|||
0, /* preview_xofs */
|
||||
0, /* preview_yofs */
|
||||
DRAG_NONE, /* drag_mode */
|
||||
NULL, /* offset_adj_x */
|
||||
NULL, /* offset_adj_y */
|
||||
NULL, /* check_row_0 */
|
||||
NULL, /* check_row_1 */
|
||||
NULL, /* src_rows */
|
||||
|
@ -291,10 +314,11 @@ static bumpmap_interface_t bmint =
|
|||
|
||||
static GDrawable *drawable = NULL;
|
||||
|
||||
static gint sel_x1, sel_y1, sel_x2, sel_y2;
|
||||
static gint sel_width, sel_height;
|
||||
static gint img_bpp, img_has_alpha;
|
||||
|
||||
static gint sel_x1, sel_y1;
|
||||
static gint sel_x2, sel_y2;
|
||||
static gint sel_width, sel_height;
|
||||
static gint img_bpp;
|
||||
static gboolean img_has_alpha;
|
||||
|
||||
/***** Functions *****/
|
||||
|
||||
|
@ -318,29 +342,47 @@ query (void)
|
|||
{ PARAM_INT32, "ambient", "Ambient lighting factor" },
|
||||
{ PARAM_INT32, "compensate", "Compensate for darkening" },
|
||||
{ PARAM_INT32, "invert", "Invert bumpmap" },
|
||||
{ PARAM_INT32, "type", "Type of map (LINEAR (0), SPHERICAL (1), SINUOSIDAL (2))" }
|
||||
{ PARAM_INT32, "type", "Type of map (LINEAR (0), SPHERICAL (1), SINUOSIDAL (2))" },
|
||||
};
|
||||
static gint nargs = sizeof (args) / sizeof (args[0]);
|
||||
|
||||
INIT_I18N();
|
||||
|
||||
gimp_install_procedure (PLUG_IN_NAME,
|
||||
gimp_install_procedure ("plug_in_bump_map",
|
||||
"Create an embossing effect using an image as a "
|
||||
"bump map",
|
||||
"This plug-in uses the algorithm described by John "
|
||||
"Schlag, \"Fast Embossing Effects on Raster Image "
|
||||
"Data\" in Graphics GEMS IV (ISBN 0-12-336155-9). "
|
||||
"It takes a grayscale image to be applied as a bump "
|
||||
"It takes a drawable to be applied as a bump "
|
||||
"map to another image and produces a nice embossing "
|
||||
"effect.",
|
||||
"Federico Mena Quintero & Jens Lautenbacher",
|
||||
"Federico Mena Quintero & Jens Lautenbacher",
|
||||
"Federico Mena Quintero, Jens Lautenbacher & Sven Neumann",
|
||||
"Federico Mena Quintero, Jens Lautenbacher & Sven Neumann",
|
||||
PLUG_IN_VERSION,
|
||||
N_("<Image>/Filters/Map/Bump Map..."),
|
||||
"RGB*, GRAY*",
|
||||
PROC_PLUG_IN,
|
||||
nargs, 0,
|
||||
args, NULL);
|
||||
|
||||
gimp_install_procedure ("plug_in_bump_map_tiled",
|
||||
"Create an embossing effect using a tiled image "
|
||||
"as a bump map",
|
||||
"This plug-in uses the algorithm described by John "
|
||||
"Schlag, \"Fast Embossing Effects on Raster Image "
|
||||
"Data\" in Graphics GEMS IV (ISBN 0-12-336155-9). "
|
||||
"It takes a drawable to be tiled and applied as a "
|
||||
"bump map to another image and produces a nice "
|
||||
"embossing effect.",
|
||||
"Federico Mena Quintero, Jens Lautenbacher & Sven Neumann",
|
||||
"Federico Mena Quintero, Jens Lautenbacher & Sven Neumann",
|
||||
PLUG_IN_VERSION,
|
||||
NULL,
|
||||
"RGB*, GRAY*",
|
||||
PROC_PLUG_IN,
|
||||
nargs, 0,
|
||||
args, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -381,7 +423,7 @@ run (gchar *name,
|
|||
{
|
||||
case RUN_INTERACTIVE:
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data (PLUG_IN_NAME, &bmvals);
|
||||
gimp_get_data (name, &bmvals);
|
||||
|
||||
/* Get information from the dialog */
|
||||
if (!bumpmap_dialog ())
|
||||
|
@ -409,12 +451,13 @@ run (gchar *name,
|
|||
bmvals.compensate = param[11].data.d_int32;
|
||||
bmvals.invert = param[12].data.d_int32;
|
||||
bmvals.type = param[13].data.d_int32;
|
||||
bmvals.tiled = strcmp (name, "plug_in_bump_map_tiled") == 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case RUN_WITH_LAST_VALS:
|
||||
/* Possibly retrieve data */
|
||||
gimp_get_data (PLUG_IN_NAME, &bmvals);
|
||||
gimp_get_data (name, &bmvals);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -442,7 +485,7 @@ run (gchar *name,
|
|||
|
||||
/* Store data */
|
||||
if (run_mode == RUN_INTERACTIVE)
|
||||
gimp_set_data (PLUG_IN_NAME, &bmvals, sizeof (bumpmap_vals_t));
|
||||
gimp_set_data (name, &bmvals, sizeof (bumpmap_vals_t));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -465,6 +508,7 @@ bumpmap (void)
|
|||
guchar *src_row, *dest_row;
|
||||
gint y;
|
||||
gint progress;
|
||||
gint tmp;
|
||||
|
||||
#if 0
|
||||
g_print ("bumpmap: waiting... (pid %d)\n", getpid ());
|
||||
|
@ -479,6 +523,9 @@ bumpmap (void)
|
|||
else
|
||||
bm_drawable = drawable;
|
||||
|
||||
if (!bm_drawable)
|
||||
return;
|
||||
|
||||
/* Get image information */
|
||||
bm_width = gimp_drawable_width (bm_drawable->id);
|
||||
bm_height = gimp_drawable_height (bm_drawable->id);
|
||||
|
@ -486,10 +533,11 @@ bumpmap (void)
|
|||
bm_has_alpha = gimp_drawable_has_alpha (bm_drawable->id);
|
||||
|
||||
/* Initialize offsets */
|
||||
if (bmvals.yofs < 0)
|
||||
yofs2 = bm_height - (-bmvals.yofs % bm_height);
|
||||
tmp = bmvals.yofs + sel_y1;
|
||||
if (tmp < 0)
|
||||
yofs2 = bm_height - (- tmp % bm_height);
|
||||
else
|
||||
yofs2 = bmvals.yofs % bm_height;
|
||||
yofs2 = tmp % bm_height;
|
||||
|
||||
yofs1 = (yofs2 + bm_height - 1) % bm_height;
|
||||
yofs3 = (yofs2 + 1) % bm_height;
|
||||
|
@ -529,7 +577,10 @@ bumpmap (void)
|
|||
gimp_pixel_rgn_get_row (&src_rgn, src_row, sel_x1, y, sel_width);
|
||||
|
||||
bumpmap_row (src_row, dest_row, sel_width, img_bpp, img_has_alpha,
|
||||
bm_row1, bm_row2, bm_row3, bm_width, bmvals.xofs, ¶ms);
|
||||
bm_row1, bm_row2, bm_row3, bm_width, bmvals.xofs,
|
||||
bmvals.tiled,
|
||||
y == CLAMP (y, - bmvals.yofs, - bmvals.yofs + bm_height),
|
||||
¶ms);
|
||||
|
||||
gimp_pixel_rgn_set_row (&dest_rgn, dest_row, sel_x1, y, sel_width);
|
||||
|
||||
|
@ -621,8 +672,8 @@ bumpmap_init_params (bumpmap_params_t *params)
|
|||
}
|
||||
|
||||
static void
|
||||
bumpmap_row (guchar *src_row,
|
||||
guchar *dest_row,
|
||||
bumpmap_row (guchar *src,
|
||||
guchar *dest,
|
||||
gint width,
|
||||
gint bpp,
|
||||
gint has_alpha,
|
||||
|
@ -631,9 +682,10 @@ bumpmap_row (guchar *src_row,
|
|||
guchar *bm_row3,
|
||||
gint bm_width,
|
||||
gint bm_xofs,
|
||||
gboolean tiled,
|
||||
gboolean row_in_bumpmap,
|
||||
bumpmap_params_t *params)
|
||||
{
|
||||
guchar *src, *dest;
|
||||
gint xofs1, xofs2, xofs3;
|
||||
gint shade;
|
||||
gint ndotl;
|
||||
|
@ -641,31 +693,38 @@ bumpmap_row (guchar *src_row,
|
|||
gint x, k;
|
||||
gint pbpp;
|
||||
gint result;
|
||||
gint tmp;
|
||||
|
||||
if (has_alpha)
|
||||
pbpp = bpp - 1;
|
||||
else
|
||||
pbpp = bpp;
|
||||
|
||||
if (bm_xofs < 0)
|
||||
xofs2 = bm_width - (-bm_xofs % bm_width);
|
||||
tmp = bm_xofs + sel_x1;
|
||||
if (tmp < 0)
|
||||
xofs2 = bm_width - (- tmp % bm_width);
|
||||
else
|
||||
xofs2 = bm_xofs % bm_width;
|
||||
xofs2 = tmp % bm_width;
|
||||
|
||||
xofs1 = (xofs2 + bm_width - 1) % bm_width;
|
||||
xofs3 = (xofs2 + 1) % bm_width;
|
||||
|
||||
src = src_row;
|
||||
dest = dest_row;
|
||||
|
||||
for (x = 0; x < width; x++)
|
||||
{
|
||||
/* Calculate surface normal from bump map */
|
||||
|
||||
nx = (bm_row1[xofs1] + bm_row2[xofs1] + bm_row3[xofs1] -
|
||||
bm_row1[xofs3] - bm_row2[xofs3] - bm_row3[xofs3]);
|
||||
ny = (bm_row3[xofs1] + bm_row3[xofs2] + bm_row3[xofs3] -
|
||||
bm_row1[xofs1] - bm_row1[xofs2] - bm_row1[xofs3]);
|
||||
if (tiled || (row_in_bumpmap &&
|
||||
x == CLAMP (x, - tmp, - tmp + bm_width)))
|
||||
{
|
||||
nx = (bm_row1[xofs1] + bm_row2[xofs1] + bm_row3[xofs1] -
|
||||
bm_row1[xofs3] - bm_row2[xofs3] - bm_row3[xofs3]);
|
||||
ny = (bm_row3[xofs1] + bm_row3[xofs2] + bm_row3[xofs3] -
|
||||
bm_row1[xofs1] - bm_row1[xofs2] - bm_row1[xofs3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
nx = ny = 0;
|
||||
}
|
||||
|
||||
/* Shade */
|
||||
|
||||
|
@ -760,21 +819,24 @@ bumpmap_dialog (void)
|
|||
GtkWidget *top_vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *preview;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *sep;
|
||||
GtkWidget *abox;
|
||||
GtkWidget *pframe;
|
||||
GtkWidget *ptable;
|
||||
GtkWidget *scrollbar;
|
||||
GtkWidget *table;
|
||||
GtkWidget *right_vbox;
|
||||
GtkWidget *option_menu;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *button;
|
||||
GtkObject *adj;
|
||||
gint argc;
|
||||
gchar **argv;
|
||||
guchar *color_cube;
|
||||
gint i;
|
||||
gint row;
|
||||
gint argc;
|
||||
gchar **argv;
|
||||
guchar *color_cube;
|
||||
gint i;
|
||||
gint row;
|
||||
|
||||
#if 0
|
||||
g_print ("bumpmap: waiting... (pid %d)\n", getpid ());
|
||||
|
@ -825,28 +887,50 @@ bumpmap_dialog (void)
|
|||
gtk_widget_show (hbox);
|
||||
|
||||
/* Preview */
|
||||
frame = gtk_frame_new (_("Preview"));
|
||||
gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
||||
abox = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
|
||||
gtk_container_add (GTK_CONTAINER (frame), abox);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), abox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (abox);
|
||||
|
||||
ptable = gtk_table_new (2, 2, FALSE);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (ptable), 4);
|
||||
gtk_container_add (GTK_CONTAINER (abox), ptable);
|
||||
gtk_widget_show (ptable);
|
||||
|
||||
pframe = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (pframe), GTK_SHADOW_IN);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (pframe), 4);
|
||||
gtk_container_add (GTK_CONTAINER (abox), pframe);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (pframe), 0);
|
||||
gtk_table_attach (GTK_TABLE (ptable), pframe, 0, 1, 0, 1,
|
||||
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0);
|
||||
gtk_widget_show (pframe);
|
||||
|
||||
bmint.preview_width = MIN (sel_width, PREVIEW_SIZE);
|
||||
bmint.preview_height = MIN (sel_height, PREVIEW_SIZE);
|
||||
|
||||
bmint.preview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
bmint.preview = preview = gtk_preview_new (GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size (GTK_PREVIEW (bmint.preview),
|
||||
bmint.preview_width, bmint.preview_height);
|
||||
gtk_container_add (GTK_CONTAINER (pframe), bmint.preview);
|
||||
gtk_widget_show (bmint.preview);
|
||||
|
||||
bmint.preview_adj_x =
|
||||
gtk_adjustment_new (0, 0, sel_width, 1, 10, bmint.preview_width);
|
||||
if (sel_width > PREVIEW_SIZE)
|
||||
{
|
||||
scrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (bmint.preview_adj_x));
|
||||
gtk_table_attach (GTK_TABLE (ptable), scrollbar, 0, 1, 1, 2,
|
||||
GTK_FILL | GTK_EXPAND, 0, 0, 0);
|
||||
gtk_widget_show (scrollbar);
|
||||
}
|
||||
|
||||
bmint.preview_adj_y =
|
||||
gtk_adjustment_new (0, 0, sel_height, 1, 10, bmint.preview_height);
|
||||
if (sel_height > PREVIEW_SIZE)
|
||||
{
|
||||
scrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (bmint.preview_adj_y));
|
||||
gtk_table_attach (GTK_TABLE (ptable), scrollbar, 1, 2, 0,1,
|
||||
0, GTK_FILL | GTK_EXPAND, 0, 0);
|
||||
gtk_widget_show (scrollbar);
|
||||
}
|
||||
|
||||
gtk_widget_set_events (bmint.preview,
|
||||
GDK_BUTTON_PRESS_MASK |
|
||||
|
@ -856,6 +940,12 @@ bumpmap_dialog (void)
|
|||
gtk_signal_connect (GTK_OBJECT (bmint.preview), "event",
|
||||
(GtkSignalFunc) dialog_preview_events,
|
||||
NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (bmint.preview_adj_x), "value_changed",
|
||||
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
|
||||
&bmint.preview_xofs);
|
||||
gtk_signal_connect (GTK_OBJECT (bmint.preview_adj_y), "value_changed",
|
||||
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
|
||||
&bmint.preview_yofs);
|
||||
|
||||
dialog_init_preview ();
|
||||
|
||||
|
@ -880,10 +970,9 @@ bumpmap_dialog (void)
|
|||
gtk_widget_show (sep);
|
||||
|
||||
/* Compensate darkening */
|
||||
|
||||
button = gtk_check_button_new_with_label (_("Compensate for Darkening"));
|
||||
gtk_box_pack_start (GTK_BOX (right_vbox), button, FALSE, FALSE, 0);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button),
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
|
||||
bmvals.compensate ? TRUE : FALSE);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "toggled",
|
||||
GTK_SIGNAL_FUNC (dialog_compensate_callback),
|
||||
|
@ -893,13 +982,23 @@ bumpmap_dialog (void)
|
|||
/* Invert bumpmap */
|
||||
button = gtk_check_button_new_with_label (_("Invert Bumpmap"));
|
||||
gtk_box_pack_start (GTK_BOX (right_vbox), button, FALSE, FALSE, 0);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button),
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
|
||||
bmvals.invert ? TRUE : FALSE);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "toggled",
|
||||
GTK_SIGNAL_FUNC (dialog_invert_callback),
|
||||
NULL);
|
||||
gtk_widget_show (button);
|
||||
|
||||
/* Tile bumpmap */
|
||||
button = gtk_check_button_new_with_label (_("Tile Bumpmap"));
|
||||
gtk_box_pack_start (GTK_BOX (right_vbox), button, FALSE, FALSE, 0);
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
|
||||
bmvals.tiled ? TRUE : FALSE);
|
||||
gtk_signal_connect (GTK_OBJECT (button), "toggled",
|
||||
GTK_SIGNAL_FUNC (dialog_tiled_callback),
|
||||
NULL);
|
||||
gtk_widget_show (button);
|
||||
|
||||
frame = gtk_frame_new (_("Parameter Settings"));
|
||||
gtk_box_pack_start (GTK_BOX (top_vbox), frame, FALSE, FALSE, 0);
|
||||
gtk_widget_show (frame);
|
||||
|
@ -958,7 +1057,7 @@ bumpmap_dialog (void)
|
|||
GTK_SIGNAL_FUNC (dialog_dscale_update),
|
||||
&bmvals.elevation);
|
||||
|
||||
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, row++,
|
||||
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, row,
|
||||
_("Depth:"), SCALE_WIDTH, 0,
|
||||
bmvals.depth, 1.0, 65.0, 1.0, 5.0, 0,
|
||||
TRUE, 0, 0,
|
||||
|
@ -966,24 +1065,28 @@ bumpmap_dialog (void)
|
|||
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
|
||||
&bmvals.depth);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (table), row++, 8);
|
||||
|
||||
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, row++,
|
||||
_("X Offset:"), SCALE_WIDTH, 0,
|
||||
bmvals.xofs, -1000.0, 1001.0, 1.0, 10.0, 0,
|
||||
TRUE, 0, 0,
|
||||
NULL, NULL);
|
||||
bmint.offset_adj_x = adj =
|
||||
gimp_scale_entry_new (GTK_TABLE (table), 0, row++,
|
||||
_("X Offset:"), SCALE_WIDTH, 0,
|
||||
bmvals.xofs, -1000.0, 1001.0, 1.0, 10.0, 0,
|
||||
TRUE, 0, 0,
|
||||
NULL, NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
|
||||
&bmvals.xofs);
|
||||
|
||||
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, row++,
|
||||
_("Y Offset:"), SCALE_WIDTH, 0,
|
||||
bmvals.yofs, -1000.0, 1001.0, 1.0, 10.0, 0,
|
||||
TRUE, 0, 0,
|
||||
NULL, NULL);
|
||||
bmint.offset_adj_y = adj =
|
||||
gimp_scale_entry_new (GTK_TABLE (table), 0, row,
|
||||
_("Y Offset:"), SCALE_WIDTH, 0,
|
||||
bmvals.yofs, -1000.0, 1001.0, 1.0, 10.0, 0,
|
||||
TRUE, 0, 0,
|
||||
NULL, NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
|
||||
&bmvals.yofs);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (table), row++, 8);
|
||||
|
||||
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, row++,
|
||||
_("Waterlevel:"), SCALE_WIDTH, 0,
|
||||
|
@ -1007,9 +1110,6 @@ bumpmap_dialog (void)
|
|||
|
||||
gtk_widget_show (dialog);
|
||||
|
||||
dialog_new_bumpmap ();
|
||||
dialog_update_preview ();
|
||||
|
||||
gtk_main ();
|
||||
gdk_flush ();
|
||||
|
||||
|
@ -1094,6 +1194,7 @@ dialog_preview_events (GtkWidget *widget,
|
|||
switch (bevent->button)
|
||||
{
|
||||
case 1:
|
||||
case 2:
|
||||
if (bevent->state & GDK_SHIFT_MASK)
|
||||
bmint.drag_mode = DRAG_BUMPMAP;
|
||||
else
|
||||
|
@ -1141,14 +1242,41 @@ dialog_preview_events (GtkWidget *widget,
|
|||
bmint.preview_xofs = CLAMP (bmint.preview_xofs - dx,
|
||||
0,
|
||||
sel_width - bmint.preview_width);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (bmint.preview_adj_x),
|
||||
&bmint.preview_xofs);
|
||||
gtk_adjustment_set_value (GTK_ADJUSTMENT (bmint.preview_adj_x),
|
||||
bmint.preview_xofs);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (bmint.preview_adj_x),
|
||||
&bmint.preview_xofs);
|
||||
bmint.preview_yofs = CLAMP (bmint.preview_yofs - dy,
|
||||
0,
|
||||
sel_height - bmint.preview_height);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (bmint.preview_adj_y),
|
||||
&bmint.preview_yofs);
|
||||
gtk_adjustment_set_value (GTK_ADJUSTMENT (bmint.preview_adj_y),
|
||||
bmint.preview_yofs);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (bmint.preview_adj_y),
|
||||
&bmint.preview_yofs);
|
||||
|
||||
break;
|
||||
|
||||
case DRAG_BUMPMAP:
|
||||
bmvals.xofs = CLAMP (bmvals.xofs - dx, -1000, 1000);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (bmint.offset_adj_x),
|
||||
&bmvals.xofs);
|
||||
gtk_adjustment_set_value (GTK_ADJUSTMENT (bmint.offset_adj_x),
|
||||
bmvals.xofs);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (bmint.offset_adj_x),
|
||||
&bmvals.xofs);
|
||||
|
||||
bmvals.yofs = CLAMP (bmvals.yofs - dy, -1000, 1000);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (bmint.offset_adj_y),
|
||||
&bmvals.yofs);
|
||||
gtk_adjustment_set_value (GTK_ADJUSTMENT (bmint.offset_adj_y),
|
||||
bmvals.yofs);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (bmint.offset_adj_y),
|
||||
&bmvals.yofs);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1156,6 +1284,7 @@ dialog_preview_events (GtkWidget *widget,
|
|||
}
|
||||
|
||||
dialog_update_preview ();
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -1168,11 +1297,16 @@ dialog_preview_events (GtkWidget *widget,
|
|||
static void
|
||||
dialog_new_bumpmap (void)
|
||||
{
|
||||
gint i;
|
||||
gint yofs;
|
||||
static gboolean first_call = TRUE;
|
||||
GtkAdjustment *adj;
|
||||
gint i;
|
||||
gint yofs;
|
||||
gint bump_offset_x;
|
||||
gint bump_offset_y;
|
||||
gint draw_offset_y;
|
||||
gint draw_offset_x;
|
||||
|
||||
/* Get drawable */
|
||||
|
||||
if (bmint.bm_drawable && (bmint.bm_drawable != drawable))
|
||||
gimp_drawable_detach (bmint.bm_drawable);
|
||||
|
||||
|
@ -1181,13 +1315,45 @@ dialog_new_bumpmap (void)
|
|||
else
|
||||
bmint.bm_drawable = drawable;
|
||||
|
||||
/* Get sizes */
|
||||
if (!bmint.bm_drawable)
|
||||
return;
|
||||
|
||||
/* Get sizes */
|
||||
bmint.bm_width = gimp_drawable_width (bmint.bm_drawable->id);
|
||||
bmint.bm_height = gimp_drawable_height (bmint.bm_drawable->id);
|
||||
bmint.bm_bpp = gimp_drawable_bpp (bmint.bm_drawable->id);
|
||||
bmint.bm_has_alpha = gimp_drawable_has_alpha (bmint.bm_drawable->id);
|
||||
|
||||
if (!first_call || bmvals.bumpmap_id == -1)
|
||||
{
|
||||
gimp_drawable_offsets (bmint.bm_drawable->id, &bump_offset_x, &bump_offset_y);
|
||||
gimp_drawable_offsets (drawable->id, &draw_offset_x, &draw_offset_y);
|
||||
|
||||
bmvals.xofs = draw_offset_x - bump_offset_x;
|
||||
bmvals.yofs = draw_offset_y - bump_offset_y;
|
||||
}
|
||||
|
||||
if (first_call)
|
||||
first_call = FALSE;
|
||||
|
||||
adj = (GtkAdjustment *) bmint.offset_adj_x;
|
||||
if (adj)
|
||||
{
|
||||
adj->value = bmvals.xofs;
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (adj), &bmvals.xofs);
|
||||
gtk_adjustment_value_changed (adj);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (adj), &bmvals.xofs);
|
||||
}
|
||||
|
||||
adj = (GtkAdjustment *) bmint.offset_adj_y;
|
||||
if (adj)
|
||||
{
|
||||
adj->value = bmvals.yofs;
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (adj), &bmvals.yofs);
|
||||
gtk_adjustment_value_changed (adj);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (adj), &bmvals.yofs);
|
||||
}
|
||||
|
||||
/* Initialize pixel region */
|
||||
|
||||
gimp_pixel_rgn_init (&bmint.bm_rgn, bmint.bm_drawable,
|
||||
|
@ -1200,16 +1366,16 @@ dialog_new_bumpmap (void)
|
|||
if (yofs < 0)
|
||||
yofs = bmint.bm_height - (-yofs % bmint.bm_height);
|
||||
else
|
||||
yofs %= bmint.bm_height;
|
||||
yofs = yofs % bmint.bm_height;
|
||||
|
||||
bmint.bm_yofs = yofs;
|
||||
|
||||
for (i = 0; i < (bmint.preview_height + 2); i++)
|
||||
{
|
||||
if (bmint.bm_rows[i])
|
||||
g_free(bmint.bm_rows[i]);
|
||||
g_free (bmint.bm_rows[i]);
|
||||
|
||||
bmint.bm_rows[i] = g_malloc(bmint.bm_width * bmint.bm_bpp * sizeof(guchar));
|
||||
bmint.bm_rows[i] = g_new (guchar, bmint.bm_width * bmint.bm_bpp);
|
||||
}
|
||||
|
||||
bumpmap_init_params (&bmint.params);
|
||||
|
@ -1243,8 +1409,18 @@ dialog_update_preview (void)
|
|||
{
|
||||
bumpmap_row (bmint.src_rows[y] + 4 * xofs, dest_row,
|
||||
bmint.preview_width, 4, TRUE,
|
||||
bmint.bm_rows[y], bmint.bm_rows[y + 1], bmint.bm_rows[y + 2],
|
||||
bmint.bm_width, xofs + bmvals.xofs, &bmint.params);
|
||||
/* bmint.bm_rows[(y + sel_y1) % bmint.bm_height], */
|
||||
/* bmint.bm_rows[(y + sel_y1 + 1) % bmint.bm_height], */
|
||||
/* bmint.bm_rows[(y + sel_y1 + 2) % bmint.bm_height], */
|
||||
bmint.bm_rows[y],
|
||||
bmint.bm_rows[y + 1],
|
||||
bmint.bm_rows[y + 2],
|
||||
bmint.bm_width, xofs + bmvals.xofs,
|
||||
bmvals.tiled,
|
||||
y == CLAMP (y,
|
||||
- bmvals.yofs - bmint.preview_yofs - sel_y1 ,
|
||||
- bmvals.yofs - bmint.preview_yofs - sel_y1 + bmint.bm_height),
|
||||
&bmint.params);
|
||||
|
||||
/* Paint row */
|
||||
|
||||
|
@ -1410,7 +1586,7 @@ dialog_get_rows (GPixelRgn *pr,
|
|||
tile_width = gimp_tile_width();
|
||||
tile_height = gimp_tile_height();
|
||||
|
||||
bpp = pr->bpp;
|
||||
bpp = pr->bpp;
|
||||
|
||||
xstart = x;
|
||||
ystart = y;
|
||||
|
@ -1459,8 +1635,10 @@ dialog_fill_src_rows (gint start,
|
|||
gint how_many,
|
||||
gint yofs)
|
||||
{
|
||||
gint x, y;
|
||||
guchar *sp, *p;
|
||||
gint x;
|
||||
gint y;
|
||||
guchar *sp;
|
||||
guchar *p;
|
||||
|
||||
dialog_get_rows (&bmint.src_rgn,
|
||||
bmint.src_rows + start,
|
||||
|
@ -1508,6 +1686,13 @@ dialog_fill_bumpmap_rows (gint start,
|
|||
gint remaining;
|
||||
gint this_pass;
|
||||
|
||||
/* Adapt to offset of selection */
|
||||
yofs += sel_y1;
|
||||
if (yofs < 0)
|
||||
yofs = bmint.bm_height - (-yofs % bmint.bm_height);
|
||||
else
|
||||
yofs %= bmint.bm_height;
|
||||
|
||||
buf_row_ofs = start;
|
||||
remaining = how_many;
|
||||
|
||||
|
@ -1561,6 +1746,17 @@ dialog_invert_callback (GtkWidget *widget,
|
|||
dialog_update_preview ();
|
||||
}
|
||||
|
||||
static void
|
||||
dialog_tiled_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
bmvals.tiled = GTK_TOGGLE_BUTTON (widget)->active;
|
||||
|
||||
bumpmap_init_params (&bmint.params);
|
||||
dialog_fill_bumpmap_rows (0, bmint.preview_height + 2, bmint.bm_yofs);
|
||||
dialog_update_preview ();
|
||||
}
|
||||
|
||||
static void
|
||||
dialog_map_type_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
|
|
Loading…
Reference in New Issue