app, libgimp, pdb: new PDB API to enable/disable dynamics.

New libgimp C functions:
- gimp_context_are_dynamics_enabled()
- gimp_context_enable_dynamics()
This commit is contained in:
Jehan 2022-02-04 13:54:59 +01:00
parent b46fafb3a0
commit d9387811f4
8 changed files with 285 additions and 17 deletions

View File

@ -365,7 +365,7 @@ gimp_brush_core_start (GimpPaintCore *paint_core,
gimp_brush_core_set_brush (core, gimp_context_get_brush (context)); gimp_brush_core_set_brush (core, gimp_context_get_brush (context));
if (gimp_paint_options_get_dynamics_enabled (paint_options)) if (gimp_paint_options_are_dynamics_enabled (paint_options))
{ {
gimp_brush_core_set_dynamics (core, gimp_context_get_dynamics (context)); gimp_brush_core_set_dynamics (core, gimp_context_get_dynamics (context));
} }

View File

@ -983,12 +983,6 @@ gimp_paint_options_get_jitter (GimpPaintOptions *paint_options,
return 0.0; return 0.0;
} }
gboolean
gimp_paint_options_get_dynamics_enabled (GimpPaintOptions *paint_options)
{
return paint_options->dynamics_enabled;
}
gboolean gboolean
gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options, gimp_paint_options_get_gradient_color (GimpPaintOptions *paint_options,
GimpImage *image, GimpImage *image,
@ -1169,6 +1163,24 @@ gimp_paint_options_set_default_brush_hardness (GimpPaintOptions *paint_options,
} }
} }
gboolean
gimp_paint_options_are_dynamics_enabled (GimpPaintOptions *paint_options)
{
return paint_options->dynamics_enabled;
}
void
gimp_paint_options_enable_dynamics (GimpPaintOptions *paint_options,
gboolean enable)
{
if (paint_options->dynamics_enabled != enable)
{
g_object_set (paint_options,
"dynamics-enabled", enable,
NULL);
}
}
static const gchar *brush_props[] = static const gchar *brush_props[] =
{ {
"brush-size", "brush-size",

View File

@ -166,12 +166,15 @@ void gimp_paint_options_set_default_brush_hardness
(GimpPaintOptions *options, (GimpPaintOptions *options,
GimpBrush *brush); GimpBrush *brush);
gboolean gimp_paint_options_are_dynamics_enabled (GimpPaintOptions *paint_options);
void gimp_paint_options_enable_dynamics (GimpPaintOptions *paint_options,
gboolean enable);
gboolean gimp_paint_options_is_prop (const gchar *prop_name, gboolean gimp_paint_options_is_prop (const gchar *prop_name,
GimpContextPropMask prop_mask); GimpContextPropMask prop_mask);
void gimp_paint_options_copy_props (GimpPaintOptions *src, void gimp_paint_options_copy_props (GimpPaintOptions *src,
GimpPaintOptions *dest, GimpPaintOptions *dest,
GimpContextPropMask prop_mask); GimpContextPropMask prop_mask);
gboolean gimp_paint_options_get_dynamics_enabled (GimpPaintOptions *paint_options);
#endif /* __GIMP_PAINT_OPTIONS_H__ */ #endif /* __GIMP_PAINT_OPTIONS_H__ */

View File

@ -1398,6 +1398,65 @@ context_set_dynamics_invoker (GimpProcedure *procedure,
error ? *error : NULL); error ? *error : NULL);
} }
static GimpValueArray *
context_are_dynamics_enabled_invoker (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
const GimpValueArray *args,
GError **error)
{
gboolean success = TRUE;
GimpValueArray *return_vals;
gboolean enabled = FALSE;
GimpPaintOptions *options =
gimp_pdb_context_get_paint_options (GIMP_PDB_CONTEXT (context),
"gimp-paintbrush");
if (options)
enabled = gimp_paint_options_are_dynamics_enabled (options);
else
success = FALSE;
return_vals = gimp_procedure_get_return_values (procedure, success,
error ? *error : NULL);
if (success)
g_value_set_boolean (gimp_value_array_index (return_vals, 1), enabled);
return return_vals;
}
static GimpValueArray *
context_enable_dynamics_invoker (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
const GimpValueArray *args,
GError **error)
{
gboolean success = TRUE;
gboolean enable;
enable = g_value_get_boolean (gimp_value_array_index (args, 0));
if (success)
{
GimpPaintOptions *options =
gimp_pdb_context_get_paint_options (GIMP_PDB_CONTEXT (context),
"gimp-paintbrush");
if (options)
gimp_paint_options_enable_dynamics (options, enable);
else
success = FALSE;
}
return gimp_procedure_get_return_values (procedure, success,
error ? *error : NULL);
}
static GimpValueArray * static GimpValueArray *
context_get_mypaint_brush_invoker (GimpProcedure *procedure, context_get_mypaint_brush_invoker (GimpProcedure *procedure,
Gimp *gimp, Gimp *gimp,
@ -4165,7 +4224,8 @@ register_context_procs (GimpPDB *pdb)
"gimp-context-get-dynamics"); "gimp-context-get-dynamics");
gimp_procedure_set_static_help (procedure, gimp_procedure_set_static_help (procedure,
"Retrieve the currently active paint dynamics.", "Retrieve the currently active paint dynamics.",
"This procedure returns the name of the currently active paint dynamics. All paint operations and stroke operations use this paint dynamics to control the application of paint to the image.", "This procedure returns the name of the currently active paint dynamics. If enabled, all paint operations and stroke operations use this paint dynamics to control the application of paint to the image. If disabled, the dynamics will be ignored during paint actions.\n"
"See 'gimp-context-are-dynamics-enabled' to enquire whether dynamics are used or ignored.",
NULL); NULL);
gimp_procedure_set_static_attribution (procedure, gimp_procedure_set_static_attribution (procedure,
"Michael Natterer <mitch@gimp.org>", "Michael Natterer <mitch@gimp.org>",
@ -4189,7 +4249,7 @@ register_context_procs (GimpPDB *pdb)
"gimp-context-set-dynamics"); "gimp-context-set-dynamics");
gimp_procedure_set_static_help (procedure, gimp_procedure_set_static_help (procedure,
"Set the specified paint dynamics as the active paint dynamics.", "Set the specified paint dynamics as the active paint dynamics.",
"This procedure allows the active paint dynamics to be set by specifying its name. The name is simply a string which corresponds to one of the names of the installed paint dynamics. If there is no matching paint dynamics found, this procedure will return an error. Otherwise, the specified paint dynamics becomes active and will be used in all subsequent paint operations.", "This procedure allows the active paint dynamics to be set by specifying its name. The name is simply a string which corresponds to one of the names of the installed paint dynamics. If there is no matching paint dynamics found, this procedure will return an error. Otherwise, the specified paint dynamics becomes active and will be used in all subsequent paint operations as long as dynamics are enabled.",
NULL); NULL);
gimp_procedure_set_static_attribution (procedure, gimp_procedure_set_static_attribution (procedure,
"Michael Natterer <mitch@gimp.org>", "Michael Natterer <mitch@gimp.org>",
@ -4205,6 +4265,52 @@ register_context_procs (GimpPDB *pdb)
gimp_pdb_register_procedure (pdb, procedure); gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure); g_object_unref (procedure);
/*
* gimp-context-are-dynamics-enabled
*/
procedure = gimp_procedure_new (context_are_dynamics_enabled_invoker);
gimp_object_set_static_name (GIMP_OBJECT (procedure),
"gimp-context-are-dynamics-enabled");
gimp_procedure_set_static_help (procedure,
"Inform whether the currently active paint dynamics will be applied to painting.",
"This procedure returns whether the currently active paint dynamics (as returned by 'gimp-context-get-dynamics') is enabled.",
NULL);
gimp_procedure_set_static_attribution (procedure,
"Jehan",
"Jehan",
"2022");
gimp_procedure_add_return_value (procedure,
g_param_spec_boolean ("enabled",
"enabled",
"Whether dynamics enabled or disabled",
FALSE,
GIMP_PARAM_READWRITE));
gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure);
/*
* gimp-context-enable-dynamics
*/
procedure = gimp_procedure_new (context_enable_dynamics_invoker);
gimp_object_set_static_name (GIMP_OBJECT (procedure),
"gimp-context-enable-dynamics");
gimp_procedure_set_static_help (procedure,
"Set the specified paint dynamics as the active paint dynamics.",
"This procedure enables the active paint dynamics to be used in all subsequent paint operations.",
NULL);
gimp_procedure_set_static_attribution (procedure,
"Jehan",
"Jehan",
"2022");
gimp_procedure_add_argument (procedure,
g_param_spec_boolean ("enable",
"enable",
"Whether to enable or disable dynamics",
FALSE,
GIMP_PARAM_READWRITE));
gimp_pdb_register_procedure (pdb, procedure);
g_object_unref (procedure);
/* /*
* gimp-context-get-mypaint-brush * gimp-context-get-mypaint-brush
*/ */

View File

@ -28,7 +28,7 @@
#include "internal-procs.h" #include "internal-procs.h"
/* 759 procedures registered total */ /* 761 procedures registered total */
void void
internal_procs_init (GimpPDB *pdb) internal_procs_init (GimpPDB *pdb)

View File

@ -1839,8 +1839,12 @@ gimp_context_set_brush_force (gdouble force)
* Retrieve the currently active paint dynamics. * Retrieve the currently active paint dynamics.
* *
* This procedure returns the name of the currently active paint * This procedure returns the name of the currently active paint
* dynamics. All paint operations and stroke operations use this paint * dynamics. If enabled, all paint operations and stroke operations use
* dynamics to control the application of paint to the image. * this paint dynamics to control the application of paint to the
* image. If disabled, the dynamics will be ignored during paint
* actions.
* See gimp_context_are_dynamics_enabled() to enquire whether dynamics
* are used or ignored.
* *
* Returns: (transfer full): The name of the active paint dynamics. * Returns: (transfer full): The name of the active paint dynamics.
* The returned value must be freed with g_free(). * The returned value must be freed with g_free().
@ -1881,7 +1885,8 @@ gimp_context_get_dynamics (void)
* to one of the names of the installed paint dynamics. If there is no * to one of the names of the installed paint dynamics. If there is no
* matching paint dynamics found, this procedure will return an error. * matching paint dynamics found, this procedure will return an error.
* Otherwise, the specified paint dynamics becomes active and will be * Otherwise, the specified paint dynamics becomes active and will be
* used in all subsequent paint operations. * used in all subsequent paint operations as long as dynamics are
* enabled.
* *
* Returns: TRUE on success. * Returns: TRUE on success.
* *
@ -1910,6 +1915,78 @@ gimp_context_set_dynamics (const gchar *name)
return success; return success;
} }
/**
* gimp_context_are_dynamics_enabled:
*
* Inform whether the currently active paint dynamics will be applied
* to painting.
*
* This procedure returns whether the currently active paint dynamics
* (as returned by gimp_context_get_dynamics()) is enabled.
*
* Returns: Whether dynamics enabled or disabled.
*
* Since: 3.0
**/
gboolean
gimp_context_are_dynamics_enabled (void)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gboolean enabled = FALSE;
args = gimp_value_array_new_from_types (NULL,
G_TYPE_NONE);
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-context-are-dynamics-enabled",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
enabled = GIMP_VALUES_GET_BOOLEAN (return_vals, 1);
gimp_value_array_unref (return_vals);
return enabled;
}
/**
* gimp_context_enable_dynamics:
* @enable: Whether to enable or disable dynamics.
*
* Set the specified paint dynamics as the active paint dynamics.
*
* This procedure enables the active paint dynamics to be used in all
* subsequent paint operations.
*
* Returns: TRUE on success.
*
* Since: 3.0
**/
gboolean
gimp_context_enable_dynamics (gboolean enable)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gboolean success = TRUE;
args = gimp_value_array_new_from_types (NULL,
G_TYPE_BOOLEAN, enable,
G_TYPE_NONE);
return_vals = gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-context-enable-dynamics",
args);
gimp_value_array_unref (args);
success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS;
gimp_value_array_unref (return_vals);
return success;
}
/** /**
* gimp_context_get_mypaint_brush: * gimp_context_get_mypaint_brush:
* *

View File

@ -86,6 +86,8 @@ gdouble gimp_context_get_brush_force (void);
gboolean gimp_context_set_brush_force (gdouble force); gboolean gimp_context_set_brush_force (gdouble force);
gchar* gimp_context_get_dynamics (void); gchar* gimp_context_get_dynamics (void);
gboolean gimp_context_set_dynamics (const gchar *name); gboolean gimp_context_set_dynamics (const gchar *name);
gboolean gimp_context_are_dynamics_enabled (void);
gboolean gimp_context_enable_dynamics (gboolean enable);
gchar* gimp_context_get_mypaint_brush (void); gchar* gimp_context_get_mypaint_brush (void);
gboolean gimp_context_set_mypaint_brush (const gchar *name); gboolean gimp_context_set_mypaint_brush (const gchar *name);
gchar* gimp_context_get_pattern (void); gchar* gimp_context_get_pattern (void);

View File

@ -1459,8 +1459,12 @@ sub context_get_dynamics {
$help = <<'HELP'; $help = <<'HELP';
This procedure returns the name of the currently active paint This procedure returns the name of the currently active paint
dynamics. All paint operations and stroke operations use this paint dynamics. If enabled, all paint operations and stroke operations use
dynamics to control the application of paint to the image. this paint dynamics to control the application of paint to the image.
If disabled, the dynamics will be ignored during paint actions.
See gimp_context_are_dynamics_enabled() to enquire whether dynamics are
used or ignored.
HELP HELP
&mitch_pdb_misc('2011', '2.8'); &mitch_pdb_misc('2011', '2.8');
@ -1493,7 +1497,7 @@ specifying its name. The name is simply a string which corresponds to
one of the names of the installed paint dynamics. If there is no one of the names of the installed paint dynamics. If there is no
matching paint dynamics found, this procedure will return an error. matching paint dynamics found, this procedure will return an error.
Otherwise, the specified paint dynamics becomes active and will be Otherwise, the specified paint dynamics becomes active and will be
used in all subsequent paint operations. used in all subsequent paint operations as long as dynamics are enabled.
HELP HELP
&mitch_pdb_misc('2011', '2.8'); &mitch_pdb_misc('2011', '2.8');
@ -1517,6 +1521,69 @@ CODE
); );
} }
sub context_are_dynamics_enabled {
$blurb = 'Inform whether the currently active paint dynamics will be applied to painting.';
$help = <<'HELP';
This procedure returns whether the currently active paint dynamics (as
returned by gimp_context_get_dynamics()) is enabled.
HELP
&jehan_pdb_misc('2022', '3.0');
@outargs = (
{ name => "enabled", type => 'boolean',
desc => "Whether dynamics enabled or disabled" }
);
%invoke = (
code => <<'CODE'
{
GimpPaintOptions *options =
gimp_pdb_context_get_paint_options (GIMP_PDB_CONTEXT (context),
"gimp-paintbrush");
if (options)
enabled = gimp_paint_options_are_dynamics_enabled (options);
else
success = FALSE;
}
CODE
);
}
sub context_enable_dynamics {
$blurb = 'Set the specified paint dynamics as the active paint dynamics.';
$help = <<'HELP';
This procedure enables the active paint dynamics to be used in all
subsequent paint operations.
HELP
&jehan_pdb_misc('2022', '3.0');
@inargs = (
{ name => "enable", type => 'boolean',
desc => "Whether to enable or disable dynamics" }
);
%invoke = (
code => <<'CODE'
{
GimpPaintOptions *options =
gimp_pdb_context_get_paint_options (GIMP_PDB_CONTEXT (context),
"gimp-paintbrush");
if (options)
gimp_paint_options_enable_dynamics (options, enable);
else
success = FALSE;
}
CODE
);
}
sub context_get_mypaint_brush { sub context_get_mypaint_brush {
$blurb = 'Retrieve the currently active MyPaint brush.'; $blurb = 'Retrieve the currently active MyPaint brush.';
@ -3380,6 +3447,7 @@ CODE
context_get_brush_force context_get_brush_force
context_set_brush_force context_set_brush_force
context_get_dynamics context_set_dynamics context_get_dynamics context_set_dynamics
context_are_dynamics_enabled context_enable_dynamics
context_get_mypaint_brush context_set_mypaint_brush context_get_mypaint_brush context_set_mypaint_brush
context_get_pattern context_set_pattern context_get_pattern context_set_pattern
context_get_gradient context_set_gradient context_get_gradient context_set_gradient