Wiring the new dynamics object to brush core. Just a start for now.

This commit is contained in:
Alexia Death 2009-08-20 01:40:33 +03:00
parent f57d3ad02d
commit 56f59eab97
4 changed files with 130 additions and 6 deletions

View File

@ -40,6 +40,7 @@
#include "gimpbrushcore.h"
#include "gimpbrushcore-kernels.h"
#include "gimppaintoptions.h"
#include "gimpdynamicsoptions.h"
#include "gimp-intl.h"
@ -49,6 +50,7 @@
enum
{
SET_BRUSH,
SET_DYNAMICS,
LAST_SIGNAL
};
@ -85,6 +87,9 @@ static TempBuf *gimp_brush_core_get_paint_area (GimpPaintCore *paint_core
static void gimp_brush_core_real_set_brush (GimpBrushCore *core,
GimpBrush *brush);
static void gimp_brush_core_real_set_dynamics (GimpBrushCore *core,
GimpDynamicsOptions *dynamics);
static inline void rotate_pointers (gulong **p,
guint32 n);
static TempBuf * gimp_brush_core_subsample_mask (GimpBrushCore *core,
@ -147,6 +152,16 @@ gimp_brush_core_class_init (GimpBrushCoreClass *klass)
G_TYPE_NONE, 1,
GIMP_TYPE_BRUSH);
core_signals[SET_DYNAMICS] =
g_signal_new ("set-brush",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GimpBrushCoreClass, set_dynamics),
NULL, NULL,
gimp_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GIMP_TYPE_DYNAMICS_OPTIONS);
object_class->finalize = gimp_brush_core_finalize;
paint_core_class->start = gimp_brush_core_start;
@ -167,6 +182,7 @@ gimp_brush_core_init (GimpBrushCore *core)
core->main_brush = NULL;
core->brush = NULL;
core->dynamics = NULL;
core->spacing = 1.0;
core->scale = 1.0;
core->angle = 1.0;
@ -804,6 +820,21 @@ gimp_brush_core_real_set_brush (GimpBrushCore *core,
}
}
static void
gimp_brush_core_real_set_dynamics (GimpBrushCore *core,
GimpDynamicsOptions *dynamics)
{
if (core->dynamics)
{
g_object_unref (core->dynamics);
core->dynamics = NULL;
}
core->dynamics = dynamics;
}
void
gimp_brush_core_set_brush (GimpBrushCore *core,
GimpBrush *brush)
@ -814,6 +845,16 @@ gimp_brush_core_set_brush (GimpBrushCore *core,
g_signal_emit (core, core_signals[SET_BRUSH], 0, brush);
}
void
gimp_brush_core_set_dynamics (GimpBrushCore *core,
GimpDynamicsOptions *dynamics)
{
g_return_if_fail (GIMP_IS_BRUSH_CORE (core));
g_return_if_fail (dynamics == NULL || GIMP_IS_DYNAMICS_OPTIONS (dynamics));
g_signal_emit (core, core_signals[SET_DYNAMICS], 0, dynamics);
}
void
gimp_brush_core_create_bound_segs (GimpBrushCore *core,
GimpPaintOptions *paint_options)

View File

@ -43,6 +43,7 @@ struct _GimpBrushCore
GimpBrush *main_brush;
GimpBrush *brush;
GimpDynamicsOptions *dynamics;
gdouble spacing;
gdouble scale;
gdouble angle;
@ -97,8 +98,11 @@ struct _GimpBrushCoreClass
gboolean handles_transforming_brush;
void (* set_brush) (GimpBrushCore *core,
GimpBrush *brush);
void (* set_brush) (GimpBrushCore *core,
GimpBrush *brush);
void (* set_dynamics) (GimpBrushCore *core,
GimpDynamicsOptions *brush);
};
@ -106,6 +110,10 @@ GType gimp_brush_core_get_type (void) G_GNUC_CONST;
void gimp_brush_core_set_brush (GimpBrushCore *core,
GimpBrush *brush);
void gimp_brush_core_set_dynamics (GimpBrushCore *core,
GimpDynamicsOptions *dynamics);
void gimp_brush_core_create_bound_segs (GimpBrushCore *core,
GimpPaintOptions *options);

View File

@ -25,10 +25,11 @@
#include "paint-types.h"
#include "core/gimp.h"
#include "core/gimpimage.h"
#include "core/gimpgradient.h"
#include "core/gimppaintinfo.h"
#include "core/gimpcurve.h"
#include "gimpdynamicsoptions.h"
@ -157,6 +158,11 @@ static void gimp_dynamics_options_get_property (GObject *object,
GValue *value,
GParamSpec *pspec);
static void gimp_dynamics_options_curves_init (GimpDynamicOutputOptions *dynamics);
static void gimp_dynamics_options_curves_finalize (GimpDynamicOutputOptions *dynamics);
/*
G_DEFINE_TYPE_WITH_CODE (GimpDynamicsOptions, gimp_dynamics_options, GIMP_TYPE_DATA,
G_IMPLEMENT_INTERFACE (GIMP_TYPE_DOCKED,
@ -361,12 +367,25 @@ gimp_dynamics_options_init (GimpDynamicsOptions *options)
{
options->opacity_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->opacity_dynamics);
options->hardness_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->hardness_dynamics);
options->rate_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->rate_dynamics);
options->size_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->size_dynamics);
options->aspect_ratio_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->aspect_ratio_dynamics);
options->color_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->color_dynamics);
options->angle_dynamics = g_slice_new0 (GimpDynamicOutputOptions);
gimp_dynamics_options_curves_init(options->angle_dynamics);
}
@ -376,18 +395,72 @@ gimp_dynamics_options_finalize (GObject *object)
{
GimpDynamicsOptions *options = GIMP_DYNAMICS_OPTIONS (object);
gimp_dynamics_options_curves_finalize (options->opacity_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->opacity_dynamics);
gimp_dynamics_options_curves_finalize (options->hardness_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->hardness_dynamics);
gimp_dynamics_options_curves_finalize (options->rate_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->rate_dynamics);
gimp_dynamics_options_curves_finalize (options->size_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->size_dynamics);
gimp_dynamics_options_curves_finalize (options->aspect_ratio_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->aspect_ratio_dynamics);
gimp_dynamics_options_curves_finalize (options->color_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->color_dynamics);
gimp_dynamics_options_curves_finalize (options->angle_dynamics);
g_slice_free (GimpDynamicOutputOptions, options->angle_dynamics);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gimp_dynamics_options_curves_init (GimpDynamicOutputOptions *dynamics)
{
dynamics->pressure_curve = g_object_new (GIMP_TYPE_CURVE,
"name", "Pressure curve",
NULL);
dynamics->velocity_curve = g_object_new (GIMP_TYPE_CURVE,
"name", "Velocity curve",
NULL);
dynamics->direction_curve = g_object_new (GIMP_TYPE_CURVE,
"name", "Direction curve",
NULL);
dynamics->tilt_curve = g_object_new (GIMP_TYPE_CURVE,
"name", "Tilt curve",
NULL);
dynamics->random_curve = g_object_new (GIMP_TYPE_CURVE,
"name", "Random curve",
NULL);
dynamics->fade_curve = g_object_new (GIMP_TYPE_CURVE,
"name", "Fade curve",
NULL);
}
static void
gimp_dynamics_options_curves_finalize (GimpDynamicOutputOptions *dynamics)
{
g_object_unref(dynamics->pressure_curve);
g_object_unref(dynamics->velocity_curve);
g_object_unref(dynamics->direction_curve);
g_object_unref(dynamics->tilt_curve);
g_object_unref(dynamics->random_curve);
g_object_unref(dynamics->fade_curve);
}
static void
gimp_dynamics_options_set_property (GObject *object,
guint property_id,
@ -811,7 +884,7 @@ gimp_dynamics_options_notify (GObject *object,
}
GimpData *
gimp_dynamics_options_new (GString *name)
gimp_dynamics_options_new (const gchar *name)
{
GimpDynamicsOptions *options;

View File

@ -35,6 +35,8 @@ struct _GimpDynamicOutputOptions
gboolean random;
gboolean fade;
gdouble fade_length;
GimpCurve* pressure_curve;
GimpCurve* velocity_curve;
GimpCurve* direction_curve;
@ -81,7 +83,7 @@ struct _GimpDynamicsOptionsClass
GType gimp_dynamics_options_get_type (void) G_GNUC_CONST;
GimpData * gimp_dynamics_options_new (GString *name);
GimpData * gimp_dynamics_options_new (const gchar *name);
GimpData * gimp_dynamics_get_standard (void);