mirror of https://github.com/GNOME/gimp.git
app: turn the posterize tool into an ordinary GEGL filter
which means replacing the whole thing by a few lines.
This commit is contained in:
parent
2334cb41a7
commit
7b009c6900
|
@ -402,6 +402,11 @@ static const GimpStringActionEntry filters_actions[] =
|
||||||
"gegl:polar-coordinates",
|
"gegl:polar-coordinates",
|
||||||
NULL /* FIXME GIMP_HELP_FILTER_POLAR_COORDINATES */ },
|
NULL /* FIXME GIMP_HELP_FILTER_POLAR_COORDINATES */ },
|
||||||
|
|
||||||
|
{ "filters-posterize", GIMP_STOCK_TOOL_POSTERIZE,
|
||||||
|
NC_("filters-action", "_Posterize..."), NULL, NULL,
|
||||||
|
"gimp:posterize",
|
||||||
|
GIMP_HELP_TOOL_POSTERIZE },
|
||||||
|
|
||||||
{ "filters-red-eye-removal", GIMP_STOCK_GEGL,
|
{ "filters-red-eye-removal", GIMP_STOCK_GEGL,
|
||||||
NC_("filters-action", "_Red Eye Removal..."), NULL, NULL,
|
NC_("filters-action", "_Red Eye Removal..."), NULL, NULL,
|
||||||
"gegl:red-eye-removal",
|
"gegl:red-eye-removal",
|
||||||
|
@ -415,7 +420,7 @@ static const GimpStringActionEntry filters_actions[] =
|
||||||
{ "filters-semi-flatten", GIMP_STOCK_GEGL,
|
{ "filters-semi-flatten", GIMP_STOCK_GEGL,
|
||||||
NC_("filters-action", "_Semi-Flatten..."), NULL, NULL,
|
NC_("filters-action", "_Semi-Flatten..."), NULL, NULL,
|
||||||
"gimp:semi-flatten",
|
"gimp:semi-flatten",
|
||||||
NULL /* FIXME GIMP_HELP_FILTER_POLAR_COORDINATES */ },
|
NULL /* FIXME GIMP_HELP_FILTER_SEMI_FLATTEN */ },
|
||||||
|
|
||||||
{ "filters-sepia", GIMP_STOCK_GEGL,
|
{ "filters-sepia", GIMP_STOCK_GEGL,
|
||||||
NC_("filters-action", "_Sepia..."), NULL, NULL,
|
NC_("filters-action", "_Sepia..."), NULL, NULL,
|
||||||
|
@ -689,6 +694,7 @@ filters_actions_update (GimpActionGroup *group,
|
||||||
SET_SENSITIVE ("filters-pixelize", writable);
|
SET_SENSITIVE ("filters-pixelize", writable);
|
||||||
SET_SENSITIVE ("filters-plasma", writable);
|
SET_SENSITIVE ("filters-plasma", writable);
|
||||||
SET_SENSITIVE ("filters-polar-coordinates", writable);
|
SET_SENSITIVE ("filters-polar-coordinates", writable);
|
||||||
|
SET_SENSITIVE ("filters-posterize", writable);
|
||||||
SET_SENSITIVE ("filters-red-eye-removal", writable && !gray);
|
SET_SENSITIVE ("filters-red-eye-removal", writable && !gray);
|
||||||
SET_SENSITIVE ("filters-ripple", writable);
|
SET_SENSITIVE ("filters-ripple", writable);
|
||||||
SET_SENSITIVE ("filters-semi-flatten", writable && alpha);
|
SET_SENSITIVE ("filters-semi-flatten", writable && alpha);
|
||||||
|
|
|
@ -39,8 +39,6 @@ libappoperations_generic_a_sources = \
|
||||||
gimphuesaturationconfig.h \
|
gimphuesaturationconfig.h \
|
||||||
gimplevelsconfig.c \
|
gimplevelsconfig.c \
|
||||||
gimplevelsconfig.h \
|
gimplevelsconfig.h \
|
||||||
gimpposterizeconfig.c \
|
|
||||||
gimpposterizeconfig.h \
|
|
||||||
gimpthresholdconfig.c \
|
gimpthresholdconfig.c \
|
||||||
gimpthresholdconfig.h \
|
gimpthresholdconfig.h \
|
||||||
\
|
\
|
||||||
|
|
|
@ -24,20 +24,38 @@
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
#include <gegl.h>
|
#include <gegl.h>
|
||||||
|
|
||||||
|
#include "libgimpconfig/gimpconfig.h"
|
||||||
#include "libgimpmath/gimpmath.h"
|
#include "libgimpmath/gimpmath.h"
|
||||||
|
|
||||||
#include "operations-types.h"
|
#include "operations-types.h"
|
||||||
|
|
||||||
#include "gimpoperationposterize.h"
|
#include "gimpoperationposterize.h"
|
||||||
#include "gimpposterizeconfig.h"
|
|
||||||
|
#include "gimp-intl.h"
|
||||||
|
|
||||||
|
|
||||||
static gboolean gimp_operation_posterize_process (GeglOperation *operation,
|
enum
|
||||||
void *in_buf,
|
{
|
||||||
void *out_buf,
|
PROP_0,
|
||||||
glong samples,
|
PROP_LEVELS
|
||||||
const GeglRectangle *roi,
|
};
|
||||||
gint level);
|
|
||||||
|
|
||||||
|
static void gimp_operation_posterize_get_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec);
|
||||||
|
static void gimp_operation_posterize_set_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec);
|
||||||
|
|
||||||
|
static gboolean gimp_operation_posterize_process (GeglOperation *operation,
|
||||||
|
void *in_buf,
|
||||||
|
void *out_buf,
|
||||||
|
glong samples,
|
||||||
|
const GeglRectangle *roi,
|
||||||
|
gint level);
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpOperationPosterize, gimp_operation_posterize,
|
G_DEFINE_TYPE (GimpOperationPosterize, gimp_operation_posterize,
|
||||||
|
@ -53,25 +71,21 @@ gimp_operation_posterize_class_init (GimpOperationPosterizeClass *klass)
|
||||||
GeglOperationClass *operation_class = GEGL_OPERATION_CLASS (klass);
|
GeglOperationClass *operation_class = GEGL_OPERATION_CLASS (klass);
|
||||||
GeglOperationPointFilterClass *point_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
|
GeglOperationPointFilterClass *point_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass);
|
||||||
|
|
||||||
object_class->set_property = gimp_operation_point_filter_set_property;
|
object_class->set_property = gimp_operation_posterize_set_property;
|
||||||
object_class->get_property = gimp_operation_point_filter_get_property;
|
object_class->get_property = gimp_operation_posterize_get_property;
|
||||||
|
|
||||||
|
point_class->process = gimp_operation_posterize_process;
|
||||||
|
|
||||||
gegl_operation_class_set_keys (operation_class,
|
gegl_operation_class_set_keys (operation_class,
|
||||||
"name", "gimp:posterize",
|
"name", "gimp:posterize",
|
||||||
"categories", "color",
|
"categories", "color",
|
||||||
"description", "GIMP Posterize operation",
|
"description", _("Reduce to a limited set of colors"),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
point_class->process = gimp_operation_posterize_process;
|
GIMP_CONFIG_INSTALL_PROP_INT (object_class, PROP_LEVELS,
|
||||||
|
"levels",
|
||||||
g_object_class_install_property (object_class,
|
_("Posterize levels"),
|
||||||
GIMP_OPERATION_POINT_FILTER_PROP_CONFIG,
|
2, 256, 3, 0);
|
||||||
g_param_spec_object ("config",
|
|
||||||
"Config",
|
|
||||||
"The config object",
|
|
||||||
GIMP_TYPE_POSTERIZE_CONFIG,
|
|
||||||
G_PARAM_READWRITE |
|
|
||||||
G_PARAM_CONSTRUCT));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -79,6 +93,46 @@ gimp_operation_posterize_init (GimpOperationPosterize *self)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_operation_posterize_get_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
GimpOperationPosterize *posterize = GIMP_OPERATION_POSTERIZE (object);
|
||||||
|
|
||||||
|
switch (property_id)
|
||||||
|
{
|
||||||
|
case PROP_LEVELS:
|
||||||
|
g_value_set_int (value, posterize->levels);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_operation_posterize_set_property (GObject *object,
|
||||||
|
guint property_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
GimpOperationPosterize *posterize = GIMP_OPERATION_POSTERIZE (object);
|
||||||
|
|
||||||
|
switch (property_id)
|
||||||
|
{
|
||||||
|
case PROP_LEVELS:
|
||||||
|
posterize->levels = g_value_get_int (value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gimp_operation_posterize_process (GeglOperation *operation,
|
gimp_operation_posterize_process (GeglOperation *operation,
|
||||||
void *in_buf,
|
void *in_buf,
|
||||||
|
@ -87,16 +141,12 @@ gimp_operation_posterize_process (GeglOperation *operation,
|
||||||
const GeglRectangle *roi,
|
const GeglRectangle *roi,
|
||||||
gint level)
|
gint level)
|
||||||
{
|
{
|
||||||
GimpOperationPointFilter *point = GIMP_OPERATION_POINT_FILTER (operation);
|
GimpOperationPosterize *posterize = GIMP_OPERATION_POSTERIZE (operation);
|
||||||
GimpPosterizeConfig *config = GIMP_POSTERIZE_CONFIG (point->config);
|
gfloat *src = in_buf;
|
||||||
gfloat *src = in_buf;
|
gfloat *dest = out_buf;
|
||||||
gfloat *dest = out_buf;
|
gfloat levels;
|
||||||
gfloat levels;
|
|
||||||
|
|
||||||
if (! config)
|
levels = posterize->levels - 1.0;
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
levels = config->levels - 1.0;
|
|
||||||
|
|
||||||
while (samples--)
|
while (samples--)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,6 +39,8 @@ typedef struct _GimpOperationPosterizeClass GimpOperationPosterizeClass;
|
||||||
struct _GimpOperationPosterize
|
struct _GimpOperationPosterize
|
||||||
{
|
{
|
||||||
GimpOperationPointFilter parent_instance;
|
GimpOperationPointFilter parent_instance;
|
||||||
|
|
||||||
|
gint levels;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GimpOperationPosterizeClass
|
struct _GimpOperationPosterizeClass
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
||||||
*
|
|
||||||
* gimpposterizeconfig.c
|
|
||||||
* Copyright (C) 2007 Michael Natterer <mitch@gimp.org>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or
|
|
||||||
* (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
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
|
||||||
#include <gegl.h>
|
|
||||||
|
|
||||||
#include "libgimpconfig/gimpconfig.h"
|
|
||||||
|
|
||||||
#include "operations-types.h"
|
|
||||||
|
|
||||||
#include "gimpposterizeconfig.h"
|
|
||||||
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
PROP_0,
|
|
||||||
PROP_LEVELS
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static void gimp_posterize_config_get_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec);
|
|
||||||
static void gimp_posterize_config_set_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec);
|
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (GimpPosterizeConfig, gimp_posterize_config,
|
|
||||||
GIMP_TYPE_SETTINGS,
|
|
||||||
G_IMPLEMENT_INTERFACE (GIMP_TYPE_CONFIG, NULL))
|
|
||||||
|
|
||||||
#define parent_class gimp_posterize_config_parent_class
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_config_class_init (GimpPosterizeConfigClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
GimpViewableClass *viewable_class = GIMP_VIEWABLE_CLASS (klass);
|
|
||||||
|
|
||||||
object_class->set_property = gimp_posterize_config_set_property;
|
|
||||||
object_class->get_property = gimp_posterize_config_get_property;
|
|
||||||
|
|
||||||
viewable_class->default_icon_name = "gimp-tool-posterize";
|
|
||||||
|
|
||||||
GIMP_CONFIG_INSTALL_PROP_INT (object_class, PROP_LEVELS,
|
|
||||||
"levels",
|
|
||||||
"Posterize levels",
|
|
||||||
2, 256, 3, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_config_init (GimpPosterizeConfig *self)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_config_get_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
GimpPosterizeConfig *self = GIMP_POSTERIZE_CONFIG (object);
|
|
||||||
|
|
||||||
switch (property_id)
|
|
||||||
{
|
|
||||||
case PROP_LEVELS:
|
|
||||||
g_value_set_int (value, self->levels);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_config_set_property (GObject *object,
|
|
||||||
guint property_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
GimpPosterizeConfig *self = GIMP_POSTERIZE_CONFIG (object);
|
|
||||||
|
|
||||||
switch (property_id)
|
|
||||||
{
|
|
||||||
case PROP_LEVELS:
|
|
||||||
self->levels = g_value_get_int (value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
||||||
*
|
|
||||||
* gimpposterizeconfig.h
|
|
||||||
* Copyright (C) 2007 Michael Natterer <mitch@gimp.org>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or
|
|
||||||
* (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
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GIMP_POSTERIZE_CONFIG_H__
|
|
||||||
#define __GIMP_POSTERIZE_CONFIG_H__
|
|
||||||
|
|
||||||
|
|
||||||
#include "core/gimpsettings.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define GIMP_TYPE_POSTERIZE_CONFIG (gimp_posterize_config_get_type ())
|
|
||||||
#define GIMP_POSTERIZE_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_POSTERIZE_CONFIG, GimpPosterizeConfig))
|
|
||||||
#define GIMP_POSTERIZE_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_POSTERIZE_CONFIG, GimpPosterizeConfigClass))
|
|
||||||
#define GIMP_IS_POSTERIZE_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_POSTERIZE_CONFIG))
|
|
||||||
#define GIMP_IS_POSTERIZE_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_POSTERIZE_CONFIG))
|
|
||||||
#define GIMP_POSTERIZE_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_POSTERIZE_CONFIG, GimpPosterizeConfigClass))
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GimpPosterizeConfigClass GimpPosterizeConfigClass;
|
|
||||||
|
|
||||||
struct _GimpPosterizeConfig
|
|
||||||
{
|
|
||||||
GimpSettings parent_instance;
|
|
||||||
|
|
||||||
gint levels;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GimpPosterizeConfigClass
|
|
||||||
{
|
|
||||||
GimpSettingsClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
GType gimp_posterize_config_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_POSTERIZE_CONFIG_H__ */
|
|
|
@ -44,7 +44,6 @@
|
||||||
#include "operations/gimpdesaturateconfig.h"
|
#include "operations/gimpdesaturateconfig.h"
|
||||||
#include "operations/gimphuesaturationconfig.h"
|
#include "operations/gimphuesaturationconfig.h"
|
||||||
#include "operations/gimplevelsconfig.h"
|
#include "operations/gimplevelsconfig.h"
|
||||||
#include "operations/gimpposterizeconfig.h"
|
|
||||||
#include "operations/gimpthresholdconfig.h"
|
#include "operations/gimpthresholdconfig.h"
|
||||||
#include "plug-in/gimpplugin.h"
|
#include "plug-in/gimpplugin.h"
|
||||||
#include "plug-in/gimppluginmanager.h"
|
#include "plug-in/gimppluginmanager.h"
|
||||||
|
@ -238,15 +237,16 @@ posterize_invoker (GimpProcedure *procedure,
|
||||||
GIMP_PDB_ITEM_CONTENT, error) &&
|
GIMP_PDB_ITEM_CONTENT, error) &&
|
||||||
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
||||||
{
|
{
|
||||||
GObject *config = g_object_new (GIMP_TYPE_POSTERIZE_CONFIG,
|
GeglNode *node =
|
||||||
"levels", levels,
|
gegl_node_new_child (NULL,
|
||||||
NULL);
|
"operation", "gimp:posterize",
|
||||||
|
"levels", levels,
|
||||||
|
NULL);
|
||||||
|
|
||||||
gimp_drawable_apply_operation_by_name (drawable, progress,
|
gimp_drawable_apply_operation (drawable, progress,
|
||||||
_("Posterize"),
|
C_("undo-type", "Posterize"),
|
||||||
"gimp:posterize",
|
node);
|
||||||
config);
|
g_object_unref (node);
|
||||||
g_object_unref (config);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
#include "operations/gimpdesaturateconfig.h"
|
#include "operations/gimpdesaturateconfig.h"
|
||||||
#include "operations/gimphuesaturationconfig.h"
|
#include "operations/gimphuesaturationconfig.h"
|
||||||
#include "operations/gimplevelsconfig.h"
|
#include "operations/gimplevelsconfig.h"
|
||||||
#include "operations/gimpposterizeconfig.h"
|
|
||||||
#include "operations/gimpthresholdconfig.h"
|
#include "operations/gimpthresholdconfig.h"
|
||||||
#include "plug-in/gimpplugin.h"
|
#include "plug-in/gimpplugin.h"
|
||||||
#include "plug-in/gimppluginmanager.h"
|
#include "plug-in/gimppluginmanager.h"
|
||||||
|
@ -652,15 +651,16 @@ drawable_posterize_invoker (GimpProcedure *procedure,
|
||||||
GIMP_PDB_ITEM_CONTENT, error) &&
|
GIMP_PDB_ITEM_CONTENT, error) &&
|
||||||
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
||||||
{
|
{
|
||||||
GObject *config = g_object_new (GIMP_TYPE_POSTERIZE_CONFIG,
|
GeglNode *node =
|
||||||
"levels", levels,
|
gegl_node_new_child (NULL,
|
||||||
NULL);
|
"operation", "gimp:posterize",
|
||||||
|
"levels", levels,
|
||||||
|
NULL);
|
||||||
|
|
||||||
gimp_drawable_apply_operation_by_name (drawable, progress,
|
gimp_drawable_apply_operation (drawable, progress,
|
||||||
C_("undo-type", "Posterize"),
|
C_("undo-type", "Posterize"),
|
||||||
"gimp:posterize",
|
node);
|
||||||
config);
|
g_object_unref (node);
|
||||||
g_object_unref (config);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|
|
@ -156,8 +156,6 @@ libapptools_a_sources = \
|
||||||
gimpperspectiveclonetool.h \
|
gimpperspectiveclonetool.h \
|
||||||
gimpperspectivetool.c \
|
gimpperspectivetool.c \
|
||||||
gimpperspectivetool.h \
|
gimpperspectivetool.h \
|
||||||
gimpposterizetool.c \
|
|
||||||
gimpposterizetool.h \
|
|
||||||
gimprectangleselecttool.c \
|
gimprectangleselecttool.c \
|
||||||
gimprectangleselecttool.h \
|
gimprectangleselecttool.h \
|
||||||
gimprectangleselectoptions.c \
|
gimprectangleselectoptions.c \
|
||||||
|
|
|
@ -77,7 +77,6 @@
|
||||||
#include "gimppenciltool.h"
|
#include "gimppenciltool.h"
|
||||||
#include "gimpperspectiveclonetool.h"
|
#include "gimpperspectiveclonetool.h"
|
||||||
#include "gimpperspectivetool.h"
|
#include "gimpperspectivetool.h"
|
||||||
#include "gimpposterizetool.h"
|
|
||||||
#include "gimpthresholdtool.h"
|
#include "gimpthresholdtool.h"
|
||||||
#include "gimprectangleselecttool.h"
|
#include "gimprectangleselecttool.h"
|
||||||
#include "gimprotatetool.h"
|
#include "gimprotatetool.h"
|
||||||
|
@ -127,7 +126,6 @@ gimp_tools_init (Gimp *gimp)
|
||||||
/* color tools */
|
/* color tools */
|
||||||
gimp_operation_tool_register,
|
gimp_operation_tool_register,
|
||||||
gimp_gegl_tool_register,
|
gimp_gegl_tool_register,
|
||||||
gimp_posterize_tool_register,
|
|
||||||
gimp_curves_tool_register,
|
gimp_curves_tool_register,
|
||||||
gimp_levels_tool_register,
|
gimp_levels_tool_register,
|
||||||
gimp_threshold_tool_register,
|
gimp_threshold_tool_register,
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or
|
|
||||||
* (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
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <gegl.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
#include "libgimpwidgets/gimpwidgets.h"
|
|
||||||
|
|
||||||
#include "tools-types.h"
|
|
||||||
|
|
||||||
#include "operations/gimpposterizeconfig.h"
|
|
||||||
|
|
||||||
#include "widgets/gimphelp-ids.h"
|
|
||||||
#include "widgets/gimppropwidgets.h"
|
|
||||||
#include "widgets/gimpspinscale.h"
|
|
||||||
|
|
||||||
#include "gimpimagemapoptions.h"
|
|
||||||
#include "gimpposterizetool.h"
|
|
||||||
|
|
||||||
#include "gimp-intl.h"
|
|
||||||
|
|
||||||
|
|
||||||
static GeglNode * gimp_posterize_tool_get_operation (GimpImageMapTool *im_tool,
|
|
||||||
GObject **config,
|
|
||||||
gchar **undo_desc);
|
|
||||||
static void gimp_posterize_tool_dialog (GimpImageMapTool *im_tool);
|
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpPosterizeTool, gimp_posterize_tool,
|
|
||||||
GIMP_TYPE_IMAGE_MAP_TOOL)
|
|
||||||
|
|
||||||
#define parent_class gimp_posterize_tool_parent_class
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
gimp_posterize_tool_register (GimpToolRegisterCallback callback,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
(* callback) (GIMP_TYPE_POSTERIZE_TOOL,
|
|
||||||
GIMP_TYPE_IMAGE_MAP_OPTIONS, NULL,
|
|
||||||
0,
|
|
||||||
"gimp-posterize-tool",
|
|
||||||
_("Posterize"),
|
|
||||||
_("Posterize Tool: Reduce to a limited set of colors"),
|
|
||||||
N_("_Posterize..."), NULL,
|
|
||||||
NULL, GIMP_HELP_TOOL_POSTERIZE,
|
|
||||||
GIMP_STOCK_TOOL_POSTERIZE,
|
|
||||||
data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_tool_class_init (GimpPosterizeToolClass *klass)
|
|
||||||
{
|
|
||||||
GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
|
|
||||||
|
|
||||||
im_tool_class->dialog_desc = _("Posterize (Reduce Number of Colors)");
|
|
||||||
|
|
||||||
im_tool_class->get_operation = gimp_posterize_tool_get_operation;
|
|
||||||
im_tool_class->dialog = gimp_posterize_tool_dialog;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_tool_init (GimpPosterizeTool *posterize_tool)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static GeglNode *
|
|
||||||
gimp_posterize_tool_get_operation (GimpImageMapTool *image_map_tool,
|
|
||||||
GObject **config,
|
|
||||||
gchar **undo_desc)
|
|
||||||
{
|
|
||||||
*config = g_object_new (GIMP_TYPE_POSTERIZE_CONFIG, NULL);
|
|
||||||
|
|
||||||
return gegl_node_new_child (NULL,
|
|
||||||
"operation", "gimp:posterize",
|
|
||||||
"config", *config,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**********************/
|
|
||||||
/* Posterize dialog */
|
|
||||||
/**********************/
|
|
||||||
|
|
||||||
static void
|
|
||||||
gimp_posterize_tool_dialog (GimpImageMapTool *image_map_tool)
|
|
||||||
{
|
|
||||||
GtkWidget *main_vbox;
|
|
||||||
GtkWidget *scale;
|
|
||||||
|
|
||||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (image_map_tool);
|
|
||||||
|
|
||||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "levels",
|
|
||||||
_("Posterize _levels"),
|
|
||||||
1.0, 10.0, 0);
|
|
||||||
gimp_spin_scale_set_gamma (GIMP_SPIN_SCALE (scale), 1.5);
|
|
||||||
gtk_box_pack_start (GTK_BOX (main_vbox), scale, FALSE, FALSE, 0);
|
|
||||||
gtk_widget_show (scale);
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 3 of the License, or
|
|
||||||
* (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
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __GIMP_POSTERIZE_TOOL_H__
|
|
||||||
#define __GIMP_POSTERIZE_TOOL_H__
|
|
||||||
|
|
||||||
|
|
||||||
#include "gimpimagemaptool.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define GIMP_TYPE_POSTERIZE_TOOL (gimp_posterize_tool_get_type ())
|
|
||||||
#define GIMP_POSTERIZE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_POSTERIZE_TOOL, GimpPosterizeTool))
|
|
||||||
#define GIMP_POSTERIZE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_POSTERIZE_TOOL, GimpPosterizeToolClass))
|
|
||||||
#define GIMP_IS_POSTERIZE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_POSTERIZE_TOOL))
|
|
||||||
#define GIMP_IS_POSTERIZE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_POSTERIZE_TOOL))
|
|
||||||
#define GIMP_POSTERIZE_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_POSTERIZE_TOOL, GimpPosterizeToolClass))
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GimpPosterizeTool GimpPosterizeTool;
|
|
||||||
typedef struct _GimpPosterizeToolClass GimpPosterizeToolClass;
|
|
||||||
|
|
||||||
struct _GimpPosterizeTool
|
|
||||||
{
|
|
||||||
GimpImageMapTool parent_instance;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _GimpPosterizeToolClass
|
|
||||||
{
|
|
||||||
GimpImageMapToolClass parent_class;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void gimp_posterize_tool_register (GimpToolRegisterCallback callback,
|
|
||||||
gpointer data);
|
|
||||||
|
|
||||||
GType gimp_posterize_tool_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_POSTERIZE_TOOL_H__ */
|
|
|
@ -532,7 +532,7 @@
|
||||||
<menuitem action="tools-threshold" />
|
<menuitem action="tools-threshold" />
|
||||||
<menuitem action="tools-levels" />
|
<menuitem action="tools-levels" />
|
||||||
<menuitem action="tools-curves" />
|
<menuitem action="tools-curves" />
|
||||||
<menuitem action="tools-posterize" />
|
<menuitem action="filters-posterize" />
|
||||||
<menuitem action="tools-desaturate" />
|
<menuitem action="tools-desaturate" />
|
||||||
<separator />
|
<separator />
|
||||||
<placeholder name="Invert">
|
<placeholder name="Invert">
|
||||||
|
|
|
@ -254,6 +254,7 @@ app/operations/gimphuesaturationconfig.c
|
||||||
app/operations/gimplevelsconfig.c
|
app/operations/gimplevelsconfig.c
|
||||||
app/operations/gimpoperationcagecoefcalc.c
|
app/operations/gimpoperationcagecoefcalc.c
|
||||||
app/operations/gimpoperationcagetransform.c
|
app/operations/gimpoperationcagetransform.c
|
||||||
|
app/operations/gimpoperationposterize.c
|
||||||
app/operations/gimpoperationsemiflatten.c
|
app/operations/gimpoperationsemiflatten.c
|
||||||
app/operations/gimpoperationthresholdalpha.c
|
app/operations/gimpoperationthresholdalpha.c
|
||||||
app/operations/gimpthresholdconfig.c
|
app/operations/gimpthresholdconfig.c
|
||||||
|
@ -405,7 +406,6 @@ app/tools/gimppainttool.c
|
||||||
app/tools/gimppenciltool.c
|
app/tools/gimppenciltool.c
|
||||||
app/tools/gimpperspectiveclonetool.c
|
app/tools/gimpperspectiveclonetool.c
|
||||||
app/tools/gimpperspectivetool.c
|
app/tools/gimpperspectivetool.c
|
||||||
app/tools/gimpposterizetool.c
|
|
||||||
app/tools/gimprectangleoptions.c
|
app/tools/gimprectangleoptions.c
|
||||||
app/tools/gimprectangleselectoptions.c
|
app/tools/gimprectangleselectoptions.c
|
||||||
app/tools/gimprectangleselecttool.c
|
app/tools/gimprectangleselecttool.c
|
||||||
|
|
|
@ -171,22 +171,22 @@ sub posterize {
|
||||||
);
|
);
|
||||||
|
|
||||||
%invoke = (
|
%invoke = (
|
||||||
headers => [ qw("operations/gimpposterizeconfig.h") ],
|
|
||||||
code => <<'CODE'
|
code => <<'CODE'
|
||||||
{
|
{
|
||||||
if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
|
||||||
GIMP_PDB_ITEM_CONTENT, error) &&
|
GIMP_PDB_ITEM_CONTENT, error) &&
|
||||||
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
||||||
{
|
{
|
||||||
GObject *config = g_object_new (GIMP_TYPE_POSTERIZE_CONFIG,
|
GeglNode *node =
|
||||||
"levels", levels,
|
gegl_node_new_child (NULL,
|
||||||
NULL);
|
"operation", "gimp:posterize",
|
||||||
|
"levels", levels,
|
||||||
|
NULL);
|
||||||
|
|
||||||
gimp_drawable_apply_operation_by_name (drawable, progress,
|
gimp_drawable_apply_operation (drawable, progress,
|
||||||
_("Posterize"),
|
C_("undo-type", "Posterize"),
|
||||||
"gimp:posterize",
|
node);
|
||||||
config);
|
g_object_unref (node);
|
||||||
g_object_unref (config);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|
|
@ -710,22 +710,22 @@ HELP
|
||||||
);
|
);
|
||||||
|
|
||||||
%invoke = (
|
%invoke = (
|
||||||
headers => [ qw("operations/gimpposterizeconfig.h") ],
|
|
||||||
code => <<'CODE'
|
code => <<'CODE'
|
||||||
{
|
{
|
||||||
if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
|
if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL,
|
||||||
GIMP_PDB_ITEM_CONTENT, error) &&
|
GIMP_PDB_ITEM_CONTENT, error) &&
|
||||||
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
|
||||||
{
|
{
|
||||||
GObject *config = g_object_new (GIMP_TYPE_POSTERIZE_CONFIG,
|
GeglNode *node =
|
||||||
"levels", levels,
|
gegl_node_new_child (NULL,
|
||||||
NULL);
|
"operation", "gimp:posterize",
|
||||||
|
"levels", levels,
|
||||||
|
NULL);
|
||||||
|
|
||||||
gimp_drawable_apply_operation_by_name (drawable, progress,
|
gimp_drawable_apply_operation (drawable, progress,
|
||||||
C_("undo-type", "Posterize"),
|
C_("undo-type", "Posterize"),
|
||||||
"gimp:posterize",
|
node);
|
||||||
config);
|
g_object_unref (node);
|
||||||
g_object_unref (config);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
success = FALSE;
|
success = FALSE;
|
||||||
|
|
Loading…
Reference in New Issue