2006-12-09 13:33:38 -08:00
|
|
|
/* GIMP - The GNU Image Manipulation Program
|
2002-02-21 08:02:30 -08:00
|
|
|
* Copyright (C) 1995-1999 Spencer Kimball and Peter Mattis
|
|
|
|
|
*
|
2009-01-17 14:28:01 -08:00
|
|
|
* This program is free software: you can redistribute it and/or modify
|
2002-02-21 08:02:30 -08:00
|
|
|
* it under the terms of the GNU General Public License as published by
|
2009-01-17 14:28:01 -08:00
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
2002-02-21 08:02:30 -08:00
|
|
|
* (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
|
2018-07-11 14:47:19 -07:00
|
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
2002-02-21 08:02:30 -08:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
2013-10-14 16:58:39 -07:00
|
|
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
2008-10-09 13:24:04 -07:00
|
|
|
#include <gegl.h>
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2003-07-16 04:25:37 -07:00
|
|
|
#include "libgimpbase/gimpbase.h"
|
2007-04-09 04:54:44 -07:00
|
|
|
#include "libgimpmath/gimpmath.h"
|
2005-01-25 11:11:26 -08:00
|
|
|
#include "libgimpconfig/gimpconfig.h"
|
2003-07-16 04:25:37 -07:00
|
|
|
|
2002-02-21 08:02:30 -08:00
|
|
|
#include "paint-types.h"
|
|
|
|
|
|
2003-02-05 06:39:40 -08:00
|
|
|
#include "core/gimp.h"
|
2018-07-06 03:31:06 -07:00
|
|
|
#include "core/gimpbrush-header.h"
|
2014-11-17 03:07:55 -08:00
|
|
|
#include "core/gimpbrushgenerated.h"
|
2003-07-16 04:25:37 -07:00
|
|
|
#include "core/gimpimage.h"
|
2009-10-10 15:19:14 -07:00
|
|
|
#include "core/gimpdynamics.h"
|
2009-10-11 06:41:54 -07:00
|
|
|
#include "core/gimpdynamicsoutput.h"
|
2003-07-22 07:24:11 -07:00
|
|
|
#include "core/gimpgradient.h"
|
2004-08-31 06:20:57 -07:00
|
|
|
#include "core/gimppaintinfo.h"
|
2002-11-27 14:55:03 -08:00
|
|
|
|
2018-06-25 15:30:12 -07:00
|
|
|
#include "gimpbrushcore.h"
|
2002-02-21 08:02:30 -08:00
|
|
|
#include "gimppaintoptions.h"
|
|
|
|
|
|
2009-03-19 13:40:43 -07:00
|
|
|
#include "gimp-intl.h"
|
|
|
|
|
|
2011-01-08 13:18:56 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_BRUSH_SIZE 20.0
|
|
|
|
|
#define DEFAULT_BRUSH_ASPECT_RATIO 0.0
|
|
|
|
|
#define DEFAULT_BRUSH_ANGLE 0.0
|
|
|
|
|
#define DEFAULT_BRUSH_SPACING 0.1
|
|
|
|
|
#define DEFAULT_BRUSH_HARDNESS 1.0 /* Generated brushes have their own */
|
|
|
|
|
#define DEFAULT_BRUSH_FORCE 0.5
|
2014-11-17 03:07:55 -08:00
|
|
|
|
2017-12-22 13:59:13 -08:00
|
|
|
#define DEFAULT_BRUSH_LINK_SIZE TRUE
|
|
|
|
|
#define DEFAULT_BRUSH_LINK_ASPECT_RATIO TRUE
|
|
|
|
|
#define DEFAULT_BRUSH_LINK_ANGLE TRUE
|
|
|
|
|
#define DEFAULT_BRUSH_LINK_SPACING TRUE
|
|
|
|
|
#define DEFAULT_BRUSH_LINK_HARDNESS TRUE
|
|
|
|
|
|
|
|
|
|
#define DEFAULT_BRUSH_LOCK_TO_VIEW FALSE
|
|
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_APPLICATION_MODE GIMP_PAINT_CONSTANT
|
|
|
|
|
#define DEFAULT_HARD FALSE
|
2009-02-08 04:55:20 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_USE_JITTER FALSE
|
|
|
|
|
#define DEFAULT_JITTER_AMOUNT 0.2
|
2010-11-24 13:34:00 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_DYNAMICS_EXPANDED FALSE
|
2010-11-24 13:34:00 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_FADE_LENGTH 100.0
|
|
|
|
|
#define DEFAULT_FADE_REVERSE FALSE
|
|
|
|
|
#define DEFAULT_FADE_REPEAT GIMP_REPEAT_NONE
|
|
|
|
|
#define DEFAULT_FADE_UNIT GIMP_UNIT_PIXEL
|
2009-02-08 04:55:20 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_GRADIENT_REVERSE FALSE
|
2018-04-13 13:33:16 -07:00
|
|
|
#define DEFAULT_GRADIENT_BLEND_SPACE GIMP_GRADIENT_BLEND_RGB_PERCEPTUAL
|
2018-07-12 02:39:42 -07:00
|
|
|
#define DEFAULT_GRADIENT_REPEAT GIMP_REPEAT_NONE
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DYNAMIC_MAX_VALUE 1.0
|
|
|
|
|
#define DYNAMIC_MIN_VALUE 0.0
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
#define DEFAULT_SMOOTHING_QUALITY 20
|
|
|
|
|
#define DEFAULT_SMOOTHING_FACTOR 50
|
2010-11-25 12:30:29 -08:00
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
enum
|
|
|
|
|
{
|
|
|
|
|
PROP_0,
|
2008-04-25 03:52:01 -07:00
|
|
|
|
2004-08-31 06:20:57 -07:00
|
|
|
PROP_PAINT_INFO,
|
2009-02-05 13:47:57 -08:00
|
|
|
|
2013-05-21 09:52:40 -07:00
|
|
|
PROP_USE_APPLICATOR, /* temp debug */
|
|
|
|
|
|
2010-10-29 12:57:26 -07:00
|
|
|
PROP_BRUSH_SIZE,
|
2009-04-25 10:53:09 -07:00
|
|
|
PROP_BRUSH_ASPECT_RATIO,
|
2009-02-05 13:47:57 -08:00
|
|
|
PROP_BRUSH_ANGLE,
|
2014-11-12 15:29:04 -08:00
|
|
|
PROP_BRUSH_SPACING,
|
2014-11-17 03:07:55 -08:00
|
|
|
PROP_BRUSH_HARDNESS,
|
|
|
|
|
PROP_BRUSH_FORCE,
|
2009-02-05 13:47:57 -08:00
|
|
|
|
2017-12-22 13:59:13 -08:00
|
|
|
PROP_BRUSH_LINK_SIZE,
|
|
|
|
|
PROP_BRUSH_LINK_ASPECT_RATIO,
|
|
|
|
|
PROP_BRUSH_LINK_ANGLE,
|
|
|
|
|
PROP_BRUSH_LINK_SPACING,
|
|
|
|
|
PROP_BRUSH_LINK_HARDNESS,
|
|
|
|
|
|
|
|
|
|
PROP_BRUSH_LOCK_TO_VIEW,
|
|
|
|
|
|
2003-03-24 09:58:28 -08:00
|
|
|
PROP_APPLICATION_MODE,
|
2003-07-14 07:50:41 -07:00
|
|
|
PROP_HARD,
|
2008-04-25 03:52:01 -07:00
|
|
|
|
2010-11-24 13:34:00 -08:00
|
|
|
PROP_USE_JITTER,
|
|
|
|
|
PROP_JITTER_AMOUNT,
|
|
|
|
|
|
|
|
|
|
PROP_DYNAMICS_EXPANDED,
|
|
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
PROP_FADE_LENGTH,
|
2009-12-06 10:03:39 -08:00
|
|
|
PROP_FADE_REVERSE,
|
|
|
|
|
PROP_FADE_REPEAT,
|
2003-02-07 09:12:21 -08:00
|
|
|
PROP_FADE_UNIT,
|
2008-04-25 03:52:01 -07:00
|
|
|
|
2003-07-22 07:24:11 -07:00
|
|
|
PROP_GRADIENT_REVERSE,
|
2018-04-13 13:33:16 -07:00
|
|
|
PROP_GRADIENT_BLEND_COLOR_SPACE,
|
2018-07-12 02:39:42 -07:00
|
|
|
PROP_GRADIENT_REPEAT,
|
2006-01-13 16:09:22 -08:00
|
|
|
|
|
|
|
|
PROP_BRUSH_VIEW_TYPE,
|
|
|
|
|
PROP_BRUSH_VIEW_SIZE,
|
2010-10-27 11:48:17 -07:00
|
|
|
PROP_DYNAMICS_VIEW_TYPE,
|
|
|
|
|
PROP_DYNAMICS_VIEW_SIZE,
|
2006-01-13 16:09:22 -08:00
|
|
|
PROP_PATTERN_VIEW_TYPE,
|
|
|
|
|
PROP_PATTERN_VIEW_SIZE,
|
|
|
|
|
PROP_GRADIENT_VIEW_TYPE,
|
2010-10-22 05:47:36 -07:00
|
|
|
PROP_GRADIENT_VIEW_SIZE,
|
|
|
|
|
|
|
|
|
|
PROP_USE_SMOOTHING,
|
2011-01-07 10:45:29 -08:00
|
|
|
PROP_SMOOTHING_QUALITY,
|
2017-12-22 13:59:13 -08:00
|
|
|
PROP_SMOOTHING_FACTOR
|
2003-02-07 09:12:21 -08:00
|
|
|
};
|
2002-02-21 08:02:30 -08:00
|
|
|
|
|
|
|
|
|
2015-10-14 14:02:07 -07:00
|
|
|
static void gimp_paint_options_config_iface_init (GimpConfigInterface *config_iface);
|
2015-06-14 11:43:45 -07:00
|
|
|
|
2018-06-25 15:30:12 -07:00
|
|
|
static void gimp_paint_options_dispose (GObject *object);
|
|
|
|
|
static void gimp_paint_options_finalize (GObject *object);
|
|
|
|
|
static void gimp_paint_options_set_property (GObject *object,
|
|
|
|
|
guint property_id,
|
|
|
|
|
const GValue *value,
|
|
|
|
|
GParamSpec *pspec);
|
|
|
|
|
static void gimp_paint_options_get_property (GObject *object,
|
|
|
|
|
guint property_id,
|
|
|
|
|
GValue *value,
|
|
|
|
|
GParamSpec *pspec);
|
|
|
|
|
|
|
|
|
|
static void gimp_paint_options_brush_changed (GimpContext *context,
|
|
|
|
|
GimpBrush *brush);
|
|
|
|
|
static void gimp_paint_options_brush_notify (GimpBrush *brush,
|
|
|
|
|
const GParamSpec *pspec,
|
|
|
|
|
GimpPaintOptions *options);
|
|
|
|
|
|
|
|
|
|
static GimpConfig * gimp_paint_options_duplicate (GimpConfig *config);
|
|
|
|
|
static gboolean gimp_paint_options_copy (GimpConfig *src,
|
|
|
|
|
GimpConfig *dest,
|
|
|
|
|
GParamFlags flags);
|
|
|
|
|
static void gimp_paint_options_reset (GimpConfig *config);
|
2015-06-14 11:43:45 -07:00
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
|
2015-06-14 11:43:45 -07:00
|
|
|
G_DEFINE_TYPE_WITH_CODE (GimpPaintOptions, gimp_paint_options,
|
|
|
|
|
GIMP_TYPE_TOOL_OPTIONS,
|
|
|
|
|
G_IMPLEMENT_INTERFACE (GIMP_TYPE_CONFIG,
|
|
|
|
|
gimp_paint_options_config_iface_init))
|
2003-02-07 09:12:21 -08:00
|
|
|
|
2005-12-07 13:11:53 -08:00
|
|
|
#define parent_class gimp_paint_options_parent_class
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2015-06-14 11:43:45 -07:00
|
|
|
static GimpConfigInterface *parent_config_iface = NULL;
|
|
|
|
|
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2003-07-14 07:50:41 -07:00
|
|
|
static void
|
2003-02-05 06:39:40 -08:00
|
|
|
gimp_paint_options_class_init (GimpPaintOptionsClass *klass)
|
2002-02-21 08:02:30 -08:00
|
|
|
{
|
2018-06-25 15:30:12 -07:00
|
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
|
GimpContextClass *context_class = GIMP_CONTEXT_CLASS (klass);
|
|
|
|
|
|
|
|
|
|
object_class->dispose = gimp_paint_options_dispose;
|
|
|
|
|
object_class->finalize = gimp_paint_options_finalize;
|
|
|
|
|
object_class->set_property = gimp_paint_options_set_property;
|
|
|
|
|
object_class->get_property = gimp_paint_options_get_property;
|
2015-01-05 15:30:35 -08:00
|
|
|
|
2018-06-25 15:30:12 -07:00
|
|
|
context_class->brush_changed = gimp_paint_options_brush_changed;
|
2003-02-07 09:12:21 -08:00
|
|
|
|
2004-08-31 06:20:57 -07:00
|
|
|
g_object_class_install_property (object_class, PROP_PAINT_INFO,
|
|
|
|
|
g_param_spec_object ("paint-info",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_TYPE_PAINT_INFO,
|
2006-01-18 12:29:40 -08:00
|
|
|
GIMP_PARAM_READWRITE |
|
2004-08-31 06:20:57 -07:00
|
|
|
G_PARAM_CONSTRUCT_ONLY));
|
|
|
|
|
|
2013-05-21 09:52:40 -07:00
|
|
|
g_object_class_install_property (object_class, PROP_USE_APPLICATOR,
|
|
|
|
|
g_param_spec_boolean ("use-applicator",
|
2016-02-11 14:44:07 -08:00
|
|
|
"Use GimpApplicator",
|
|
|
|
|
NULL,
|
2017-01-20 15:29:41 -08:00
|
|
|
FALSE,
|
2013-05-21 09:52:40 -07:00
|
|
|
G_PARAM_READWRITE |
|
|
|
|
|
G_PARAM_CONSTRUCT));
|
|
|
|
|
|
2016-02-11 14:44:07 -08:00
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_BRUSH_SIZE,
|
|
|
|
|
"brush-size",
|
|
|
|
|
_("Size"),
|
|
|
|
|
_("Brush Size"),
|
|
|
|
|
1.0, GIMP_BRUSH_MAX_SIZE, DEFAULT_BRUSH_SIZE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_BRUSH_ASPECT_RATIO,
|
|
|
|
|
"brush-aspect-ratio",
|
|
|
|
|
_("Aspect Ratio"),
|
|
|
|
|
_("Brush Aspect Ratio"),
|
|
|
|
|
-20.0, 20.0, DEFAULT_BRUSH_ASPECT_RATIO,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_BRUSH_ANGLE,
|
|
|
|
|
"brush-angle",
|
|
|
|
|
_("Angle"),
|
|
|
|
|
_("Brush Angle"),
|
|
|
|
|
-180.0, 180.0, DEFAULT_BRUSH_ANGLE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_BRUSH_SPACING,
|
|
|
|
|
"brush-spacing",
|
|
|
|
|
_("Spacing"),
|
|
|
|
|
_("Brush Spacing"),
|
|
|
|
|
0.01, 50.0, DEFAULT_BRUSH_SPACING,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_BRUSH_HARDNESS,
|
|
|
|
|
"brush-hardness",
|
|
|
|
|
_("Hardness"),
|
|
|
|
|
_("Brush Hardness"),
|
|
|
|
|
0.0, 1.0, DEFAULT_BRUSH_HARDNESS,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_BRUSH_FORCE,
|
|
|
|
|
"brush-force",
|
|
|
|
|
_("Force"),
|
|
|
|
|
_("Brush Force"),
|
|
|
|
|
0.0, 1.0, DEFAULT_BRUSH_FORCE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_BRUSH_LINK_SIZE,
|
|
|
|
|
"brush-link-size",
|
|
|
|
|
_("Link Size"),
|
|
|
|
|
_("Link brush size to brush native"),
|
|
|
|
|
DEFAULT_BRUSH_LINK_SIZE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_BRUSH_LINK_ASPECT_RATIO,
|
|
|
|
|
"brush-link-aspect-ratio",
|
|
|
|
|
_("Link Aspect Ratio"),
|
|
|
|
|
_("Link brush aspect ratio to brush native"),
|
|
|
|
|
DEFAULT_BRUSH_LINK_ASPECT_RATIO,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_BRUSH_LINK_ANGLE,
|
|
|
|
|
"brush-link-angle",
|
|
|
|
|
_("Link Angle"),
|
|
|
|
|
_("Link brush angle to brush native"),
|
|
|
|
|
DEFAULT_BRUSH_LINK_ANGLE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_BRUSH_LINK_SPACING,
|
|
|
|
|
"brush-link-spacing",
|
|
|
|
|
_("Link Spacing"),
|
|
|
|
|
_("Link brush spacing to brush native"),
|
|
|
|
|
DEFAULT_BRUSH_LINK_SPACING,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_BRUSH_LINK_HARDNESS,
|
|
|
|
|
"brush-link-hardness",
|
|
|
|
|
_("Link Hardness"),
|
|
|
|
|
_("Link brush hardness to brush native"),
|
|
|
|
|
DEFAULT_BRUSH_LINK_HARDNESS,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
2017-12-22 13:59:13 -08:00
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_BRUSH_LOCK_TO_VIEW,
|
|
|
|
|
"brush-lock-to-view",
|
|
|
|
|
_("Lock brush to view"),
|
2017-12-22 15:13:18 -08:00
|
|
|
_("Keep brush appearance fixed relative to the view"),
|
2017-12-22 13:59:13 -08:00
|
|
|
DEFAULT_BRUSH_LOCK_TO_VIEW,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
2016-02-11 14:44:07 -08:00
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_APPLICATION_MODE,
|
|
|
|
|
"application-mode",
|
|
|
|
|
_("Incremental"),
|
|
|
|
|
_("Every stamp has its own opacity"),
|
|
|
|
|
GIMP_TYPE_PAINT_APPLICATION_MODE,
|
|
|
|
|
DEFAULT_APPLICATION_MODE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_HARD,
|
|
|
|
|
"hard",
|
|
|
|
|
_("Hard edge"),
|
|
|
|
|
_("Ignore fuzziness of the current brush"),
|
|
|
|
|
DEFAULT_HARD,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_USE_JITTER,
|
|
|
|
|
"use-jitter",
|
|
|
|
|
_("Apply Jitter"),
|
|
|
|
|
_("Scatter brush as you paint"),
|
|
|
|
|
DEFAULT_USE_JITTER,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_JITTER_AMOUNT,
|
|
|
|
|
"jitter-amount",
|
|
|
|
|
_("Amount"),
|
|
|
|
|
_("Distance of scattering"),
|
|
|
|
|
0.0, 50.0, DEFAULT_JITTER_AMOUNT,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DYNAMICS_EXPANDED,
|
|
|
|
|
"dynamics-expanded",
|
|
|
|
|
_("Dynamics Options"),
|
|
|
|
|
NULL,
|
|
|
|
|
DEFAULT_DYNAMICS_EXPANDED,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_FADE_LENGTH,
|
|
|
|
|
"fade-length",
|
|
|
|
|
_("Fade length"),
|
|
|
|
|
_("Distance over which strokes fade out"),
|
|
|
|
|
0.0, 32767.0, DEFAULT_FADE_LENGTH,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_UNIT (object_class, PROP_FADE_UNIT,
|
|
|
|
|
"fade-unit",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
TRUE, TRUE, DEFAULT_FADE_UNIT,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_FADE_REVERSE,
|
|
|
|
|
"fade-reverse",
|
|
|
|
|
_("Reverse"),
|
|
|
|
|
_("Reverse direction of fading"),
|
|
|
|
|
DEFAULT_FADE_REVERSE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_FADE_REPEAT,
|
|
|
|
|
"fade-repeat",
|
|
|
|
|
_("Repeat"),
|
|
|
|
|
_("How fade is repeated as you paint"),
|
|
|
|
|
GIMP_TYPE_REPEAT_MODE,
|
|
|
|
|
DEFAULT_FADE_REPEAT,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_GRADIENT_REVERSE,
|
|
|
|
|
"gradient-reverse",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
DEFAULT_GRADIENT_REVERSE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
2018-04-13 13:33:16 -07:00
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_GRADIENT_BLEND_COLOR_SPACE,
|
|
|
|
|
"gradient-blend-color-space",
|
|
|
|
|
_("Blend Color Space"),
|
|
|
|
|
_("Which color space to use when blending RGB gradient segments"),
|
|
|
|
|
GIMP_TYPE_GRADIENT_BLEND_COLOR_SPACE,
|
|
|
|
|
DEFAULT_GRADIENT_BLEND_SPACE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
2018-07-12 02:39:42 -07:00
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_GRADIENT_REPEAT,
|
|
|
|
|
"gradient-repeat",
|
|
|
|
|
_("Repeat"),
|
|
|
|
|
NULL,
|
|
|
|
|
GIMP_TYPE_REPEAT_MODE,
|
|
|
|
|
DEFAULT_GRADIENT_REPEAT,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
2016-02-11 14:44:07 -08:00
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_BRUSH_VIEW_TYPE,
|
|
|
|
|
"brush-view-type",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_TYPE_VIEW_TYPE,
|
|
|
|
|
GIMP_VIEW_TYPE_GRID,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_INT (object_class, PROP_BRUSH_VIEW_SIZE,
|
|
|
|
|
"brush-view-size",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_VIEW_SIZE_TINY,
|
|
|
|
|
GIMP_VIEWABLE_MAX_BUTTON_SIZE,
|
|
|
|
|
GIMP_VIEW_SIZE_SMALL,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_DYNAMICS_VIEW_TYPE,
|
|
|
|
|
"dynamics-view-type",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_TYPE_VIEW_TYPE,
|
|
|
|
|
GIMP_VIEW_TYPE_LIST,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_INT (object_class, PROP_DYNAMICS_VIEW_SIZE,
|
|
|
|
|
"dynamics-view-size",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_VIEW_SIZE_TINY,
|
|
|
|
|
GIMP_VIEWABLE_MAX_BUTTON_SIZE,
|
|
|
|
|
GIMP_VIEW_SIZE_SMALL,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_PATTERN_VIEW_TYPE,
|
|
|
|
|
"pattern-view-type",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_TYPE_VIEW_TYPE,
|
|
|
|
|
GIMP_VIEW_TYPE_GRID,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_INT (object_class, PROP_PATTERN_VIEW_SIZE,
|
|
|
|
|
"pattern-view-size",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_VIEW_SIZE_TINY,
|
|
|
|
|
GIMP_VIEWABLE_MAX_BUTTON_SIZE,
|
|
|
|
|
GIMP_VIEW_SIZE_SMALL,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_ENUM (object_class, PROP_GRADIENT_VIEW_TYPE,
|
|
|
|
|
"gradient-view-type",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_TYPE_VIEW_TYPE,
|
|
|
|
|
GIMP_VIEW_TYPE_LIST,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_INT (object_class, PROP_GRADIENT_VIEW_SIZE,
|
|
|
|
|
"gradient-view-size",
|
|
|
|
|
NULL, NULL,
|
|
|
|
|
GIMP_VIEW_SIZE_TINY,
|
|
|
|
|
GIMP_VIEWABLE_MAX_BUTTON_SIZE,
|
|
|
|
|
GIMP_VIEW_SIZE_LARGE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
|
|
|
|
|
GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_USE_SMOOTHING,
|
|
|
|
|
"use-smoothing",
|
|
|
|
|
_("Smooth stroke"),
|
|
|
|
|
_("Paint smoother strokes"),
|
|
|
|
|
FALSE,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_INT (object_class, PROP_SMOOTHING_QUALITY,
|
|
|
|
|
"smoothing-quality",
|
|
|
|
|
_("Quality"),
|
|
|
|
|
_("Depth of smoothing"),
|
|
|
|
|
1, 100, DEFAULT_SMOOTHING_QUALITY,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
|
|
|
|
GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SMOOTHING_FACTOR,
|
|
|
|
|
"smoothing-factor",
|
|
|
|
|
_("Weight"),
|
|
|
|
|
_("Gravity of the pen"),
|
|
|
|
|
/* Max velocity is set to 3; allowing for
|
|
|
|
|
* smoothing factor to be less than velcoty
|
|
|
|
|
* results in numeric instablility
|
|
|
|
|
*/
|
|
|
|
|
3.0, 1000.0, DEFAULT_SMOOTHING_FACTOR,
|
|
|
|
|
GIMP_PARAM_STATIC_STRINGS);
|
2003-02-05 06:39:40 -08:00
|
|
|
}
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2015-06-14 11:43:45 -07:00
|
|
|
static void
|
|
|
|
|
gimp_paint_options_config_iface_init (GimpConfigInterface *config_iface)
|
|
|
|
|
{
|
|
|
|
|
parent_config_iface = g_type_interface_peek_parent (config_iface);
|
|
|
|
|
|
|
|
|
|
if (! parent_config_iface)
|
|
|
|
|
parent_config_iface = g_type_default_interface_peek (GIMP_TYPE_CONFIG);
|
|
|
|
|
|
|
|
|
|
config_iface->duplicate = gimp_paint_options_duplicate;
|
2015-10-14 14:02:07 -07:00
|
|
|
config_iface->copy = gimp_paint_options_copy;
|
2017-05-03 19:38:44 -07:00
|
|
|
config_iface->reset = gimp_paint_options_reset;
|
2015-06-14 11:43:45 -07:00
|
|
|
}
|
|
|
|
|
|
2003-02-05 06:39:40 -08:00
|
|
|
static void
|
|
|
|
|
gimp_paint_options_init (GimpPaintOptions *options)
|
|
|
|
|
{
|
2003-03-24 09:58:28 -08:00
|
|
|
options->application_mode_save = DEFAULT_APPLICATION_MODE;
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2009-02-08 04:55:20 -08:00
|
|
|
options->jitter_options = g_slice_new0 (GimpJitterOptions);
|
2010-11-25 12:30:29 -08:00
|
|
|
options->fade_options = g_slice_new0 (GimpFadeOptions);
|
2018-04-13 15:52:20 -07:00
|
|
|
options->gradient_options = g_slice_new0 (GimpGradientPaintOptions);
|
2010-10-22 05:47:36 -07:00
|
|
|
options->smoothing_options = g_slice_new0 (GimpSmoothingOptions);
|
2002-02-21 08:02:30 -08:00
|
|
|
}
|
|
|
|
|
|
2003-07-15 08:38:24 -07:00
|
|
|
static void
|
2010-06-24 03:54:19 -07:00
|
|
|
gimp_paint_options_dispose (GObject *object)
|
2003-07-15 08:38:24 -07:00
|
|
|
{
|
|
|
|
|
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (object);
|
|
|
|
|
|
2018-06-25 15:30:12 -07:00
|
|
|
g_clear_object (&options->paint_info);
|
2010-06-24 03:54:19 -07:00
|
|
|
|
|
|
|
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gimp_paint_options_finalize (GObject *object)
|
|
|
|
|
{
|
|
|
|
|
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (object);
|
2004-08-31 06:20:57 -07:00
|
|
|
|
2018-04-13 15:52:20 -07:00
|
|
|
g_slice_free (GimpJitterOptions, options->jitter_options);
|
|
|
|
|
g_slice_free (GimpFadeOptions, options->fade_options);
|
|
|
|
|
g_slice_free (GimpGradientPaintOptions, options->gradient_options);
|
|
|
|
|
g_slice_free (GimpSmoothingOptions, options->smoothing_options);
|
2003-07-15 08:38:24 -07:00
|
|
|
|
|
|
|
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
|
|
|
|
}
|
|
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
static void
|
|
|
|
|
gimp_paint_options_set_property (GObject *object,
|
|
|
|
|
guint property_id,
|
|
|
|
|
const GValue *value,
|
|
|
|
|
GParamSpec *pspec)
|
2003-02-05 06:39:40 -08:00
|
|
|
{
|
2018-04-13 15:52:20 -07:00
|
|
|
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (object);
|
|
|
|
|
GimpFadeOptions *fade_options = options->fade_options;
|
|
|
|
|
GimpJitterOptions *jitter_options = options->jitter_options;
|
|
|
|
|
GimpGradientPaintOptions *gradient_options = options->gradient_options;
|
|
|
|
|
GimpSmoothingOptions *smoothing_options = options->smoothing_options;
|
2003-02-05 06:39:40 -08:00
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
switch (property_id)
|
|
|
|
|
{
|
2004-08-31 06:20:57 -07:00
|
|
|
case PROP_PAINT_INFO:
|
2008-07-22 23:47:23 -07:00
|
|
|
options->paint_info = g_value_dup_object (value);
|
2004-08-31 06:20:57 -07:00
|
|
|
break;
|
|
|
|
|
|
2013-05-21 09:52:40 -07:00
|
|
|
case PROP_USE_APPLICATOR:
|
|
|
|
|
options->use_applicator = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2010-10-29 12:57:26 -07:00
|
|
|
case PROP_BRUSH_SIZE:
|
|
|
|
|
options->brush_size = g_value_get_double (value);
|
2006-11-16 07:11:27 -08:00
|
|
|
break;
|
2009-04-25 10:53:09 -07:00
|
|
|
case PROP_BRUSH_ASPECT_RATIO:
|
|
|
|
|
options->brush_aspect_ratio = g_value_get_double (value);
|
|
|
|
|
break;
|
2009-02-05 13:47:57 -08:00
|
|
|
case PROP_BRUSH_ANGLE:
|
2009-02-10 13:07:35 -08:00
|
|
|
options->brush_angle = - 1.0 * g_value_get_double (value) / 360.0; /* let's make the angle mathematically correct */
|
2009-02-05 13:47:57 -08:00
|
|
|
break;
|
2014-11-12 15:29:04 -08:00
|
|
|
case PROP_BRUSH_SPACING:
|
|
|
|
|
options->brush_spacing = g_value_get_double (value);
|
|
|
|
|
break;
|
2014-11-17 03:07:55 -08:00
|
|
|
case PROP_BRUSH_HARDNESS:
|
|
|
|
|
options->brush_hardness = g_value_get_double (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_FORCE:
|
|
|
|
|
options->brush_force = g_value_get_double (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
case PROP_BRUSH_LINK_SIZE:
|
|
|
|
|
options->brush_link_size = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_ASPECT_RATIO:
|
|
|
|
|
options->brush_link_aspect_ratio = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_ANGLE:
|
|
|
|
|
options->brush_link_angle = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_SPACING:
|
|
|
|
|
options->brush_link_spacing = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_HARDNESS:
|
|
|
|
|
options->brush_link_hardness = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2017-12-22 13:59:13 -08:00
|
|
|
case PROP_BRUSH_LOCK_TO_VIEW:
|
|
|
|
|
options->brush_lock_to_view = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2003-03-24 09:58:28 -08:00
|
|
|
case PROP_APPLICATION_MODE:
|
|
|
|
|
options->application_mode = g_value_get_enum (value);
|
2003-02-07 09:12:21 -08:00
|
|
|
break;
|
2003-07-14 07:50:41 -07:00
|
|
|
case PROP_HARD:
|
|
|
|
|
options->hard = g_value_get_boolean (value);
|
|
|
|
|
break;
|
2003-02-07 09:12:21 -08:00
|
|
|
|
2010-11-24 13:34:00 -08:00
|
|
|
case PROP_USE_JITTER:
|
|
|
|
|
jitter_options->use_jitter = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_JITTER_AMOUNT:
|
|
|
|
|
jitter_options->jitter_amount = g_value_get_double (value);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PROP_DYNAMICS_EXPANDED:
|
|
|
|
|
options->dynamics_expanded = g_value_get_boolean (value);
|
2009-10-13 10:19:12 -07:00
|
|
|
break;
|
|
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
case PROP_FADE_LENGTH:
|
2003-07-15 08:38:24 -07:00
|
|
|
fade_options->fade_length = g_value_get_double (value);
|
2003-02-07 09:12:21 -08:00
|
|
|
break;
|
2009-12-06 10:03:39 -08:00
|
|
|
case PROP_FADE_REVERSE:
|
|
|
|
|
fade_options->fade_reverse = g_value_get_boolean (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_FADE_REPEAT:
|
|
|
|
|
fade_options->fade_repeat = g_value_get_enum (value);
|
|
|
|
|
break;
|
2003-02-07 09:12:21 -08:00
|
|
|
case PROP_FADE_UNIT:
|
2003-07-15 08:38:24 -07:00
|
|
|
fade_options->fade_unit = g_value_get_int (value);
|
2003-02-07 09:12:21 -08:00
|
|
|
break;
|
|
|
|
|
|
2003-07-22 07:24:11 -07:00
|
|
|
case PROP_GRADIENT_REVERSE:
|
|
|
|
|
gradient_options->gradient_reverse = g_value_get_boolean (value);
|
|
|
|
|
break;
|
2018-04-13 13:33:16 -07:00
|
|
|
case PROP_GRADIENT_BLEND_COLOR_SPACE:
|
|
|
|
|
gradient_options->gradient_blend_color_space = g_value_get_enum (value);
|
|
|
|
|
break;
|
2018-07-12 02:39:42 -07:00
|
|
|
case PROP_GRADIENT_REPEAT:
|
|
|
|
|
gradient_options->gradient_repeat = g_value_get_enum (value);
|
|
|
|
|
break;
|
2008-07-22 23:47:23 -07:00
|
|
|
|
2006-01-13 16:09:22 -08:00
|
|
|
case PROP_BRUSH_VIEW_TYPE:
|
|
|
|
|
options->brush_view_type = g_value_get_enum (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_VIEW_SIZE:
|
|
|
|
|
options->brush_view_size = g_value_get_int (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2010-10-27 11:48:17 -07:00
|
|
|
case PROP_DYNAMICS_VIEW_TYPE:
|
|
|
|
|
options->dynamics_view_type = g_value_get_enum (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_DYNAMICS_VIEW_SIZE:
|
|
|
|
|
options->dynamics_view_size = g_value_get_int (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2006-01-13 16:09:22 -08:00
|
|
|
case PROP_PATTERN_VIEW_TYPE:
|
|
|
|
|
options->pattern_view_type = g_value_get_enum (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_PATTERN_VIEW_SIZE:
|
|
|
|
|
options->pattern_view_size = g_value_get_int (value);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PROP_GRADIENT_VIEW_TYPE:
|
|
|
|
|
options->gradient_view_type = g_value_get_enum (value);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_GRADIENT_VIEW_SIZE:
|
|
|
|
|
options->gradient_view_size = g_value_get_int (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2010-10-22 05:47:36 -07:00
|
|
|
case PROP_USE_SMOOTHING:
|
|
|
|
|
smoothing_options->use_smoothing = g_value_get_boolean (value);
|
|
|
|
|
break;
|
2011-01-07 10:45:29 -08:00
|
|
|
case PROP_SMOOTHING_QUALITY:
|
|
|
|
|
smoothing_options->smoothing_quality = g_value_get_int (value);
|
2010-10-22 05:47:36 -07:00
|
|
|
break;
|
|
|
|
|
case PROP_SMOOTHING_FACTOR:
|
|
|
|
|
smoothing_options->smoothing_factor = g_value_get_double (value);
|
|
|
|
|
break;
|
|
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
default:
|
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2003-02-05 06:39:40 -08:00
|
|
|
}
|
|
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
static void
|
|
|
|
|
gimp_paint_options_get_property (GObject *object,
|
|
|
|
|
guint property_id,
|
|
|
|
|
GValue *value,
|
|
|
|
|
GParamSpec *pspec)
|
|
|
|
|
{
|
2018-04-13 15:52:20 -07:00
|
|
|
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (object);
|
|
|
|
|
GimpFadeOptions *fade_options = options->fade_options;
|
|
|
|
|
GimpJitterOptions *jitter_options = options->jitter_options;
|
|
|
|
|
GimpGradientPaintOptions *gradient_options = options->gradient_options;
|
|
|
|
|
GimpSmoothingOptions *smoothing_options = options->smoothing_options;
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
switch (property_id)
|
|
|
|
|
{
|
2004-08-31 06:20:57 -07:00
|
|
|
case PROP_PAINT_INFO:
|
|
|
|
|
g_value_set_object (value, options->paint_info);
|
|
|
|
|
break;
|
|
|
|
|
|
2013-05-21 09:52:40 -07:00
|
|
|
case PROP_USE_APPLICATOR:
|
|
|
|
|
g_value_set_boolean (value, options->use_applicator);
|
|
|
|
|
break;
|
|
|
|
|
|
2010-10-29 12:57:26 -07:00
|
|
|
case PROP_BRUSH_SIZE:
|
|
|
|
|
g_value_set_double (value, options->brush_size);
|
2006-11-16 07:11:27 -08:00
|
|
|
break;
|
2009-04-25 10:53:09 -07:00
|
|
|
case PROP_BRUSH_ASPECT_RATIO:
|
|
|
|
|
g_value_set_double (value, options->brush_aspect_ratio);
|
|
|
|
|
break;
|
2009-02-05 13:47:57 -08:00
|
|
|
case PROP_BRUSH_ANGLE:
|
2009-02-10 13:07:35 -08:00
|
|
|
g_value_set_double (value, - 1.0 * options->brush_angle * 360.0); /* mathematically correct -> intuitively correct */
|
2009-02-05 13:47:57 -08:00
|
|
|
break;
|
2014-11-12 15:29:04 -08:00
|
|
|
case PROP_BRUSH_SPACING:
|
|
|
|
|
g_value_set_double (value, options->brush_spacing);
|
|
|
|
|
break;
|
2014-11-17 03:07:55 -08:00
|
|
|
case PROP_BRUSH_HARDNESS:
|
|
|
|
|
g_value_set_double (value, options->brush_hardness);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_FORCE:
|
|
|
|
|
g_value_set_double (value, options->brush_force);
|
|
|
|
|
break;
|
|
|
|
|
|
2015-01-05 15:30:35 -08:00
|
|
|
case PROP_BRUSH_LINK_SIZE:
|
|
|
|
|
g_value_set_boolean (value, options->brush_link_size);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_ASPECT_RATIO:
|
|
|
|
|
g_value_set_boolean (value, options->brush_link_aspect_ratio);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_ANGLE:
|
|
|
|
|
g_value_set_boolean (value, options->brush_link_angle);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_SPACING:
|
|
|
|
|
g_value_set_boolean (value, options->brush_link_spacing);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_LINK_HARDNESS:
|
|
|
|
|
g_value_set_boolean (value, options->brush_link_hardness);
|
|
|
|
|
break;
|
|
|
|
|
|
2017-12-22 13:59:13 -08:00
|
|
|
case PROP_BRUSH_LOCK_TO_VIEW:
|
|
|
|
|
g_value_set_boolean (value, options->brush_lock_to_view);
|
|
|
|
|
break;
|
|
|
|
|
|
2003-03-24 09:58:28 -08:00
|
|
|
case PROP_APPLICATION_MODE:
|
|
|
|
|
g_value_set_enum (value, options->application_mode);
|
2003-02-07 09:12:21 -08:00
|
|
|
break;
|
2003-07-14 07:50:41 -07:00
|
|
|
case PROP_HARD:
|
|
|
|
|
g_value_set_boolean (value, options->hard);
|
|
|
|
|
break;
|
2009-07-22 10:55:34 -07:00
|
|
|
|
2010-11-24 13:34:00 -08:00
|
|
|
case PROP_USE_JITTER:
|
|
|
|
|
g_value_set_boolean (value, jitter_options->use_jitter);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_JITTER_AMOUNT:
|
|
|
|
|
g_value_set_double (value, jitter_options->jitter_amount);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PROP_DYNAMICS_EXPANDED:
|
|
|
|
|
g_value_set_boolean (value, options->dynamics_expanded);
|
2009-10-13 10:19:12 -07:00
|
|
|
break;
|
|
|
|
|
|
2009-07-22 10:55:34 -07:00
|
|
|
case PROP_FADE_LENGTH:
|
|
|
|
|
g_value_set_double (value, fade_options->fade_length);
|
|
|
|
|
break;
|
2009-12-06 10:03:39 -08:00
|
|
|
case PROP_FADE_REVERSE:
|
|
|
|
|
g_value_set_boolean (value, fade_options->fade_reverse);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_FADE_REPEAT:
|
|
|
|
|
g_value_set_enum (value, fade_options->fade_repeat);
|
|
|
|
|
break;
|
2009-07-22 10:55:34 -07:00
|
|
|
case PROP_FADE_UNIT:
|
|
|
|
|
g_value_set_int (value, fade_options->fade_unit);
|
|
|
|
|
break;
|
|
|
|
|
|
2009-07-22 10:43:37 -07:00
|
|
|
case PROP_GRADIENT_REVERSE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_boolean (value, gradient_options->gradient_reverse);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
2018-04-13 13:33:16 -07:00
|
|
|
case PROP_GRADIENT_BLEND_COLOR_SPACE:
|
|
|
|
|
g_value_set_enum (value, gradient_options->gradient_blend_color_space);
|
|
|
|
|
break;
|
2018-07-12 02:39:42 -07:00
|
|
|
case PROP_GRADIENT_REPEAT:
|
|
|
|
|
g_value_set_enum (value, gradient_options->gradient_repeat);
|
|
|
|
|
break;
|
2009-07-22 10:43:37 -07:00
|
|
|
|
|
|
|
|
case PROP_BRUSH_VIEW_TYPE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_enum (value, options->brush_view_type);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
|
|
|
|
case PROP_BRUSH_VIEW_SIZE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_int (value, options->brush_view_size);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
|
|
|
|
|
2010-10-27 11:48:17 -07:00
|
|
|
case PROP_DYNAMICS_VIEW_TYPE:
|
|
|
|
|
g_value_set_enum (value, options->dynamics_view_type);
|
|
|
|
|
break;
|
|
|
|
|
case PROP_DYNAMICS_VIEW_SIZE:
|
|
|
|
|
g_value_set_int (value, options->dynamics_view_size);
|
|
|
|
|
break;
|
|
|
|
|
|
2009-07-22 10:43:37 -07:00
|
|
|
case PROP_PATTERN_VIEW_TYPE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_enum (value, options->pattern_view_type);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
|
|
|
|
case PROP_PATTERN_VIEW_SIZE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_int (value, options->pattern_view_size);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PROP_GRADIENT_VIEW_TYPE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_enum (value, options->gradient_view_type);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
|
|
|
|
case PROP_GRADIENT_VIEW_SIZE:
|
2009-07-22 10:55:34 -07:00
|
|
|
g_value_set_int (value, options->gradient_view_size);
|
2009-07-22 10:43:37 -07:00
|
|
|
break;
|
2011-01-07 10:45:29 -08:00
|
|
|
|
2010-10-22 05:47:36 -07:00
|
|
|
case PROP_USE_SMOOTHING:
|
2011-01-08 13:18:56 -08:00
|
|
|
g_value_set_boolean (value, smoothing_options->use_smoothing);
|
2010-10-22 05:47:36 -07:00
|
|
|
break;
|
2011-01-07 10:45:29 -08:00
|
|
|
case PROP_SMOOTHING_QUALITY:
|
|
|
|
|
g_value_set_int (value, smoothing_options->smoothing_quality);
|
2010-10-22 05:47:36 -07:00
|
|
|
break;
|
|
|
|
|
case PROP_SMOOTHING_FACTOR:
|
|
|
|
|
g_value_set_double (value, smoothing_options->smoothing_factor);
|
|
|
|
|
break;
|
2003-02-07 09:12:21 -08:00
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-25 15:30:12 -07:00
|
|
|
static void
|
|
|
|
|
gimp_paint_options_brush_changed (GimpContext *context,
|
|
|
|
|
GimpBrush *brush)
|
|
|
|
|
{
|
|
|
|
|
GimpPaintOptions *options = GIMP_PAINT_OPTIONS (context);
|
|
|
|
|
|
|
|
|
|
if (options->paint_info &&
|
|
|
|
|
g_type_is_a (options->paint_info->paint_type,
|
|
|
|
|
GIMP_TYPE_BRUSH_CORE))
|
|
|
|
|
{
|
|
|
|
|
if (options->brush)
|
|
|
|
|
{
|
|
|
|
|
g_signal_handlers_disconnect_by_func (options->brush,
|
|
|
|
|
gimp_paint_options_brush_notify,
|
|
|
|
|
options);
|
|
|
|
|
g_object_remove_weak_pointer (G_OBJECT (options->brush),
|
|
|
|
|
(gpointer) &options->brush);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
options->brush = brush;
|
|
|
|
|
|
|
|
|
|
if (options->brush)
|
|
|
|
|
{
|
|
|
|
|
g_object_add_weak_pointer (G_OBJECT (options->brush),
|
|
|
|
|
(gpointer) &options->brush);
|
|
|
|
|
g_signal_connect_object (options->brush, "notify",
|
|
|
|
|
G_CALLBACK (gimp_paint_options_brush_notify),
|
|
|
|
|
options, 0);
|
|
|
|
|
|
|
|
|
|
gimp_paint_options_brush_notify (options->brush, NULL, options);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
gimp_paint_options_brush_notify (GimpBrush *brush,
|
|
|
|
|
const GParamSpec *pspec,
|
|
|
|
|
GimpPaintOptions *options)
|
|
|
|
|
{
|
|
|
|
|
if (gimp_tool_options_get_gui_mode (GIMP_TOOL_OPTIONS (options)))
|
|
|
|
|
{
|
|
|
|
|
#define IS_PSPEC(p,n) (p == NULL || ! strcmp (n, p->name))
|
|
|
|
|
|
|
|
|
|
if (options->brush_link_size && IS_PSPEC (pspec, "radius"))
|
|
|
|
|
gimp_paint_options_set_default_brush_size (options, brush);
|
|
|
|
|
|
|
|
|
|
if (options->brush_link_aspect_ratio && IS_PSPEC (pspec, "aspect-ratio"))
|
|
|
|
|
gimp_paint_options_set_default_brush_aspect_ratio (options, brush);
|
|
|
|
|
|
|
|
|
|
if (options->brush_link_angle && IS_PSPEC (pspec, "angle"))
|
|
|
|
|
gimp_paint_options_set_default_brush_angle (options, brush);
|
|
|
|
|
|
|
|
|
|
if (options->brush_link_spacing && IS_PSPEC (pspec, "spacing"))
|
|
|
|
|
gimp_paint_options_set_default_brush_spacing (options, brush);
|
|
|
|
|
|
|
|
|
|
if (options->brush_link_hardness && IS_PSPEC (pspec, "hardness"))
|
|
|
|
|
gimp_paint_options_set_default_brush_hardness (options, brush);
|
|
|
|
|
|
|
|
|
|
#undef IS_SPEC
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-14 11:43:45 -07:00
|
|
|
static GimpConfig *
|
|
|
|
|
gimp_paint_options_duplicate (GimpConfig *config)
|
|
|
|
|
{
|
2016-01-05 16:24:56 -08:00
|
|
|
return parent_config_iface->duplicate (config);
|
2015-06-14 11:43:45 -07:00
|
|
|
}
|
|
|
|
|
|
2015-10-14 14:02:07 -07:00
|
|
|
static gboolean
|
|
|
|
|
gimp_paint_options_copy (GimpConfig *src,
|
|
|
|
|
GimpConfig *dest,
|
|
|
|
|
GParamFlags flags)
|
|
|
|
|
{
|
2016-01-05 16:24:56 -08:00
|
|
|
return parent_config_iface->copy (src, dest, flags);
|
2015-01-05 15:30:35 -08:00
|
|
|
}
|
2002-02-21 08:02:30 -08:00
|
|
|
|
2017-05-03 19:38:44 -07:00
|
|
|
static void
|
|
|
|
|
gimp_paint_options_reset (GimpConfig *config)
|
|
|
|
|
{
|
|
|
|
|
GimpBrush *brush = gimp_context_get_brush (GIMP_CONTEXT (config));
|
|
|
|
|
|
|
|
|
|
parent_config_iface->reset (config);
|
|
|
|
|
|
|
|
|
|
if (brush)
|
2017-05-03 19:59:59 -07:00
|
|
|
{
|
|
|
|
|
gimp_paint_options_set_default_brush_size (GIMP_PAINT_OPTIONS (config),
|
|
|
|
|
brush);
|
|
|
|
|
gimp_paint_options_set_default_brush_hardness (GIMP_PAINT_OPTIONS (config),
|
|
|
|
|
brush);
|
|
|
|
|
gimp_paint_options_set_default_brush_aspect_ratio (GIMP_PAINT_OPTIONS (config),
|
|
|
|
|
brush);
|
|
|
|
|
gimp_paint_options_set_default_brush_angle (GIMP_PAINT_OPTIONS (config),
|
|
|
|
|
brush);
|
|
|
|
|
gimp_paint_options_set_default_brush_spacing (GIMP_PAINT_OPTIONS (config),
|
|
|
|
|
brush);
|
|
|
|
|
}
|
2017-05-03 19:38:44 -07:00
|
|
|
}
|
|
|
|
|
|
2003-02-07 09:12:21 -08:00
|
|
|
GimpPaintOptions *
|
2004-08-31 06:20:57 -07:00
|
|
|
gimp_paint_options_new (GimpPaintInfo *paint_info)
|
2002-02-21 08:02:30 -08:00
|
|
|
{
|
2003-02-07 09:12:21 -08:00
|
|
|
GimpPaintOptions *options;
|
|
|
|
|
|
2004-08-31 06:20:57 -07:00
|
|
|
g_return_val_if_fail (GIMP_IS_PAINT_INFO (paint_info), NULL);
|
2003-02-07 09:12:21 -08:00
|
|
|
|
2004-08-31 06:20:57 -07:00
|
|
|
options = g_object_new (paint_info->paint_options_type,
|
|
|
|
|
"gimp", paint_info->gimp,
|
2009-08-29 03:40:40 -07:00
|
|
|
"name", gimp_object_get_name (paint_info),
|
2004-08-31 06:20:57 -07:00
|
|
|
"paint-info", paint_info,
|
2003-02-07 09:12:21 -08:00
|
|
|
NULL);
|
|
|
|
|
|
|
|
|
|
return options;
|
2002-02-21 08:02:30 -08:00
|
|
|
}
|
2003-07-14 07:50:41 -07:00
|
|
|
|
2003-07-16 04:25:37 -07:00
|
|
|
gdouble
|
|
|
|
|
gimp_paint_options_get_fade (GimpPaintOptions *paint_options,
|
2006-03-28 09:08:36 -08:00
|
|
|
GimpImage *image,
|
2003-07-16 04:25:37 -07:00
|
|
|
gdouble pixel_dist)
|
|
|
|
|
{
|
|
|
|
|
GimpFadeOptions *fade_options;
|
2010-11-24 13:34:00 -08:00
|
|
|
gdouble z = -1.0;
|
|
|
|
|
gdouble fade_out = 0.0;
|
|
|
|
|
gdouble unit_factor;
|
|
|
|
|
gdouble pos;
|
2009-07-02 10:45:32 -07:00
|
|
|
|
2003-07-16 04:25:37 -07:00
|
|
|
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options),
|
2009-12-06 10:03:39 -08:00
|
|
|
DYNAMIC_MAX_VALUE);
|
|
|
|
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), DYNAMIC_MAX_VALUE);
|
2003-07-16 04:25:37 -07:00
|
|
|
|
|
|
|
|
fade_options = paint_options->fade_options;
|
|
|
|
|
|
2010-11-24 13:34:00 -08:00
|
|
|
switch (fade_options->fade_unit)
|
2003-07-16 04:25:37 -07:00
|
|
|
{
|
2010-11-24 13:34:00 -08:00
|
|
|
case GIMP_UNIT_PIXEL:
|
|
|
|
|
fade_out = fade_options->fade_length;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case GIMP_UNIT_PERCENT:
|
|
|
|
|
fade_out = (MAX (gimp_image_get_width (image),
|
|
|
|
|
gimp_image_get_height (image)) *
|
|
|
|
|
fade_options->fade_length / 100);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
{
|
|
|
|
|
gdouble xres;
|
|
|
|
|
gdouble yres;
|
|
|
|
|
|
|
|
|
|
gimp_image_get_resolution (image, &xres, &yres);
|
|
|
|
|
|
|
|
|
|
unit_factor = gimp_unit_get_factor (fade_options->fade_unit);
|
|
|
|
|
fade_out = (fade_options->fade_length *
|
|
|
|
|
MAX (xres, yres) / unit_factor);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-07-16 04:25:37 -07:00
|
|
|
}
|
|
|
|
|
|
2010-11-24 13:34:00 -08:00
|
|
|
/* factor in the fade out value */
|
|
|
|
|
if (fade_out > 0.0)
|
|
|
|
|
{
|
|
|
|
|
pos = pixel_dist / fade_out;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
pos = DYNAMIC_MAX_VALUE;
|
|
|
|
|
|
|
|
|
|
/* for no repeat, set pos close to 1.0 after the first chunk */
|
|
|
|
|
if (fade_options->fade_repeat == GIMP_REPEAT_NONE && pos >= DYNAMIC_MAX_VALUE)
|
|
|
|
|
pos = DYNAMIC_MAX_VALUE - 0.0000001;
|
|
|
|
|
|
|
|
|
|
if (((gint) pos & 1) &&
|
|
|
|
|
fade_options->fade_repeat != GIMP_REPEAT_SAWTOOTH)
|
|
|
|
|
pos = DYNAMIC_MAX_VALUE - (pos - (gint) pos);
|
|
|
|
|
else
|
|
|
|
|
pos = pos - (gint) pos;
|
|
|
|
|
|
|
|
|
|
z = pos;
|
|
|
|
|
|
|
|
|
|
if (fade_options->fade_reverse)
|
|
|
|
|
z = 1.0 - z;
|
|
|
|
|
|
|
|
|
|
return z; /* ln (1/255) */
|
2003-07-16 04:25:37 -07:00
|
|
|
}
|
|
|
|
|
|
2005-10-03 12:03:14 -07:00
|
|
|
gdouble
|
|
|
|
|
gimp_paint_options_get_jitter (GimpPaintOptions *paint_options,
|
2006-04-12 05:49:29 -07:00
|
|
|
GimpImage *image)
|
2005-10-03 12:03:14 -07:00
|
|
|
{
|
|
|
|
|
GimpJitterOptions *jitter_options;
|
|
|
|
|
|
2008-04-25 06:39:36 -07:00
|
|
|
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), 0.0);
|
|
|
|
|
|
2005-10-03 12:03:14 -07:00
|
|
|
jitter_options = paint_options->jitter_options;
|
|
|
|
|
|
|
|
|
|
if (jitter_options->use_jitter)
|
2009-10-04 01:40:26 -07:00
|
|
|
{
|
|
|
|
|
return jitter_options->jitter_amount;
|
|
|
|
|
}
|
|
|
|
|
|
2005-10-03 12:03:14 -07:00
|
|
|
return 0.0;
|
|
|
|
|
}
|
|
|
|
|
|
2003-07-22 07:24:11 -07:00
|
|
|
gboolean
|
|
|
|
|
gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options,
|
2006-03-28 09:08:36 -08:00
|
|
|
GimpImage *image,
|
2008-05-10 03:03:21 -07:00
|
|
|
gdouble grad_point,
|
2003-07-22 07:24:11 -07:00
|
|
|
gdouble pixel_dist,
|
|
|
|
|
GimpRGB *color)
|
|
|
|
|
{
|
2015-04-19 12:58:36 -07:00
|
|
|
GimpDynamics *dynamics;
|
2003-07-22 07:24:11 -07:00
|
|
|
|
|
|
|
|
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), FALSE);
|
2006-03-28 09:08:36 -08:00
|
|
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
2003-07-22 07:24:11 -07:00
|
|
|
g_return_val_if_fail (color != NULL, FALSE);
|
|
|
|
|
|
2009-10-03 06:54:10 -07:00
|
|
|
dynamics = gimp_context_get_dynamics (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
2015-04-19 12:58:36 -07:00
|
|
|
if (gimp_dynamics_is_output_enabled (dynamics, GIMP_DYNAMICS_OUTPUT_COLOR))
|
2003-07-22 07:24:11 -07:00
|
|
|
{
|
2018-04-13 15:52:20 -07:00
|
|
|
GimpGradientPaintOptions *gradient_options = paint_options->gradient_options;
|
|
|
|
|
GimpGradient *gradient;
|
2015-04-19 12:58:36 -07:00
|
|
|
|
|
|
|
|
gradient = gimp_context_get_gradient (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
2006-08-29 14:44:51 -07:00
|
|
|
gimp_gradient_get_color_at (gradient, GIMP_CONTEXT (paint_options),
|
2008-05-10 03:03:21 -07:00
|
|
|
NULL, grad_point,
|
2003-07-22 07:24:11 -07:00
|
|
|
gradient_options->gradient_reverse,
|
2018-04-13 13:33:16 -07:00
|
|
|
gradient_options->gradient_blend_color_space,
|
2003-07-22 07:24:11 -07:00
|
|
|
color);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2003-07-14 07:50:41 -07:00
|
|
|
GimpBrushApplicationMode
|
|
|
|
|
gimp_paint_options_get_brush_mode (GimpPaintOptions *paint_options)
|
|
|
|
|
{
|
2015-04-19 12:58:36 -07:00
|
|
|
GimpDynamics *dynamics;
|
|
|
|
|
gboolean dynamic_force = FALSE;
|
2009-10-03 08:53:25 -07:00
|
|
|
|
2003-07-14 07:50:41 -07:00
|
|
|
g_return_val_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options), GIMP_BRUSH_SOFT);
|
|
|
|
|
|
|
|
|
|
if (paint_options->hard)
|
|
|
|
|
return GIMP_BRUSH_HARD;
|
|
|
|
|
|
2009-10-03 08:53:25 -07:00
|
|
|
dynamics = gimp_context_get_dynamics (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
2015-04-19 12:58:36 -07:00
|
|
|
dynamic_force = gimp_dynamics_is_output_enabled (dynamics,
|
|
|
|
|
GIMP_DYNAMICS_OUTPUT_FORCE);
|
2012-02-09 11:56:36 -08:00
|
|
|
|
2017-04-10 06:41:10 -07:00
|
|
|
if (dynamic_force || (paint_options->brush_force != 0.5))
|
2011-03-03 09:43:56 -08:00
|
|
|
return GIMP_BRUSH_PRESSURE;
|
2009-07-21 12:27:29 -07:00
|
|
|
|
2003-07-14 07:50:41 -07:00
|
|
|
return GIMP_BRUSH_SOFT;
|
|
|
|
|
}
|
2011-06-02 11:16:54 -07:00
|
|
|
|
2014-01-04 06:45:25 -08:00
|
|
|
void
|
|
|
|
|
gimp_paint_options_set_default_brush_size (GimpPaintOptions *paint_options,
|
|
|
|
|
GimpBrush *brush)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options));
|
|
|
|
|
g_return_if_fail (brush == NULL || GIMP_IS_BRUSH (brush));
|
|
|
|
|
|
|
|
|
|
if (! brush)
|
|
|
|
|
brush = gimp_context_get_brush (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
|
|
|
|
if (brush)
|
|
|
|
|
{
|
|
|
|
|
gint height;
|
|
|
|
|
gint width;
|
|
|
|
|
|
2017-12-22 13:53:56 -08:00
|
|
|
gimp_brush_transform_size (brush, 1.0, 0.0, 0.0, FALSE, &height, &width);
|
2014-01-04 06:45:25 -08:00
|
|
|
|
|
|
|
|
g_object_set (paint_options,
|
|
|
|
|
"brush-size", (gdouble) MAX (height, width),
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-10-10 15:57:25 -07:00
|
|
|
void
|
|
|
|
|
gimp_paint_options_set_default_brush_angle (GimpPaintOptions *paint_options,
|
|
|
|
|
GimpBrush *brush)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options));
|
|
|
|
|
g_return_if_fail (brush == NULL || GIMP_IS_BRUSH (brush));
|
|
|
|
|
|
|
|
|
|
if (! brush)
|
|
|
|
|
brush = gimp_context_get_brush (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
|
|
|
|
if (GIMP_IS_BRUSH_GENERATED (brush))
|
|
|
|
|
{
|
|
|
|
|
GimpBrushGenerated *generated_brush = GIMP_BRUSH_GENERATED (brush);
|
|
|
|
|
|
|
|
|
|
g_object_set (paint_options,
|
|
|
|
|
"brush-angle", (gdouble) gimp_brush_generated_get_angle (generated_brush),
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
g_object_set (paint_options,
|
|
|
|
|
"brush-angle", DEFAULT_BRUSH_ANGLE,
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
gimp_paint_options_set_default_brush_aspect_ratio (GimpPaintOptions *paint_options,
|
|
|
|
|
GimpBrush *brush)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options));
|
|
|
|
|
g_return_if_fail (brush == NULL || GIMP_IS_BRUSH (brush));
|
|
|
|
|
|
|
|
|
|
if (! brush)
|
|
|
|
|
brush = gimp_context_get_brush (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
|
|
|
|
if (GIMP_IS_BRUSH_GENERATED (brush))
|
|
|
|
|
{
|
|
|
|
|
GimpBrushGenerated *generated_brush = GIMP_BRUSH_GENERATED (brush);
|
|
|
|
|
gdouble ratio;
|
|
|
|
|
|
|
|
|
|
ratio = gimp_brush_generated_get_aspect_ratio (generated_brush);
|
|
|
|
|
|
|
|
|
|
ratio = (ratio - 1.0) * 20.0 / 19.0;
|
|
|
|
|
|
|
|
|
|
g_object_set (paint_options,
|
|
|
|
|
"brush-aspect-ratio", ratio,
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
g_object_set (paint_options,
|
|
|
|
|
"brush-aspect-ratio", DEFAULT_BRUSH_ASPECT_RATIO,
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-12 14:05:37 -08:00
|
|
|
void
|
|
|
|
|
gimp_paint_options_set_default_brush_spacing (GimpPaintOptions *paint_options,
|
|
|
|
|
GimpBrush *brush)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options));
|
|
|
|
|
g_return_if_fail (brush == NULL || GIMP_IS_BRUSH (brush));
|
|
|
|
|
|
|
|
|
|
if (! brush)
|
|
|
|
|
brush = gimp_context_get_brush (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
|
|
|
|
if (brush)
|
|
|
|
|
{
|
|
|
|
|
g_object_set (paint_options,
|
2014-11-17 14:56:16 -08:00
|
|
|
"brush-spacing", (gdouble) gimp_brush_get_spacing (brush) / 100.0,
|
2014-11-12 14:05:37 -08:00
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-17 03:07:55 -08:00
|
|
|
void
|
|
|
|
|
gimp_paint_options_set_default_brush_hardness (GimpPaintOptions *paint_options,
|
|
|
|
|
GimpBrush *brush)
|
|
|
|
|
{
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (paint_options));
|
|
|
|
|
g_return_if_fail (brush == NULL || GIMP_IS_BRUSH (brush));
|
|
|
|
|
|
|
|
|
|
if (! brush)
|
|
|
|
|
brush = gimp_context_get_brush (GIMP_CONTEXT (paint_options));
|
|
|
|
|
|
2014-11-17 10:59:34 -08:00
|
|
|
if (GIMP_IS_BRUSH_GENERATED (brush))
|
2014-11-17 03:07:55 -08:00
|
|
|
{
|
2014-11-17 10:59:34 -08:00
|
|
|
GimpBrushGenerated *generated_brush = GIMP_BRUSH_GENERATED (brush);
|
2014-11-17 03:07:55 -08:00
|
|
|
|
|
|
|
|
g_object_set (paint_options,
|
2014-11-17 14:17:13 -08:00
|
|
|
"brush-hardness", (gdouble) gimp_brush_generated_get_hardness (generated_brush),
|
2014-11-17 03:07:55 -08:00
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
g_object_set (paint_options,
|
|
|
|
|
"brush-hardness", DEFAULT_BRUSH_HARDNESS,
|
|
|
|
|
NULL);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
static const gchar *brush_props[] =
|
2011-06-02 11:16:54 -07:00
|
|
|
{
|
2018-06-29 04:08:45 -07:00
|
|
|
"brush-size",
|
|
|
|
|
"brush-angle",
|
|
|
|
|
"brush-aspect-ratio",
|
|
|
|
|
"brush-spacing",
|
|
|
|
|
"brush-hardness",
|
|
|
|
|
"brush-force",
|
|
|
|
|
"brush-link-size",
|
|
|
|
|
"brush-link-angle",
|
|
|
|
|
"brush-link-aspect-ratio",
|
|
|
|
|
"brush-link-spacing",
|
|
|
|
|
"brush-link-hardness",
|
|
|
|
|
"brush-lock-to-view"
|
|
|
|
|
};
|
2015-01-05 15:30:35 -08:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
static const gchar *dynamics_props[] =
|
|
|
|
|
{
|
|
|
|
|
"dynamics-expanded",
|
|
|
|
|
"fade-reverse",
|
|
|
|
|
"fade-length",
|
|
|
|
|
"fade-unit",
|
|
|
|
|
"fade-repeat"
|
|
|
|
|
};
|
2017-12-22 13:59:13 -08:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
static const gchar *gradient_props[] =
|
|
|
|
|
{
|
|
|
|
|
"gradient-reverse",
|
2018-07-12 02:39:42 -07:00
|
|
|
"gradient-blend-color-space",
|
|
|
|
|
"gradient-repeat"
|
2018-06-29 04:08:45 -07:00
|
|
|
};
|
2011-06-02 11:16:54 -07:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
static const gint max_n_props = (G_N_ELEMENTS (brush_props) +
|
|
|
|
|
G_N_ELEMENTS (dynamics_props) +
|
|
|
|
|
G_N_ELEMENTS (gradient_props));
|
2011-06-02 11:16:54 -07:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
gboolean
|
|
|
|
|
gimp_paint_options_is_prop (const gchar *prop_name,
|
|
|
|
|
GimpContextPropMask prop_mask)
|
2011-06-02 11:16:54 -07:00
|
|
|
{
|
2018-06-29 04:08:45 -07:00
|
|
|
gint i;
|
2011-06-02 11:16:54 -07:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
g_return_val_if_fail (prop_name != NULL, FALSE);
|
2011-06-02 11:16:54 -07:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
if (prop_mask & GIMP_CONTEXT_PROP_MASK_BRUSH)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (brush_props); i++)
|
|
|
|
|
if (! strcmp (prop_name, brush_props[i]))
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (prop_mask & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (dynamics_props); i++)
|
|
|
|
|
if (! strcmp (prop_name, dynamics_props[i]))
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (prop_mask & GIMP_CONTEXT_PROP_MASK_GRADIENT)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (gradient_props); i++)
|
|
|
|
|
if (! strcmp (prop_name, gradient_props[i]))
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
2011-12-06 13:32:23 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2018-06-29 04:08:45 -07:00
|
|
|
gimp_paint_options_copy_props (GimpPaintOptions *src,
|
|
|
|
|
GimpPaintOptions *dest,
|
|
|
|
|
GimpContextPropMask prop_mask)
|
2011-12-06 13:32:23 -08:00
|
|
|
{
|
2018-06-29 04:08:45 -07:00
|
|
|
const gchar *names[max_n_props];
|
|
|
|
|
GValue values[max_n_props];
|
|
|
|
|
gint n_props = 0;
|
|
|
|
|
gint i;
|
2011-12-06 13:32:23 -08:00
|
|
|
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (src));
|
|
|
|
|
g_return_if_fail (GIMP_IS_PAINT_OPTIONS (dest));
|
|
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
if (prop_mask & GIMP_CONTEXT_PROP_MASK_BRUSH)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (brush_props); i++)
|
|
|
|
|
names[n_props++] = brush_props[i];
|
|
|
|
|
}
|
2011-06-02 11:16:54 -07:00
|
|
|
|
2018-06-29 04:08:45 -07:00
|
|
|
if (prop_mask & GIMP_CONTEXT_PROP_MASK_DYNAMICS)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (dynamics_props); i++)
|
|
|
|
|
names[n_props++] = dynamics_props[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (prop_mask & GIMP_CONTEXT_PROP_MASK_GRADIENT)
|
|
|
|
|
{
|
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (gradient_props); i++)
|
|
|
|
|
names[n_props++] = gradient_props[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (n_props > 0)
|
|
|
|
|
{
|
|
|
|
|
g_object_getv (G_OBJECT (src), n_props, names, values);
|
|
|
|
|
g_object_setv (G_OBJECT (dest), n_props, names, values);
|
|
|
|
|
|
|
|
|
|
while (n_props--)
|
|
|
|
|
g_value_unset (&values[n_props]);
|
|
|
|
|
}
|
2011-06-02 11:16:54 -07:00
|
|
|
}
|