1997-11-25 06:05:25 +08:00
/* The GIMP -- an image manipulation program
* Copyright ( C ) 1995 Spencer Kimball and Peter Mattis
*
* 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
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
1998-04-13 13:44:11 +08:00
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
1997-11-25 06:05:25 +08:00
*/
# include <stdlib.h>
# include "appenv.h"
1998-07-09 13:31:06 +08:00
# include "gimpbrushlist.h"
1997-11-25 06:05:25 +08:00
# include "drawable.h"
# include "errors.h"
# include "gdisplay.h"
# include "paint_funcs.h"
# include "paint_core.h"
# include "palette.h"
# include "airbrush.h"
# include "selection.h"
1999-04-13 01:55:06 +08:00
# include "tool_options_ui.h"
1997-11-25 06:05:25 +08:00
# include "tools.h"
1998-06-29 08:24:44 +08:00
# include "gimage.h"
1997-11-25 06:05:25 +08:00
Lots of ii8n stuff here and some additions to the de.po. Applied
Wed Oct 14 17:46:15 EDT 1998 Adrian Likins <adrian@gimp.org>
* app/*, po/de.po, de/POTFILES.in, libgimp/gimpintl.h:
Lots of ii8n stuff here and some additions to the de.po.
Applied gimp-egger-981005-1 ,gimp-egger-981006-1,
gimp-egger-981007-1, gimp-egger-981008-1,
gimp-egger-981009-1.patch, gimp-egger-981010-1.patch
* plug-in/guillotine/guillotine.c: added the coordinates
of the split images from the original image to the title.
ie foo.jpg (0,0) for the image in the topleft.
* plug-in/script-fu/scripts/neon-logo.scm,
perspective-shadow.scm, predator.scm,rendermap.scm,
ripply-anim.scm, select_to_image.scm,swirltile.scm,
xach-effect.scm: updated scripts to use new script-fu stuff
wooo boy! a big un!
in testing this, it looks like some of the po files are busted.
but the code stuff seems okay.
-adrian
1998-10-15 07:23:52 +08:00
# include "libgimp/gimpintl.h"
1999-04-09 06:25:54 +08:00
/* The maximum amount of pressure that can be exerted */
# define MAX_PRESSURE 0.075
# define OFF 0
# define ON 1
1997-11-25 06:05:25 +08:00
1999-04-09 06:25:54 +08:00
/* the airbrush structures */
typedef struct _AirbrushTimeout AirbrushTimeout ;
1997-11-25 06:05:25 +08:00
struct _AirbrushTimeout
{
PaintCore * paint_core ;
1998-01-22 15:02:57 +08:00
GimpDrawable * drawable ;
1997-11-25 06:05:25 +08:00
} ;
typedef struct _AirbrushOptions AirbrushOptions ;
struct _AirbrushOptions
{
1999-04-13 01:55:06 +08:00
ToolOptions tool_options ;
1999-04-09 06:25:54 +08:00
1999-04-13 01:55:06 +08:00
double rate ;
double rate_d ;
GtkObject * rate_w ;
double pressure ;
double pressure_d ;
GtkObject * pressure_w ;
1997-11-25 06:05:25 +08:00
} ;
1999-04-13 01:55:06 +08:00
/* the airbrush tool options */
1999-04-09 06:25:54 +08:00
static AirbrushOptions * airbrush_options = NULL ;
1997-11-25 06:05:25 +08:00
/* local variables */
1999-04-09 06:25:54 +08:00
static gint timer ; /* timer for successive paint applications */
static int timer_state = OFF ; /* state of airbrush tool */
1997-11-25 06:05:25 +08:00
static AirbrushTimeout airbrush_timeout ;
1999-04-09 06:25:54 +08:00
static double non_gui_pressure ;
/* forward function declarations */
static void airbrush_motion ( PaintCore * , GimpDrawable * , double ) ;
static gint airbrush_time_out ( gpointer ) ;
static Argument * airbrush_invoker ( Argument * ) ;
/* functions */
1997-11-25 06:05:25 +08:00
static void
1999-04-13 01:55:06 +08:00
airbrush_options_reset ( void )
1999-04-09 06:25:54 +08:00
{
AirbrushOptions * options = airbrush_options ;
gtk_adjustment_set_value ( GTK_ADJUSTMENT ( options - > rate_w ) ,
options - > rate_d ) ;
gtk_adjustment_set_value ( GTK_ADJUSTMENT ( options - > pressure_w ) ,
options - > pressure_d ) ;
}
1997-11-25 06:05:25 +08:00
static AirbrushOptions *
1999-04-13 01:55:06 +08:00
airbrush_options_new ( void )
1997-11-25 06:05:25 +08:00
{
AirbrushOptions * options ;
1999-04-13 01:55:06 +08:00
GtkWidget * vbox ;
GtkWidget * table ;
GtkWidget * label ;
GtkWidget * scale ;
/* the new airbrush tool options structure */
1997-11-25 06:05:25 +08:00
options = ( AirbrushOptions * ) g_malloc ( sizeof ( AirbrushOptions ) ) ;
1999-04-13 01:55:06 +08:00
tool_options_init ( ( ToolOptions * ) options ,
_ ( " Airbrush Options " ) ,
airbrush_options_reset ) ;
1999-04-09 06:25:54 +08:00
options - > rate = options - > rate_d = 80.0 ;
options - > pressure = options - > pressure_d = 10.0 ;
1997-11-25 06:05:25 +08:00
/* the main vbox */
1999-04-13 01:55:06 +08:00
vbox = options - > tool_options . main_vbox ;
1997-11-25 06:05:25 +08:00
/* the rate scale */
1999-04-09 06:25:54 +08:00
table = gtk_table_new ( 2 , 2 , FALSE ) ;
gtk_table_set_col_spacing ( GTK_TABLE ( table ) , 0 , 6 ) ;
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 1 ) ;
gtk_box_pack_start ( GTK_BOX ( vbox ) , table , FALSE , FALSE , 0 ) ;
label = gtk_label_new ( _ ( " Rate: " ) ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 1.0 , 1.0 ) ;
gtk_table_attach ( GTK_TABLE ( table ) , label , 0 , 1 , 0 , 1 ,
GTK_SHRINK | GTK_FILL , GTK_SHRINK | GTK_FILL , 0 , 0 ) ;
1997-11-25 06:05:25 +08:00
gtk_widget_show ( label ) ;
1999-04-09 06:25:54 +08:00
options - > rate_w =
gtk_adjustment_new ( options - > rate_d , 0.0 , 150.0 , 1.0 , 1.0 , 0.0 ) ;
scale = gtk_hscale_new ( GTK_ADJUSTMENT ( options - > rate_w ) ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , scale , 1 , 2 , 0 , 1 ) ;
gtk_scale_set_value_pos ( GTK_SCALE ( scale ) , GTK_POS_TOP ) ;
gtk_range_set_update_policy ( GTK_RANGE ( scale ) , GTK_UPDATE_DELAYED ) ;
gtk_signal_connect ( GTK_OBJECT ( options - > rate_w ) , " value_changed " ,
1999-04-13 01:55:06 +08:00
( GtkSignalFunc ) tool_options_double_adjustment_update ,
& options - > rate ) ;
1999-04-09 06:25:54 +08:00
gtk_widget_show ( scale ) ;
1997-11-25 06:05:25 +08:00
/* the pressure scale */
1999-04-09 06:25:54 +08:00
label = gtk_label_new ( _ ( " Pressure: " ) ) ;
gtk_misc_set_alignment ( GTK_MISC ( label ) , 1.0 , 1.0 ) ;
gtk_table_attach ( GTK_TABLE ( table ) , label , 0 , 1 , 1 , 2 ,
GTK_SHRINK | GTK_FILL , GTK_SHRINK | GTK_FILL , 0 , 0 ) ;
1997-11-25 06:05:25 +08:00
gtk_widget_show ( label ) ;
1999-04-09 06:25:54 +08:00
options - > pressure_w =
gtk_adjustment_new ( options - > pressure_d , 0.0 , 100.0 , 1.0 , 1.0 , 0.0 ) ;
scale = gtk_hscale_new ( GTK_ADJUSTMENT ( options - > pressure_w ) ) ;
gtk_table_attach_defaults ( GTK_TABLE ( table ) , scale , 1 , 2 , 1 , 2 ) ;
gtk_scale_set_value_pos ( GTK_SCALE ( scale ) , GTK_POS_TOP ) ;
gtk_range_set_update_policy ( GTK_RANGE ( scale ) , GTK_UPDATE_DELAYED ) ;
gtk_signal_connect ( GTK_OBJECT ( options - > pressure_w ) , " value_changed " ,
1999-04-13 01:55:06 +08:00
( GtkSignalFunc ) tool_options_double_adjustment_update ,
& options - > pressure ) ;
1999-04-09 06:25:54 +08:00
gtk_widget_show ( scale ) ;
gtk_widget_show ( table ) ;
1997-11-25 06:05:25 +08:00
return options ;
}
1999-04-13 01:55:06 +08:00
Tool *
tools_new_airbrush ( )
{
Tool * tool ;
PaintCore * private ;
/* The tool options */
if ( ! airbrush_options )
{
airbrush_options = airbrush_options_new ( ) ;
tools_register ( AIRBRUSH , ( ToolOptions * ) airbrush_options ) ;
}
tool = paint_core_new ( AIRBRUSH ) ;
private = ( PaintCore * ) tool - > private ;
private - > paint_func = airbrush_paint_func ;
return tool ;
}
1997-11-25 06:05:25 +08:00
void *
airbrush_paint_func ( PaintCore * paint_core ,
1998-01-22 15:02:57 +08:00
GimpDrawable * drawable ,
1997-11-25 06:05:25 +08:00
int state )
{
1998-07-09 13:31:06 +08:00
GimpBrushP brush ;
1997-11-25 06:05:25 +08:00
1998-01-22 15:02:57 +08:00
if ( ! drawable )
return NULL ;
1997-11-25 06:05:25 +08:00
brush = get_active_brush ( ) ;
switch ( state )
{
case INIT_PAINT :
1998-08-20 08:35:40 +08:00
/* timer_state = OFF; */
1998-08-16 06:03:32 +08:00
if ( timer_state = = ON )
{
Lots of ii8n stuff here and some additions to the de.po. Applied
Wed Oct 14 17:46:15 EDT 1998 Adrian Likins <adrian@gimp.org>
* app/*, po/de.po, de/POTFILES.in, libgimp/gimpintl.h:
Lots of ii8n stuff here and some additions to the de.po.
Applied gimp-egger-981005-1 ,gimp-egger-981006-1,
gimp-egger-981007-1, gimp-egger-981008-1,
gimp-egger-981009-1.patch, gimp-egger-981010-1.patch
* plug-in/guillotine/guillotine.c: added the coordinates
of the split images from the original image to the title.
ie foo.jpg (0,0) for the image in the topleft.
* plug-in/script-fu/scripts/neon-logo.scm,
perspective-shadow.scm, predator.scm,rendermap.scm,
ripply-anim.scm, select_to_image.scm,swirltile.scm,
xach-effect.scm: updated scripts to use new script-fu stuff
wooo boy! a big un!
in testing this, it looks like some of the po files are busted.
but the code stuff seems okay.
-adrian
1998-10-15 07:23:52 +08:00
g_warning ( _ ( " killing stray timer, please report to lewing@gimp.org " ) ) ;
1998-08-16 06:03:32 +08:00
gtk_timeout_remove ( timer ) ;
}
1997-11-25 06:05:25 +08:00
timer_state = OFF ;
break ;
case MOTION_PAINT :
if ( timer_state = = ON )
gtk_timeout_remove ( timer ) ;
timer_state = OFF ;
1998-01-22 15:02:57 +08:00
airbrush_motion ( paint_core , drawable , airbrush_options - > pressure ) ;
1997-11-25 06:05:25 +08:00
if ( airbrush_options - > rate ! = 0.0 )
{
airbrush_timeout . paint_core = paint_core ;
1998-01-22 15:02:57 +08:00
airbrush_timeout . drawable = drawable ;
1997-11-25 06:05:25 +08:00
timer = gtk_timeout_add ( ( 10000 / airbrush_options - > rate ) ,
airbrush_time_out , NULL ) ;
timer_state = ON ;
}
break ;
case FINISH_PAINT :
if ( timer_state = = ON )
gtk_timeout_remove ( timer ) ;
timer_state = OFF ;
break ;
default :
break ;
}
return NULL ;
}
void
tools_free_airbrush ( Tool * tool )
{
if ( timer_state = = ON )
gtk_timeout_remove ( timer ) ;
timer_state = OFF ;
1998-08-16 06:03:32 +08:00
paint_core_free ( tool ) ;
1997-11-25 06:05:25 +08:00
}
static gint
airbrush_time_out ( gpointer client_data )
{
/* service the timer */
airbrush_motion ( airbrush_timeout . paint_core ,
1998-01-22 15:02:57 +08:00
airbrush_timeout . drawable ,
1997-11-25 06:05:25 +08:00
airbrush_options - > pressure ) ;
gdisplays_flush ( ) ;
/* restart the timer */
if ( airbrush_options - > rate ! = 0.0 )
return TRUE ;
else
return FALSE ;
}
static void
airbrush_motion ( PaintCore * paint_core ,
1998-01-22 15:02:57 +08:00
GimpDrawable * drawable ,
1997-11-25 06:05:25 +08:00
double pressure )
{
1998-06-09 10:06:33 +08:00
gint opacity ;
1997-11-25 06:05:25 +08:00
GImage * gimage ;
TempBuf * area ;
unsigned char col [ MAX_CHANNELS ] ;
1998-01-22 15:02:57 +08:00
if ( ! drawable )
return ;
if ( ! ( gimage = drawable_gimage ( drawable ) ) )
1997-11-25 06:05:25 +08:00
return ;
1998-01-22 15:02:57 +08:00
gimage_get_foreground ( gimage , drawable , col ) ;
1997-11-25 06:05:25 +08:00
1998-01-22 15:02:57 +08:00
if ( ! ( area = paint_core_get_paint_area ( paint_core , drawable ) ) )
1997-11-25 06:05:25 +08:00
return ;
/* color the pixels */
1998-01-25 09:24:46 +08:00
col [ area - > bytes - 1 ] = OPAQUE_OPACITY ;
1997-11-25 06:05:25 +08:00
/* color the pixels */
color_pixels ( temp_buf_data ( area ) , col ,
area - > width * area - > height , area - > bytes ) ;
1998-06-09 10:06:33 +08:00
opacity = pressure * ( paint_core - > curpressure / 0.5 ) ;
if ( opacity > 255 )
opacity = 255 ;
1997-11-25 06:05:25 +08:00
/* paste the newly painted area to the image */
1998-01-22 15:02:57 +08:00
paint_core_paste_canvas ( paint_core , drawable ,
1998-06-09 10:06:33 +08:00
opacity ,
1998-07-09 13:31:06 +08:00
( int ) ( gimp_brush_get_opacity ( ) * 255 ) ,
gimp_brush_get_paint_mode ( ) ,
1997-11-25 06:05:25 +08:00
SOFT , CONSTANT ) ;
}
static void *
airbrush_non_gui_paint_func ( PaintCore * paint_core ,
1998-01-22 15:02:57 +08:00
GimpDrawable * drawable ,
1997-11-25 06:05:25 +08:00
int state )
{
1998-01-22 15:02:57 +08:00
airbrush_motion ( paint_core , drawable , non_gui_pressure ) ;
1997-11-25 06:05:25 +08:00
return NULL ;
}
/* The airbrush procedure definition */
ProcArg airbrush_args [ ] =
{
{ PDB_DRAWABLE ,
" drawable " ,
1998-12-26 02:22:01 +08:00
" the drawable "
1997-11-25 06:05:25 +08:00
} ,
{ PDB_FLOAT ,
" pressure " ,
1998-12-26 02:22:01 +08:00
" The pressure of the airbrush strokes: 0 <= pressure <= 100 "
1997-11-25 06:05:25 +08:00
} ,
{ PDB_INT32 ,
" num_strokes " ,
1998-12-26 02:22:01 +08:00
" number of stroke control points (count each coordinate as 2 points) "
1997-11-25 06:05:25 +08:00
} ,
{ PDB_FLOATARRAY ,
" strokes " ,
1998-12-26 02:22:01 +08:00
" array of stroke coordinates: {s1.x, s1.y, s2.x, s2.y, ..., sn.x, sn.y} "
1997-11-25 06:05:25 +08:00
}
} ;
ProcRecord airbrush_proc =
{
" gimp_airbrush " ,
1998-12-26 02:22:01 +08:00
" Paint in the current brush with varying pressure. Paint application is time-dependent " ,
" This tool simulates the use of an airbrush. Paint pressure represents the relative intensity of the paint application. High pressure results in a thicker layer of paint while low pressure results in a thinner layer. " ,
1997-11-25 06:05:25 +08:00
" Spencer Kimball & Peter Mattis " ,
" Spencer Kimball & Peter Mattis " ,
" 1995-1996 " ,
PDB_INTERNAL ,
/* Input arguments */
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
4 ,
1997-11-25 06:05:25 +08:00
airbrush_args ,
/* Output arguments */
0 ,
NULL ,
/* Exec method */
{ { airbrush_invoker } } ,
} ;
static Argument *
airbrush_invoker ( Argument * args )
{
int success = TRUE ;
GImage * gimage ;
1998-01-22 15:02:57 +08:00
GimpDrawable * drawable ;
1997-11-25 06:05:25 +08:00
int num_strokes ;
double * stroke_array ;
int int_value ;
double fp_value ;
int i ;
1998-01-22 15:02:57 +08:00
drawable = NULL ;
1997-11-25 06:05:25 +08:00
num_strokes = 0 ;
/* the drawable */
if ( success )
{
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
int_value = args [ 0 ] . value . pdb_int ;
1998-01-22 15:02:57 +08:00
drawable = drawable_get_ID ( int_value ) ;
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
if ( drawable = = NULL )
1997-11-25 06:05:25 +08:00
success = FALSE ;
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
else
gimage = drawable_gimage ( drawable ) ;
1997-11-25 06:05:25 +08:00
}
/* pressure */
if ( success )
{
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
fp_value = args [ 1 ] . value . pdb_float ;
1997-11-25 06:05:25 +08:00
if ( fp_value > = 0.0 & & fp_value < = 100.0 )
non_gui_pressure = fp_value ;
else
success = FALSE ;
}
/* num strokes */
if ( success )
{
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
int_value = args [ 2 ] . value . pdb_int ;
1997-11-25 06:05:25 +08:00
if ( int_value > 0 )
num_strokes = int_value / 2 ;
else
success = FALSE ;
}
/* point array */
if ( success )
API-mega-break-it-all patch part one: removed the unnecessary PDB_IMAGE
* airbrush.c, blend.c, brightness_contrast.c, bucket_fill.c
by_color_select.c, channel_ops.c, clone.c, color_balance.c
color_picker.c, convolve.c, curves.c, desaturate.c, edit_cmds.c
equalize.c, eraser.c, flip_tool.c, fuzzy_select.c,
gimage_mask_cmds.c histogram_tool.c, hue_saturation.c, invert.c,
levels.c, pencil.c paintbrush.c, perspective_tool.c, posterize.c,
rotate_tool.c scale_tool.c, shear_tool.c, text_tool.c, threshold.c:
API-mega-break-it-all patch part one: removed the unnecessary
PDB_IMAGE argument from many functions.
Affected functions:
gimp_airbrush gimp_blend gimp_brightness_contrast gimp_bucket_fill
gimp_by_color_select gimp_channel_ops_offset gimp_clone gimp_color_balance
gimp_color_picker gimp_convolve gimp_curves_explicit gimp_curves_spline
gimp_desaturate gimp_edit_clear gimp_edit_copy gimp_edit_cut gimp_edit_fill
gimp_edit_paste gimp_edit_stroke gimp_equalize gimp_eraser
gimp_eraser_extended gimp_flip gimp_fuzzy_select gimp_histogram
gimp_hue_saturation gimp_invert gimp_levels gimp_paintbrush
gimp_paintbrush_extended gimp_pencil gimp_perspective gimp_posterize
gimp_rotate gimp_scale gimp_selection_float gimp_selection_layer_alpha
gimp_selection_load gimp_shear gimp_threshold
1998-11-14 04:40:00 +08:00
stroke_array = ( double * ) args [ 3 ] . value . pdb_pointer ;
1997-11-25 06:05:25 +08:00
if ( success )
/* init the paint core */
1998-01-22 15:02:57 +08:00
success = paint_core_init ( & non_gui_paint_core , drawable ,
1997-11-25 06:05:25 +08:00
stroke_array [ 0 ] , stroke_array [ 1 ] ) ;
if ( success )
{
/* set the paint core's paint func */
non_gui_paint_core . paint_func = airbrush_non_gui_paint_func ;
non_gui_paint_core . startx = non_gui_paint_core . lastx = stroke_array [ 0 ] ;
non_gui_paint_core . starty = non_gui_paint_core . lasty = stroke_array [ 1 ] ;
if ( num_strokes = = 1 )
1998-01-22 15:02:57 +08:00
airbrush_non_gui_paint_func ( & non_gui_paint_core , drawable , 0 ) ;
1997-11-25 06:05:25 +08:00
for ( i = 1 ; i < num_strokes ; i + + )
{
non_gui_paint_core . curx = stroke_array [ i * 2 + 0 ] ;
non_gui_paint_core . cury = stroke_array [ i * 2 + 1 ] ;
1998-01-22 15:02:57 +08:00
paint_core_interpolate ( & non_gui_paint_core , drawable ) ;
1997-11-25 06:05:25 +08:00
non_gui_paint_core . lastx = non_gui_paint_core . curx ;
non_gui_paint_core . lasty = non_gui_paint_core . cury ;
}
/* finish the painting */
1998-01-22 15:02:57 +08:00
paint_core_finish ( & non_gui_paint_core , drawable , - 1 ) ;
1997-11-25 06:05:25 +08:00
/* cleanup */
paint_core_cleanup ( ) ;
}
return procedural_db_return_args ( & airbrush_proc , success ) ;
}