mirror of https://github.com/GNOME/gimp.git
Add dynamics context and factory data and functions (need debugging).
This commit is contained in:
parent
3a78004757
commit
f48a7e4a8b
|
@ -75,6 +75,8 @@
|
|||
#include "gimptemplate.h"
|
||||
#include "gimptoolinfo.h"
|
||||
|
||||
#include "paint/gimpdynamicsoptions.h"
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
||||
|
||||
|
@ -238,6 +240,7 @@ gimp_init (Gimp *gimp)
|
|||
|
||||
gimp->fonts = NULL;
|
||||
gimp->brush_factory = NULL;
|
||||
gimp->dynamics_factory = NULL;
|
||||
gimp->pattern_factory = NULL;
|
||||
gimp->gradient_factory = NULL;
|
||||
gimp->palette_factory = NULL;
|
||||
|
@ -277,6 +280,9 @@ gimp_dispose (GObject *object)
|
|||
if (gimp->brush_factory)
|
||||
gimp_data_factory_data_free (gimp->brush_factory);
|
||||
|
||||
if (gimp->dynamics_factory)
|
||||
gimp_data_factory_data_free (gimp->dynamics_factory);
|
||||
|
||||
if (gimp->pattern_factory)
|
||||
gimp_data_factory_data_free (gimp->pattern_factory);
|
||||
|
||||
|
@ -339,6 +345,12 @@ gimp_finalize (GObject *object)
|
|||
gimp->brush_factory = NULL;
|
||||
}
|
||||
|
||||
if (gimp->dynamics_factory)
|
||||
{
|
||||
g_object_unref (gimp->dynamics_factory);
|
||||
gimp->dynamics_factory = NULL;
|
||||
}
|
||||
|
||||
if (gimp->pattern_factory)
|
||||
{
|
||||
g_object_unref (gimp->pattern_factory);
|
||||
|
@ -478,6 +490,8 @@ gimp_get_memsize (GimpObject *object,
|
|||
gui_size);
|
||||
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->brush_factory),
|
||||
gui_size);
|
||||
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->dynamics_factory),
|
||||
gui_size);
|
||||
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->pattern_factory),
|
||||
gui_size);
|
||||
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->gradient_factory),
|
||||
|
@ -526,6 +540,12 @@ gimp_real_initialize (Gimp *gimp,
|
|||
{ gimp_brush_pipe_load, GIMP_BRUSH_PIPE_FILE_EXTENSION, FALSE }
|
||||
};
|
||||
|
||||
static const GimpDataFactoryLoaderEntry dynamics_loader_entries[] =
|
||||
{
|
||||
{ gimp_pattern_load, GIMP_PATTERN_FILE_EXTENSION, FALSE },
|
||||
{ gimp_pattern_load_pixbuf, NULL, FALSE }
|
||||
};
|
||||
|
||||
static const GimpDataFactoryLoaderEntry pattern_loader_entries[] =
|
||||
{
|
||||
{ gimp_pattern_load, GIMP_PATTERN_FILE_EXTENSION, FALSE },
|
||||
|
@ -566,6 +586,18 @@ gimp_real_initialize (Gimp *gimp,
|
|||
gimp_object_set_static_name (GIMP_OBJECT (gimp->brush_factory),
|
||||
"brush factory");
|
||||
|
||||
|
||||
gimp->dynamics_factory =
|
||||
gimp_data_factory_new (gimp,
|
||||
GIMP_TYPE_DYNAMICS_OPTIONS,
|
||||
"dynamics-path", "dynamics-path-writable",
|
||||
dynamics_loader_entries,
|
||||
G_N_ELEMENTS (dynamics_loader_entries),
|
||||
gimp_dynamics_options_new,
|
||||
gimp_dynamics_get_standard);
|
||||
gimp_object_set_static_name (GIMP_OBJECT (gimp->dynamics_factory),
|
||||
"dynamics factory");
|
||||
|
||||
gimp->pattern_factory =
|
||||
gimp_data_factory_new (gimp,
|
||||
GIMP_TYPE_PATTERN,
|
||||
|
|
|
@ -90,6 +90,7 @@ struct _Gimp
|
|||
GimpContainer *fonts;
|
||||
|
||||
GimpDataFactory *brush_factory;
|
||||
GimpDataFactory *dynamics_factory;
|
||||
GimpDataFactory *pattern_factory;
|
||||
GimpDataFactory *gradient_factory;
|
||||
GimpDataFactory *palette_factory;
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "gimptemplate.h"
|
||||
#include "gimptoolinfo.h"
|
||||
|
||||
#include "paint/gimpdynamicsoptions.h"
|
||||
#include "text/gimpfont.h"
|
||||
|
||||
#include "gimp-intl.h"
|
||||
|
@ -156,9 +157,22 @@ static void gimp_context_brush_removed (GimpContainer *brush_list,
|
|||
GimpContext *context);
|
||||
static void gimp_context_brush_list_thaw (GimpContainer *container,
|
||||
GimpContext *context);
|
||||
|
||||
static void gimp_context_real_set_brush (GimpContext *context,
|
||||
GimpBrush *brush);
|
||||
|
||||
/* dynamics */
|
||||
|
||||
static void gimp_context_dynamics_dirty (GimpDynamicsOptions *dynamics,
|
||||
GimpContext *context);
|
||||
static void gimp_context_dynamics_removed (GimpContainer *dynamics_list,
|
||||
GimpDynamicsOptions *dynamics,
|
||||
GimpContext *context);
|
||||
static void gimp_context_dynamics_list_thaw (GimpContainer *container,
|
||||
GimpContext *context);
|
||||
static void gimp_context_real_set_dynamics (GimpContext *context,
|
||||
GimpDynamicsOptions *dynamics);
|
||||
|
||||
/* pattern */
|
||||
static void gimp_context_pattern_dirty (GimpPattern *pattern,
|
||||
GimpContext *context);
|
||||
|
@ -267,6 +281,7 @@ enum
|
|||
OPACITY_CHANGED,
|
||||
PAINT_MODE_CHANGED,
|
||||
BRUSH_CHANGED,
|
||||
DYNAMICS_CHANGED,
|
||||
PATTERN_CHANGED,
|
||||
GRADIENT_CHANGED,
|
||||
PALETTE_CHANGED,
|
||||
|
@ -440,6 +455,16 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
G_TYPE_NONE, 1,
|
||||
GIMP_TYPE_BRUSH);
|
||||
|
||||
gimp_context_signals[DYNAMICS_CHANGED] =
|
||||
g_signal_new ("dynamics-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (GimpContextClass, dynamics_changed),
|
||||
NULL, NULL,
|
||||
gimp_marshal_VOID__OBJECT,
|
||||
G_TYPE_NONE, 1,
|
||||
GIMP_TYPE_DYNAMICS_OPTIONS);
|
||||
|
||||
gimp_context_signals[PATTERN_CHANGED] =
|
||||
g_signal_new ("pattern-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
|
@ -527,6 +552,7 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
klass->opacity_changed = NULL;
|
||||
klass->paint_mode_changed = NULL;
|
||||
klass->brush_changed = NULL;
|
||||
klass->dynamics_changed = NULL;
|
||||
klass->pattern_changed = NULL;
|
||||
klass->gradient_changed = NULL;
|
||||
klass->palette_changed = NULL;
|
||||
|
@ -539,6 +565,7 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
gimp_context_prop_types[GIMP_CONTEXT_PROP_TOOL] = GIMP_TYPE_TOOL_INFO;
|
||||
gimp_context_prop_types[GIMP_CONTEXT_PROP_PAINT_INFO] = GIMP_TYPE_PAINT_INFO;
|
||||
gimp_context_prop_types[GIMP_CONTEXT_PROP_BRUSH] = GIMP_TYPE_BRUSH;
|
||||
gimp_context_prop_types[GIMP_CONTEXT_PROP_DYNAMICS] = GIMP_TYPE_DYNAMICS_OPTIONS;
|
||||
gimp_context_prop_types[GIMP_CONTEXT_PROP_PATTERN] = GIMP_TYPE_PATTERN;
|
||||
gimp_context_prop_types[GIMP_CONTEXT_PROP_GRADIENT] = GIMP_TYPE_GRADIENT;
|
||||
gimp_context_prop_types[GIMP_CONTEXT_PROP_PALETTE] = GIMP_TYPE_PALETTE;
|
||||
|
@ -609,6 +636,12 @@ gimp_context_class_init (GimpContextClass *klass)
|
|||
GIMP_TYPE_BRUSH,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, GIMP_CONTEXT_PROP_DYNAMICS,
|
||||
gimp_context_prop_names[GIMP_CONTEXT_PROP_DYNAMICS],
|
||||
NULL,
|
||||
GIMP_TYPE_DYNAMICS_OPTIONS,
|
||||
GIMP_PARAM_STATIC_STRINGS);
|
||||
|
||||
GIMP_CONFIG_INSTALL_PROP_OBJECT (object_class, GIMP_CONTEXT_PROP_PATTERN,
|
||||
gimp_context_prop_names[GIMP_CONTEXT_PROP_PATTERN],
|
||||
NULL,
|
||||
|
@ -748,6 +781,13 @@ gimp_context_constructor (GType type,
|
|||
G_CALLBACK (gimp_context_brush_list_thaw),
|
||||
object, 0);
|
||||
|
||||
g_signal_connect_object (gimp_data_factory_get_container (gimp->dynamics_factory), "remove",
|
||||
G_CALLBACK (gimp_context_dynamics_removed),
|
||||
object, 0);
|
||||
g_signal_connect_object (gimp_data_factory_get_container (gimp->dynamics_factory), "thaw",
|
||||
G_CALLBACK (gimp_context_dynamics_list_thaw),
|
||||
object, 0);
|
||||
|
||||
g_signal_connect_object (gimp_data_factory_get_container (gimp->pattern_factory), "remove",
|
||||
G_CALLBACK (gimp_context_pattern_removed),
|
||||
object, 0);
|
||||
|
@ -977,6 +1017,9 @@ gimp_context_set_property (GObject *object,
|
|||
case GIMP_CONTEXT_PROP_BRUSH:
|
||||
gimp_context_set_brush (context, g_value_get_object (value));
|
||||
break;
|
||||
case GIMP_CONTEXT_PROP_DYNAMICS:
|
||||
gimp_context_set_dynamics (context, g_value_get_object (value));
|
||||
break;
|
||||
case GIMP_CONTEXT_PROP_PATTERN:
|
||||
gimp_context_set_pattern (context, g_value_get_object (value));
|
||||
break;
|
||||
|
@ -1054,6 +1097,9 @@ gimp_context_get_property (GObject *object,
|
|||
case GIMP_CONTEXT_PROP_BRUSH:
|
||||
g_value_set_object (value, gimp_context_get_brush (context));
|
||||
break;
|
||||
case GIMP_CONTEXT_PROP_DYNAMICS:
|
||||
g_value_set_object (value, gimp_context_get_dynamics (context));
|
||||
break;
|
||||
case GIMP_CONTEXT_PROP_PATTERN:
|
||||
g_value_set_object (value, gimp_context_get_pattern (context));
|
||||
break;
|
||||
|
@ -1129,6 +1175,7 @@ gimp_context_serialize_property (GimpConfig *config,
|
|||
case GIMP_CONTEXT_PROP_TOOL:
|
||||
case GIMP_CONTEXT_PROP_PAINT_INFO:
|
||||
case GIMP_CONTEXT_PROP_BRUSH:
|
||||
case GIMP_CONTEXT_PROP_DYNAMICS:
|
||||
case GIMP_CONTEXT_PROP_PATTERN:
|
||||
case GIMP_CONTEXT_PROP_GRADIENT:
|
||||
case GIMP_CONTEXT_PROP_PALETTE:
|
||||
|
@ -1189,6 +1236,12 @@ gimp_context_deserialize_property (GimpConfig *object,
|
|||
name_loc = &context->brush_name;
|
||||
break;
|
||||
|
||||
case GIMP_CONTEXT_PROP_DYNAMICS:
|
||||
container = gimp_data_factory_get_container (context->gimp->dynamics_factory);
|
||||
current = (GimpObject *) context->dynamics;
|
||||
name_loc = &context->dynamics_name;
|
||||
break;
|
||||
|
||||
case GIMP_CONTEXT_PROP_PATTERN:
|
||||
container = gimp_data_factory_get_container (context->gimp->pattern_factory);
|
||||
current = (GimpObject *) context->pattern;
|
||||
|
@ -1492,6 +1545,14 @@ gimp_context_copy_property (GimpContext *src,
|
|||
dest_name_loc = &dest->brush_name;
|
||||
break;
|
||||
|
||||
case GIMP_CONTEXT_PROP_DYNAMICS:
|
||||
gimp_context_real_set_dynamics (dest, src->dynamics);
|
||||
object = src->dynamics;
|
||||
standard_object = standard_dynamics;
|
||||
src_name = src->dynamics_name;
|
||||
dest_name_loc = &dest->dynamics_name;
|
||||
break;
|
||||
|
||||
case GIMP_CONTEXT_PROP_PATTERN:
|
||||
gimp_context_real_set_pattern (dest, src->pattern);
|
||||
object = src->pattern;
|
||||
|
@ -2404,6 +2465,127 @@ gimp_context_real_set_brush (GimpContext *context,
|
|||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* dynamics *****************************************************************/
|
||||
|
||||
|
||||
GimpBrush *
|
||||
gimp_context_get_dynamics (GimpContext *context)
|
||||
{
|
||||
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
|
||||
|
||||
return context->dynamics;
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_set_dynamics (GimpContext *context,
|
||||
GimpDynamicsOptions *dynamics)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_CONTEXT (context));
|
||||
g_return_if_fail (! dynamics || GIMP_IS_DYNAMICS (dynamics));
|
||||
context_find_defined (context, GIMP_CONTEXT_PROP_DYNAMICS);
|
||||
|
||||
gimp_context_real_set_dynamics (context, dynamics);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_context_dynamics_changed (GimpContext *context)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_CONTEXT (context));
|
||||
|
||||
g_signal_emit (context,
|
||||
gimp_context_signals[DYNAMICS_CHANGED], 0,
|
||||
context->dynamics);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_context_dynamics_dirty (GimpDynamicsOptions *dynamics,
|
||||
GimpContext *context)
|
||||
{
|
||||
g_free (context->dynamics_name);
|
||||
context->dynamics_name = g_strdup (GIMP_OBJECT (dynamics)->name);
|
||||
}
|
||||
|
||||
static void gimp_context_dynamics_removed (GimpContainer *dynamics_list,
|
||||
GimpDynamicsOptions *dynamics,
|
||||
GimpContext *context);
|
||||
{
|
||||
if (dynamics == context->dynamics)
|
||||
{
|
||||
context->dynamics = NULL;
|
||||
|
||||
g_signal_handlers_disconnect_by_func (dynamics,
|
||||
gimp_context_dynamics_dirty,
|
||||
context);
|
||||
g_object_unref (dynamics);
|
||||
|
||||
if (! gimp_container_frozen (container))
|
||||
gimp_context_dynamics_list_thaw (container, context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void gimp_context_dynamics_list_thaw (GimpContainer *container,
|
||||
GimpContext *context);
|
||||
{
|
||||
GimpDynamicsOptions *dynamics;
|
||||
/*
|
||||
if (! context->dynamics_name)
|
||||
context->dynamics_name = g_strdup (context->gimp->config->default_dynamics);
|
||||
*/
|
||||
dynamics = gimp_context_find_object (context, container,
|
||||
context->dynamics_name,
|
||||
gimp_dynamics_get_standard ());
|
||||
|
||||
gimp_context_real_set_dynamics (context, dynamics);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gimp_context_real_set_dynamics (GimpContext *context,
|
||||
GimpDynamicsOptions *dynamics)
|
||||
{
|
||||
/* if (! standard_dynamics)
|
||||
standard_dynamics = GIMP_BRUSH (gimp_dynamics_get_standard ());
|
||||
*/
|
||||
if (context->dynamics == dynamics)
|
||||
return;
|
||||
|
||||
if (context->dynamics_name && dynamics != standard_dynamics)
|
||||
{
|
||||
g_free (context->dynamics_name);
|
||||
context->dynamics_name = NULL;
|
||||
}
|
||||
|
||||
/* disconnect from the old brush's signals */
|
||||
if (context->dynamics)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (context->dynamics,
|
||||
gimp_context_dynamics_dirty,
|
||||
context);
|
||||
g_object_unref (context->dynamics);
|
||||
}
|
||||
|
||||
context->dynamics = dynamics;
|
||||
|
||||
if (dynamics)
|
||||
{
|
||||
g_object_ref (dynamics);
|
||||
|
||||
g_signal_connect_object (dynamics, "name-changed",
|
||||
G_CALLBACK (gimp_context_dynamics_dirty),
|
||||
context,
|
||||
0);
|
||||
|
||||
if (dynamics != standard_dynamics)
|
||||
context->dynamics_name = g_strdup (GIMP_OBJECT (dynamics)->name);
|
||||
}
|
||||
|
||||
g_object_notify (G_OBJECT (context), "dynamics");
|
||||
gimp_context_dynamics_changed (context);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* pattern *****************************************************************/
|
||||
|
||||
|
|
|
@ -64,6 +64,9 @@ struct _GimpContext
|
|||
GimpBrush *brush;
|
||||
gchar *brush_name;
|
||||
|
||||
GimpDynamicsOptions *dynamics;
|
||||
gchar *dynamics_name;
|
||||
|
||||
GimpPattern *pattern;
|
||||
gchar *pattern_name;
|
||||
|
||||
|
@ -110,6 +113,8 @@ struct _GimpContextClass
|
|||
GimpLayerModeEffects paint_mode);
|
||||
void (* brush_changed) (GimpContext *context,
|
||||
GimpBrush *brush);
|
||||
void (* dynamics_changed) (GimpContext *context,
|
||||
GimpDynamicsOptions *dynamics);
|
||||
void (* pattern_changed) (GimpContext *context,
|
||||
GimpPattern *pattern);
|
||||
void (* gradient_changed) (GimpContext *context,
|
||||
|
@ -257,6 +262,20 @@ void gimp_context_set_brush (GimpContext *context,
|
|||
GimpBrush *brush);
|
||||
void gimp_context_brush_changed (GimpContext *context);
|
||||
|
||||
/* brush */
|
||||
GimpBrush * gimp_context_get_brush (GimpContext *context);
|
||||
void gimp_context_set_brush (GimpContext *context,
|
||||
GimpBrush *brush);
|
||||
void gimp_context_brush_changed (GimpContext *context);
|
||||
|
||||
|
||||
/* dynamics */
|
||||
GimpDynamicsOptions * gimp_context_get_dynamics (GimpContext *context);
|
||||
void gimp_context_set_dynamics (GimpContext *context,
|
||||
GimpDynamicsOptions *dynamics);
|
||||
void gimp_context_dynamics_changed (GimpContext *context);
|
||||
|
||||
|
||||
|
||||
/* pattern */
|
||||
GimpPattern * gimp_context_get_pattern (GimpContext *context);
|
||||
|
|
|
@ -1023,6 +1023,26 @@ gimp_dynamics_options_new (GimpPaintInfo *dynamics_info)
|
|||
}
|
||||
|
||||
|
||||
GimpData *
|
||||
gimp_dynamics_get_standard (void)
|
||||
{
|
||||
static GimpData *standard_dynamics = NULL;
|
||||
|
||||
if (! standard_dynamics)
|
||||
{
|
||||
standard_dynamics = gimp_dynamics_options_new ("Standard");
|
||||
|
||||
standard_dynamics->dirty = FALSE;
|
||||
gimp_data_make_internal (standard_dynamics,
|
||||
"gimp-dynamics-standard");
|
||||
|
||||
g_object_ref (standard_dynamics);
|
||||
}
|
||||
|
||||
return standard_dynamics;
|
||||
}
|
||||
|
||||
|
||||
/* Calculates dynamics mix to be used for same parameter
|
||||
* (velocity/pressure/direction/tilt/random) mix Needed in may places and tools.
|
||||
*
|
||||
|
|
|
@ -98,6 +98,6 @@ GType gimp_dynamics_options_get_type (void) G_GNUC_CONST;
|
|||
|
||||
GimpData * gimp_dynamics_options_new (GimpPaintInfo *dynamics_info);
|
||||
|
||||
|
||||
GimpData * gimp_dynamics_get_standard (void);
|
||||
|
||||
#endif /* __GIMP_DYNAMICS_OPTIONS_H__ */
|
||||
|
|
|
@ -201,8 +201,8 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
|
|||
gtk_container_add (GTK_CONTAINER (frame), data_editor->view);
|
||||
gtk_widget_show (data_editor->view);
|
||||
|
||||
/*
|
||||
//editor->shape_group = NULL;
|
||||
/* table for sliders/labels */
|
||||
editor->options_vbox = gtk_table_new (4, 3, FALSE);
|
||||
gtk_table_set_row_spacings (GTK_TABLE (editor->options_vbox), 2);
|
||||
gtk_table_set_col_spacings (GTK_TABLE (editor->options_vbox), 2);
|
||||
|
@ -214,7 +214,7 @@ gimp_dynamics_editor_init (GimpDynamicsEditor *editor)
|
|||
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
|
||||
gtk_box_pack_start (GTK_BOX (editor->options_vbox), table, FALSE, FALSE, 0);
|
||||
gtk_widget_show (table);
|
||||
|
||||
*/
|
||||
/*
|
||||
g_object_set_data (G_OBJECT (vbox), "set_options", table);
|
||||
|
||||
|
@ -279,9 +279,9 @@ gimp_dynamics_editor_new (GimpContext *context,
|
|||
"menu-factory", menu_factory,
|
||||
"menu-identifier", "<DynamicsEditor>",
|
||||
"ui-path", "/dynamics-editor-popup",
|
||||
"data-factory", context->gimp->brush_factory,
|
||||
"data-factory", context->gimp->dynamics_factory,
|
||||
"context", context,
|
||||
"data", gimp_context_get_brush (context),
|
||||
"data", gimp_context_get_dynamics (context),*/
|
||||
NULL);
|
||||
|
||||
GtkWidget *vbox;
|
||||
|
@ -297,17 +297,6 @@ gimp_dynamics_editor_new (GimpContext *context,
|
|||
|
||||
//tool_type = tool_options->tool_info->tool_type;
|
||||
|
||||
/* the main table */
|
||||
/*
|
||||
return g_object_new (GIMP_TYPE_DYNAMICS_EDITOR,
|
||||
"menu-factory", menu_factory,
|
||||
"menu-identifier", "<DynamicsEditor>",
|
||||
"ui-path", "/dynamics-editor-popup",
|
||||
"data-factory", context->gimp->brush_factory,
|
||||
"context", context,
|
||||
"data", gimp_context_get_brush (context),
|
||||
NULL);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue