2007-03-14 Martin Nordholts <martinn@svn.gnome.org>
Made brushes upscalable by using scale_region. Downscaling still
uses functions in app/base/brush-scale.c (because of better
performance). Parametric brushes of course recalculates masks
instead of using bitmap scaling. Fixes bug #65030.
* app/core/gimpbrush.[ch]: Added a private scale_buf method which
uses scale_region (with GIMP_INTERPOLATION_LINEAR) to scale its
masks and pixmaps. Also added public virtual method scale_size to
GimpBrush (overridden by GimpBrushGenerated) which calculates the
buffer sizes for a given brush scaled with a given scale.
* app/core/gimpbrushgenerated.c: Implemented the new scale_size
method inherited from GimpBrush, and modified
gimp_brush_generated_calc to use this helper function.
* app/tools/gimppaintoptions-gui.c (gimp_paint_options_gui): Made
the brush Scale-slider logarithmic.
* app/paint/gimppaintoptions.c (gimp_paint_options_class_init):
Changed Scale scale to [0.0, 10.0].
* app/paint/gimpbrushcore.c:
(gimp_brush_core_calc_brush_size): Refactored 'get brush size' code
to where it belongs, in GimpBrush-classes, and allowed scales
larger than 1.0.
svn path=/trunk/; revision=22113
2007-03-12 Michael Natterer <mitch@gimp.org>
* app/core/gimpbrush.[ch]
* app/core/gimpbrushgenerated.c
* app/tools/gimppaintoptions-gui.c
* app/base/brush-scale.[ch]
* app/base/temp-buf.[ch]
* app/paint/gimppaintoptions.c
* app/paint/gimpbrushcore.c: revert last commit. The patch needs
more review and it's easier to start from quare one than have
patches on top of patches.
svn path=/trunk/; revision=22101
2007-03-11 Michael Schumacher <schumaml@cvs.gnome.org>
Made brushes scalable (both up and down) by using existing
scaling routines, and also refactored some brush-code. Patch by
Martin Nordholts. Fixes bug #65030.
* app/paint/gimpbrushcore.c:
(gimp_brush_core_calc_brush_length_scale) Refactored 'get brush
size' code to where it belongs, in GimpBrush-classes, and renamed
gimp_brush_core_calc_brush_size to
gimp_brush_core_calc_brush_length_scale.
* app/paint/gimppaintoptions.c (gimp_paint_options_class_init):
Changed Scale scale to [0.0, 100.0].
* app/base/temp-buf.[ch] (mask_buf_new): Change signature to also
take a bpp parameter.
* app/base/brush-scale.[ch]: Changed brush_scale_(mask|pixmap) to
the new brush_scale_buf, which uses existing scaling routines
(scale_region) instead of dedicated down-scaling only routines.
* app/tools/gimppaintoptions-gui.c (gimp_paint_options_gui): Made
the brush Scale-slider logarithmic.
* app/core/gimpbrushgenerated.c: Implemented the new
get_scaled_size method inherited from GimpBrush, and modified
gimp_brush_generated_calc to use this helper function.
* app/core/gimpbrush.[ch]: Added public virtual method
get_scaled_size to GimpBrush, overridden by GimpBrushGenerated,
which calculates the buffer sizes for a given brush scaled with a
given scale. Also changed calls to brush_scale_(mask|pixmap) to
the new brush_scale_buf.
svn path=/trunk/; revision=22099
2007-03-09 Michael Natterer <mitch@gimp.org>
* app/core/core-types.h: include "libgimpmath/gimpmathtypes.h"
instead of "libgimpmath/gimpmath.h".
* app/core/gimpbrush.h
* app/paint/gimppaintcore.h
* app/paint/gimpperspectiveclone.h
* app/text/gimptext.h
* app/tools/gimptransformtool.h: include gimpvector.h and
gimpmatrix.h explicitely where they are needed in public structs.
* app/*/*.c
* tools/pdbgen/pdb/paths.pdb: include "libgimpmath/gimpmath.h"
where needed.
* app/pdb/paths_cmds.c: regenerated.
svn path=/trunk/; revision=22084
2006-12-18 Sven Neumann <sven@gimp.org>
* app/paint/gimpbrushcore.c (gimp_brush_core_interpolate): applied
patch from Aurore D that improves jitter for brushes with an angle
close to 90° (bug #386061).
2006-12-10 Michael Natterer <mitch@gimp.org>
* app/paint/gimpbrushcore.c: also scale the brush's spacing (by
scaling its x_axis and y_axis). Addresses bug #65030.
2006-11-22 Michael Natterer <mitch@gimp.org>
* app/paint/gimpbrushcore.[ch]: applied modified patch from Adrian
Likins which adds a GRand to the GimpBrushCore struct and uses it
instead of using g_random_foo() functions. Fixes bug #377981.
2006-11-16 Michael Natterer <mitch@gimp.org>
Made all brushes scalable from the tool options. So far only
downscaling is supported since we lack an algorithm for bitmap
brush upscaling. Addresses bug #65030.
* app/paint/gimppaintoptions.[ch]: added "brush-scale" property.
* app/paint/gimpbrushcore.[ch]: separate pressure logic from brush
scaling logic and take paint_options->brush_scale into account.
Added gimp_brush_core_create_bound_segs() which returns BoundSegs
of the correctly scaled brush mask for the brush preview on the
canvas.
* app/tools/gimpbrushtool.c: use gimp_brush_core_create_bound_segs()
instead of doing this here (also removes all knowledge about lowlevel
stuff from this file). Connect to notify::brush-scale of the
paint options and invalidate the brush core's brush accordingly.
* app/tools/gimppaintoptions-gui.c: added brush scale slider.
2006-11-09 Michael Natterer <mitch@gimp.org>
Properly abstract brush scaling:
* app/core/gimpbrush.[ch]: added virtual functions
GimpBrush::scale_mask() and ::scale_pixmap() and default
implementations which call the functions in base/brush-scale.c.
* app/core/gimpbrushgenerated.c: factored out brush calculation to
an internal utility function and call that function from ::dirty()
and from the new ::scale_mask().
* app/core/gimpbrushcore.c: use gimp_brush_scale_mask/pixmap()
instead of using the lowlevel scale functions directly. Fixes the
uglyness that we were scaling generated brushes instead of simply
recalculating them in the right size.
2006-09-26 Michael Natterer <mitch@gimp.org>
* app/paint/gimppaintcore.[ch]: added GError** parameter to
GimpPaintCore::start().
* app/tools/gimppainttool.c (button_press): display the error in
the statusbar.
* app/paint/gimppaintcore-stroke.c: pass a NULL error, effectively
swallowing mssages. Will fix that later.
* app/paint/gimpbrushcore.c
* app/paint/gimpclone.c
* app/paint/gimpsourcecore.c: changed accordingly. Set the error
instead of calling g_message().
* app/paint/gimpheal.c
* app/paint/gimpperspectiveclone.c: implement start() and bail out
early on indexed drawables instead of showing a g_message() in
other functions that are called later.
* app/tools/gimptool.[ch]: added GError** to GimpTool::initialize().
* app/tools/gimptool.c (gimp_tool_initialize): display the error
in the statusbar. Keep the external API GError-free.
* app/tools/gimprectangletool.[ch]: added GError** to
gimp_rectangle_tool_initialize().
* app/tools/gimpbrightnesscontrasttool.c
* app/tools/gimpcolorbalancetool.c
* app/tools/gimpcolorizetool.c
* app/tools/gimpcroptool.c
* app/tools/gimpcurvestool.c
* app/tools/gimphuesaturationtool.c
* app/tools/gimpimagemaptool.c
* app/tools/gimplevelstool.c
* app/tools/gimpperspectiveclonetool.c
* app/tools/gimpposterizetool.c
* app/tools/gimpthresholdtool.c
* app/tools/gimptransformtool.c: changed accordingly. Set the
errors in initialize() instead of using gimp_message().
* app/tools/gimpblendtool.c: implement initialize() and bail out
early on indexed images instead of showing a gimp_message() in
button_press().
* gimp/app/paint/gimpbrushcore.c
* gimp/app/paint/gimpbrushcore.h
* gimp/app/paint/gimpclone.c
* gimp/app/paint/gimppaintbrush.c
* gimp/app/paint/gimppaintoptions.c
* gimp/app/paint/gimppaintoptions.h
* gimp/app/tools/gimppaintoptions-gui.c: Apply patch from
Adrian Likins to add "jitter" to paint tools (bug #163049),
with small fixes for coding style and default jitter set
to 0.2 instead of 0.0.
2005-09-03 Michael Natterer <mitch@gimp.org>
* app/base/pixel-region.[ch]: some general cleanup.
(pixel_region_init_temp_buf)
(pixel_region_init_data): new functions which initialize pixel
regions on TempBufs and on raw contiguous arrays of pixel data.
(pixel_region_configure): fixed a bug that has probably been there
forever: when processing contiguous (non-tiled) data, interpret
the original x and y coordinates of the region as offsets into
the data. Before this fix, the initial x and y were simply ignored
(by using them in a broken way), thus always forcing the upper
left corner of the region being the beginning of the passed data.
Lots of code was working around this problem by setting the
pixel_region's data pointer to the proper starting pixel of the
region in the middle the buffer.
* libgimp/gimppixelrgn.c: some general cleanup.
(gimp_pixel_rgn_configure): same fix as above. Fortunately, nobody
seems to know that libgimp pixel regions can be used on arrays of
data, just as core ones. Only two plug-ins were using this
feature, and they are antique and written by spencer and federico,
respectively. They both don't use offsets into the buffers and are
not affected by this change. It's highly unlikely that anybody out
there knows/uses this feature, so it can IMHO be safely changed.
* app/base/temp-buf.c
* app/core/gimpbuffer.c
* app/core/gimpdrawable-combine.c
* app/core/gimpdrawable-preview.c
* app/core/gimpimage-preview.c
* app/core/gimplayer.c
* app/paint/gimpbrushcore.c
* app/paint/gimpclone.c
* app/paint/gimpconvolve.c
* app/paint/gimpdodgeburn.c
* app/paint/gimppaintcore.c
* app/paint/gimpsmudge.c
* app/tools/gimpiscissorstool.c
* app/tools/gimppainttool.c: use the pixel_region_init_foo()
functions instead of initializing regions of TempBufs and raw data
manually. Removed lots of workarounds for the broken offset
handling. The changed places of code are much more readable now.
2005-01-03 Michael Natterer <mitch@gimp.org>
* app/paint/gimpbrushcore.c
* app/paint/gimppaintoptions.[ch]
* app/tools/gimppaintoptions-gui.c: renamed "invsize" to
"inverse-size" and reordered it to be after "size".
* app/paint/gimpbrushcore.c
* app/paint/gimppaintoptions.c
* app/paint/gimppaintoptions.h
* app/tools/gimppaintoptions-gui.c: reverted last change, and
applied full patch from Dave Ahlswede in bug #149576.
2004-12-31 Sven Neumann <sven@gimp.org>
* tools/kernelgen.c: fixed rounding so that all brush kernels are
created with a constant sum of 256.
* app/paint/gimpbrushcore-kernels.h: regenerated.
* app/paint/gimpbrushcore.c (gimp_brush_core_subsample_mask): use
the constant defined un app/paint/gimpbrushcore-kernels.h. Should
give a tiny speedup.
2004-12-28 Sven Neumann <sven@gimp.org>
* app/paint/gimpbrushcore.c (gimp_brush_core_subsample_mask):
reverted Bill's change since it is obviously not the right fix.
Allocate the array larger to avoid the crash. We need to
investigate bug #161323 further.
2004-06-23 Michael Natterer <mitch@gimp.org>
* app/paint/gimpbrushcore.[ch]: added signal "set-brush" which is
G_SIGNAL_RUN_LAST so we can connect before and after the default
implementation. Moved the brush setting and outline invalidation
stuff to its default implementation. Also remember the outline's
width and height. Call gimp_brush_core_set_brush() from
gimp_brush_core_invalidate_cache() so "set-brush" is emitted
whenever a generated brush becomes dirty.
* app/tools/gimppainttool.c (gimp_paint_tool_button_press): don't
pause/resume but rather stop/start the draw_tool. Fixes straight
line preview aretefacts.
(gimp_paint_tool_oper_update): set the brush_core's brush before
starting the draw_tool.
(gimp_paint_tool_draw): never free the brush_core's cached brush
outline because the brush_core does that by itself now.
(gimp_paint_tool_set_brush)
(gimp_paint_tool_set_brush_after): new callbacks which pause and
resume the draw_tool. Fixes brush outline artefacts when modifying
the current brush e.g. by using the mouse wheel.
2004-06-14 Michael Natterer <mitch@gimp.org>
* app/paint/gimppaintcore.[ch]: added new virtual function
GimpPaintCore::post_paint() and call it after calling
GimpPaintCore::paint().
* app/paint/gimpbrushcore.[ch]: renamed brush_core->grr_brush
to brush_core->main_brush and reset brush_core->brush
to brush_core->main_brush in GimpPaintCore::post_paint().
* app/paint/gimpbrushcore.c
* app/paint/gimppaintcore-stroke.c
* app/tools/gimppainttool.c: removed all code which restores
the brush_core's old brush after painting since post_paint()
does this automatically now.
* app/paint/gimpclone.[ch]: moved static variables to the
GimpClone struct.
2004-05-26 Michael Natterer <mitch@gimp.org>
* app/paint/gimppaintcore.[ch] (gimp_paint_core_paste)
(gimp_paint_core_replace): replaced the "MaskBuf *paint_mask"
parameters by "PixelRegion *mask_bufPR", so subclasses can pass in
any kind of paint_mask buffer and are not restricted to MaskBufs.
Also removes implicit knowledge about the MaskBuf originating from
a brush in paint_mask_to_canvas_buf() and _to_canvas_tiles() which
don't need to offset the mask by width/2 height/2 any more.
Made gimp_paint_core_validate_undo_tiles() and
gimp_paint_core_validate_canvas_tiles() protected functions.
* app/paint/gimpbrushcore.c (gimp_brush_core_paste_canvas)
(gimp_brush_core_replace_canvas): create correctly positioned
PixelRegions from the MaskBufs before passing them to the
paint_core.
2004-05-26 Michael Natterer <mitch@gimp.org>
* app/paint/gimppaintcore.[ch]: removed "gdouble scale" parameter
and added "GimpPaintOptions" in GimpPaintCore::get_paint_area().
Check if virtual functions exist befoe calling them.
* app/paint/gimpbrushcore.[ch]: added "gdouble scale" to GimpBrushCore
and "gboolean use_scale" to GimpBrushCoreClass (defaults to TRUE).
Set scale from paint_options in GimpPaintCore::get_paint_area().
Removed "scale" parameter from gimp_brush_core_paste_canvas()
and _replace_canvas().
* app/paint/gimpsmudge.c (gimp_smudge_class_init): set use_scale
to FALSE.
* app/paint/gimpclone.c
* app/paint/gimpconvolve.c
* app/paint/gimpdodgeburn.c
* app/paint/gimperaser.c
* app/paint/gimppaintbrush.c: removed all scale calculations and
simply pass paint_options to GimpPaintCore::get_paint_area().