More than 2000 lines of code less in app/, instead of
if (instance->member)
{
g_object_unref/g_free/g_whatever (instance->member);
instance->member = NULL;
}
we now simply use
g_clear_object/pointer (&instance->member);
Fix GimpAirbrush to not keep a GimpSymmetry instance around across
paint strokes. The symmetry refs its drawable but lacks the code of
dropping the reference when the drawable is removed from the image, or
the image is closed.
Also cleaned up gimp_airbrush_paint() a bit.
You can now set any paint tool to mirror painting relatively
horizontal/vertical axis or a central point (any combination of these 3
symmetries).
This has been implemented as a new multi-stroke core, where every stroke
is actually handled as a multi-stroke (default of size 1).
This is also the first usage of custom guides for symmetry guiding.
Current version has to be activated in the playground.
- don't include <gdk-pixbuf/gdk-pixbuf.h> in headers in app/
- instead, include it in many .c files instead of <glib-object.h>,
finally acknowledging the fact that app/ depends on gdk-pixbuf almost
globally
- fix up includes as if libgimpbase depended in GIO, which it soon will
This was decided in a discussion with guiguru on irc
some time ago. However, one element is missing. The
rate slider needs to be disabled when motion only is
enabled, because it has no effect.
* app/paint/gimppaintoptions.c: Add initialization for fading dynamics. Add fading related variables similar to Random. Adjust get_dynamics_mix function. Add fading calculation in get_dynamics_x functions. Adjust get_dynamic_x functions for fade dynamics.
* app/paint/gimppaintoptions.h: Add fading_options in GimpDynamicOptions.
* app/tools/gimppaintoptions-gui.c: Add the function fading_options_gui.
* app/paint/gimpclone.c
* app/paint/gimpdodgeburn.c
* app/paint/gimperaser.c
* app/paint/gimpheal.c
* app/paint/gimppaintbrush.c
* app/paint/gimpsmudge.c
* app/paint/gimpairbrush.c
* app/paint/gimpbrushcore.c
* app/paint/gimpconvolve.c: Adjust function calls. get_dynamic_opacity function calls were adjusted to have one more parameter, paint_core->pixel_dist.
some key words:
get_dynamic_
pixel_dist
paint_core->pixel_dist
* app/paint/gimppaintcore.[ch]: add
gimp_paint_core_{get|set}_{current|last}_coords(), add "const GimpCoords*"
parameter to ::paint() which gets core->cur_coords passed.
* app/paint/gimpsourcecore.[ch]: add "const GimpCoords*" to ::motion().
* app/paint/gimpbrushcore.c: use the new coords getters/setters instead
of accessing GimpPaintCore members directly.
* app/paint/gimpairbrush.c
* app/paint/gimpclone.c
* app/paint/gimpconvolve.c
* app/paint/gimpdodgeburn.c
* app/paint/gimperaser.c
* app/paint/gimpheal.c
* app/paint/gimpink.c
* app/paint/gimppaintbrush.[ch]
* app/paint/gimpperspectiveclone.c
* app/paint/gimpsmudge.c: change implementations of GimpPaintCore::paint()
and GimpSourceCore::motion() accordingly. app/paint/ is now virtually
free of direct access to the paint core's coords members. More to come...
2009-01-17 Michael Natterer <mitch@gimp.org>
* all files with a GPL header and all COPYING files:
Change licence to GPLv3 (and to LGPLv3 for libgimp).
Cleaned up some copyright headers and regenerated the parsers in
the ImageMap plugin.
svn path=/trunk/; revision=27913
2008-10-09 Michael Natterer <mitch@gimp.org>
Add GEGL_CFLAGS and #includes as if gimpdrawable.h and gimpimage.h
had a GEGL dependency (they will have in the next commit, but I
wanted to keep the commit separate).
* app/dialogs/Makefile.am
* app/file/Makefile.am
* app/gui/Makefile.am
* app/menus/Makefile.am
* app/paint/Makefile.am
* app/plug-in/Makefile.am
* app/text/Makefile.am
* app/vectors/Makefile.am
* app/widgets/Makefile.am
* app/xcf/Makefile.am: add GEGL_CFLAGS.
* app/actions/*.c
* app/core/*.c
* app/dialogs/*.c
* app/display/*.c
* app/file/*.c
* app/gui/*.c
* app/menus/*.c
* app/paint/*.c
* app/pdb/gimppdb-utils.c
* app/pdb/gimpprocedure.c
* app/plug-in/*.c
* app/text/*.c
* app/tools/*.c
* app/vectors/*.c
* app/widgets/*.c
* app/xcf/*.c: add <gegl.h> or replace <glib-object.h> by <gegl.h>
to all files which include a drawable subclass or gimpimage.h
* tools/pdbgen/app.pl: include <gegl.h> instead of <glib-object.h>
in all generated files.
* app/pdb/*-cmds.c: regenerated.
* data/images/gimp-splash.png: the goat is still sleeping.
By Aurore Derriennic.
svn path=/trunk/; revision=27202
2008-05-10 Michael Natterer <mitch@gimp.org>
Applied modified patch from Alexia Death which adds velocity
support to paint tools in the spirit of the pressure support we
already have. Fixes bug #529431.
* app/display/gimpdisplayshell-coords.c
(gimp_display_shell_eval_event): tweak velocity calculation to
work in screen coordinates.
* app/paint/gimppaintoptions.[ch]: add velocity options in the
same way as there are pressure options. Add utility functions
which return dynamic opatity and dynamic rate according to the the
option's settings and some GimpCoords' pressure and velocity.
* app/tools/gimppaintoptions-gui.c: add GUI for the velocity
options.
* app/paint/gimpbrushcore.h: remove PRESSURE_SCALE define, it's
now in gimppaintoptions.h.
* app/paint/gimpbrushcore.c (gimp_brush_core_interpolate):
inerpolate velocity too.
(gimp_brush_core_calc_brush_scale): take velocity into account.
(gimp_brush_core_get_brush_mask): always pressurize the mask in
the GIMP_BRUSH_PRESSURE because there always is velocity (unlike
pressure which is only there on tablets).
* app/paint/gimpairbrush.c
* app/paint/gimpclone.c
* app/paint/gimpconvolve.c
* app/paint/gimpdodgeburn.c
* app/paint/gimperaser.c
* app/paint/gimpheal.c
* app/paint/gimppaintbrush.c
* app/paint/gimpsmudge.c: get opacity and rate from the new paint
options utility functions which take both pressure and velocity
into account.
* app/paint/gimppaintbrush.c: take velocity into account when
calculating the gradient color offset.
* app/paint/gimpairbrush.c: do some additional fiddling with
velocity in the asynchronous airbrush timeout.
* app/paint/gimpairbrushoptions.c: override the velocity-size
property and have it default to FALSE.
svn path=/trunk/; revision=25604
2005-12-27 Michael Natterer <mitch@gimp.org>
Fixed incomplete core/ui separation of paint tools and paint
methods:
* app/core/core-enums.h
* app/core/gimpcontext.[ch]: added a "paint-info" property and API
so the current paint method can be selected without the need for
an active tool.
(gimp_context_real_set_tool): set the paint-info to
tool_info->paint_info so the paint method follows the active tool
just as the active image follows the active display.
* app/core/gimp.h (struct Gimp)
* app/core/gimppaintinfo.[ch]: added "standard_paint_info" API
and stuff to be consistent with other context object properties.
* app/paint/gimp-paint.c: set the paintbrush as
standard_paint_info.
* app/core/gimpstrokedesc.c (gimp_stroke_desc_new): removed the
hack of falling back to the paintbrush when there is no active
tool and use the active paint method instead. Fall back to the
standard paint method if there is no active one.
(nothing in the core uses the active tool any more now).
* app/widgets/gimpdeviceinfo.h: add the paint info to the
properties which are saved in devicerc.
Added identifiers (names) and stock-ids to GimpPaintInfo:
* app/core/gimppaintinfo.[ch] (gimp_paint_info_new): added
identifier and stock-id parameters.
* app/core/gimptoolinfo.c (gimp_tool_info_new): removed the hack
of setting the paint-info stock-id from the tool-info stock-id.
* app/paint/paint-types.h
* app/paint/gimp-paint.c: changed GimpPaintRegisterCallback
accordingly.
* app/tools/gimp-tools.c (gimp_tools_register): changed paint
info names accordingly.
* app/paint/*.c (gimp_*_register): pass identifier and stock-id
accordingly.
2003-07-15 Michael Natterer <mitch@gimp.org>
* app/paint/gimppaintoptions.[ch]: took the fade options out of
GimpGradientOptions and added them to the new GimpFadeOptions
struct. Added a GObject::finalize() implementation.
* app/paint/gimppaintbrush.[ch]: changed accordingly. Made
gimp_paintbrush_motion() a protected function and renamed it to
_gimp_paintbrush_motion() added a "gdouble opacity" parameter so
an initial brush opacity can be passed in by subclasses.
* app/paint/gimpairbrush.[ch]: derive it from GimpPaintbrush so it
gets all its rendering features. Removed own rendering code and
use _gimp_paintbrush_motion(), passing airbrush_options->pressure
as initial opacity. Removed all static variables.
* app/tools/gimpairbrushtool.[ch]
* app/tools/gimppenciltool.[ch]: derive them from GimpPaintbrushTool.
* app/tools/gimppaintoptions-gui.c: changed accordingly. Added the
full paintbrush options overkill to the airbrush GUI. Cleanup.
* app/tools/gimperasertool.c: forgot to remove the "Hard Edge"
toggle here.
2003-07-14 Michael Natterer <mitch@gimp.org>
* app/paint/gimperaseroptions.[ch]: removed "gboolean hard"
member/property...
* app/paint/gimppaintoptions.[ch]: ...and added it here. Added
gimp_paint_options_get_brush_mode() utility function.
* app/paint/gimpairbrush.c
* app/paint/gimpclone.c
* app/paint/gimpconvolve.c
* app/paint/gimpdodgeburn.c
* app/paint/gimperaser.c
* app/paint/gimppaintbrush.c
* app/paint/gimppaintcore.h
* app/paint/gimppencil.c
* app/paint/gimpsmudge.c: use the new utility funtion where
appropriate. Removed trailing whitespace.
* app/tools/gimpdrawtool.[ch] (gimp_paint_tool_draw_boundary):
changed offset parameters from gint to gdouble so we can show the
brush preview at sub-pixel positions.
* app/tools/gimppainttool.c: use sub-pixel coordinates for the
brush preview if paint_options->hard is FALSE (doesn't work for
the pencil yet).
The new brush preview unveiled that the positioning of even-sized
brushes if off by 0.5 for soft brush application mode and off by
1.0 for hard application mode:
* app/paint/gimppaintcore.[ch] (gimp_paint_core_subsample_mask):
offset painting by 0.5 pixels on the brushes' even sized axes by
shuffling the subsample matrices around.
Added "subsampling" for HARD brush application mode since a pixel
of an even sized brush can snap to up to four different image
pixels depending on the sub-pixel coordinates of the stroke.
2003-03-25 Sven Neumann <sven@gimp.org>
* Makefile.am
* gimpintl.h: removed this header file.
* gimpmiscui.c: include libgimp-intl.h.
* gimp.c (gimp_main): call setlocale() and bind to the libgimp
textdomain so that plug-ins don't need to do that explicitely.
* libgimp/stdplugins-intl.h: added the functionality that used to
live in gimpintl.h and removed the libgimp related stuff. Got rid
of the INIT_I18N_UI() macro.
* plug-ins/*/*.c: removed all occurances of INIT_I18N_UI().
Plug-ins simply call INIT_I18N() once in their run() function.
* plug-ins/script-fu/script-fu-intl.h: added the functionality
that used to live in gimpintl.h and removed the libgimp related
stuff.
* app/Makefile.am
* app/gimp-intl.h: new file that defines the gettext macros for
the GIMP core.
* app/*/*.c: include gimp-intl.h instead of libgimp/gimpintl.h.
* plug-ins/script-fu/scripts/test-sphere.scm: fixed typos.
2003-03-24 Michael Natterer <mitch@gimp.org>
* app/paint/paint-enums.[ch]: register GimpPaintApplicationMode
with the type system.
* app/paint/gimppaintoptions.[ch]: replaced "gboolean incremental"
with "GimpPaintApplicationMode application_mode"
* app/paint/gimpairbrush.c
* app/paint/gimperaser.c
* app/paint/gimppaintbrush.c
* app/paint/gimppencil.c: changed accordingly.
* tools/pdbgen/pdb/paint_tools.pdb: ditto. Set all paint options
values using g_object_set().
* app/widgets/gimppropwidgets.[ch]: added
gimp_prop_enum_check_button_new() which can represent two
specified enum values and renders itself "inconsistent" for all
other values.
* app/tools/paint_options.c: use it for the "Incremental" toggle.
* app/pdb/paint_tools_cmds.c
* tools/pdbgen/enums.pl: regenerated.