[gimp/soc-2013-n-point-deformation-tool: 2/25] NPD tool uses GEGL NPD operation
- From: Marek Dvoroznak <dvoromar src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/soc-2013-n-point-deformation-tool: 2/25] NPD tool uses GEGL NPD operation
- Date: Fri, 6 Dec 2013 05:06:45 +0000 (UTC)
commit d4050d321650952f87af6b01612bef3fe58ce4a6
Author: Marek Dvoroznak <dvoromar gmail com>
Date: Wed Jul 31 21:15:43 2013 +0200
NPD tool uses GEGL NPD operation
app/tools/gimpnpointdeformationtool.c | 226 ++++++++++++++++----------------
app/tools/gimpnpointdeformationtool.h | 41 +++---
2 files changed, 134 insertions(+), 133 deletions(-)
---
diff --git a/app/tools/gimpnpointdeformationtool.c b/app/tools/gimpnpointdeformationtool.c
index 60c30ab..ebbd44c 100644
--- a/app/tools/gimpnpointdeformationtool.c
+++ b/app/tools/gimpnpointdeformationtool.c
@@ -49,7 +49,7 @@
#include "gimp-intl.h"
-//#include <npd/npd_common.h>
+#include <npd/npd_common.h>
void gimp_n_point_deformation_tool_start (GimpNPointDeformationTool *npd_tool,
GimpDisplay *display);
@@ -83,8 +83,8 @@ static void gimp_n_point_deformation_tool_cursor_update (GimpTool
GimpDisplay *display);
static void gimp_n_point_deformation_tool_draw (GimpDrawTool *draw_tool);
-//static void gimp_n_point_deformation_add_handle (GimpNPointDeformationTool *npd_tool,
-// NPDPoint *coords);
+static void gimp_n_point_deformation_add_handle (GimpNPointDeformationTool *npd_tool,
+ NPDPoint *coords);
static void gimp_n_point_deformation_tool_control (GimpTool *tool,
GimpToolAction action,
GimpDisplay *display);
@@ -160,8 +160,8 @@ gimp_n_point_deformation_tool_init (GimpNPointDeformationTool *npd_tool)
GIMP_DIRTY_ACTIVE_DRAWABLE);
npd_tool->active = FALSE;
-// npd_tool->selected_cp = NULL;
-// npd_tool->hovering_cp = NULL;
+ npd_tool->selected_cp = NULL;
+ npd_tool->hovering_cp = NULL;
npd_tool->selected_cps = NULL;
npd_tool->previous_cp_positions = NULL;
}
@@ -202,7 +202,7 @@ gimp_n_point_deformation_tool_start (GimpNPointDeformationTool *npd_tool,
GimpDrawable *drawable;
GeglBuffer *buf;
GeglBuffer *shadow;
-// NPDModel *model;
+ NPDModel *model;
g_return_if_fail (GIMP_IS_N_POINT_DEFORMATION_TOOL (npd_tool));
@@ -234,17 +234,17 @@ gimp_n_point_deformation_tool_start (GimpNPointDeformationTool *npd_tool,
gegl_node_process (sink);
-// gegl_node_get (node, "model", &model, NULL);
- gegl_node_set (node, "rigidity", 2000, NULL);
+ gegl_node_get (node, "model", &model, NULL);
npd_tool->buf = buf;
npd_tool->drawable = drawable;
npd_tool->graph = graph;
-// npd_tool->model = model;
+ npd_tool->model = model;
npd_tool->node = node;
npd_tool->shadow = shadow;
npd_tool->sink = sink;
-// npd_tool->selected_cp = NULL;
+ npd_tool->selected_cp = NULL;
+
}
void
@@ -315,48 +315,48 @@ gimp_n_point_deformation_tool_button_press (GimpTool *tool,
GimpDisplay *display)
{
GimpNPointDeformationTool *npd_tool = GIMP_N_POINT_DEFORMATION_TOOL (tool);
-// NPDModel *model;
-// NPDPoint p;
-// NPDControlPoint *cp;
-// GSList **selected_cps = &npd_tool->selected_cps;
-// GSList **previous_cp_positions = &npd_tool->previous_cp_positions;
+ NPDModel *model;
+ NPDPoint p;
+ NPDControlPoint *cp;
+ GSList **selected_cps = &npd_tool->selected_cps;
+ GSList **previous_cp_positions = &npd_tool->previous_cp_positions;
if (display != tool->display)
{
gimp_n_point_deformation_tool_start (npd_tool, display);
}
-// model = npd_tool->model;
+ model = npd_tool->model;
gimp_tool_control_activate (tool->control);
-// npd_tool->selected_cp = NULL;
+ npd_tool->selected_cp = NULL;
if (press_type == GIMP_BUTTON_PRESS_NORMAL)
{
-// p.x = coords->x; p.y = coords->y;
-// cp = npd_get_control_point_at (model, &p);
+ p.x = coords->x; p.y = coords->y;
+ cp = npd_get_control_point_at (model, &p);
+
+ if (cp == NULL || (cp != NULL && !g_slist_find (*selected_cps, cp) && !(state & GDK_SHIFT_MASK)))
+ {
+ g_slist_free (*selected_cps);
+ *selected_cps = NULL;
+ g_slist_free_full (*previous_cp_positions, g_free);
+ *previous_cp_positions = NULL;
+ }
+
-// if (cp == NULL || (cp != NULL && !g_slist_find (*selected_cps, cp) && !(state & GDK_SHIFT_MASK)))
-// {
-// g_slist_free (*selected_cps);
-// *selected_cps = NULL;
-// g_slist_free_full (*previous_cp_positions, g_free);
-// *previous_cp_positions = NULL;
-// }
-//
-//
-// if (cp != NULL)
-// {
-// NPDPoint *cp_point_copy = g_new (NPDPoint, 1);
-// *cp_point_copy = cp->point;
+ if (cp != NULL)
+ {
+ NPDPoint *cp_point_copy = g_new (NPDPoint, 1);
+ *cp_point_copy = cp->point;
-// npd_tool->selected_cp = cp;
-// npd_tool->delta_x = cp->point.x - coords->x;
-// npd_tool->delta_y = cp->point.y - coords->y;
-// *selected_cps = g_slist_append (*selected_cps, cp);
-// *previous_cp_positions = g_slist_append (*previous_cp_positions, cp_point_copy);
-// }
+ npd_tool->selected_cp = cp;
+ npd_tool->delta_x = cp->point.x - coords->x;
+ npd_tool->delta_y = cp->point.y - coords->y;
+ *selected_cps = g_slist_append (*selected_cps, cp);
+ *previous_cp_positions = g_slist_append (*previous_cp_positions, cp_point_copy);
+ }
npd_tool->movement_start_x = coords->x;
@@ -373,9 +373,9 @@ gimp_n_point_deformation_tool_button_release (GimpTool *tool,
GimpDisplay *display)
{
GimpNPointDeformationTool *npd_tool = GIMP_N_POINT_DEFORMATION_TOOL (tool);
-// NPDModel *model = npd_tool->model;
-// NPDPoint p;
-// NPDControlPoint *cp;
+ NPDModel *model = npd_tool->model;
+ NPDPoint p;
+ NPDControlPoint *cp;
GeglBuffer *buffer;
gimp_tool_control_halt (tool->control);
@@ -384,12 +384,12 @@ gimp_n_point_deformation_tool_button_release (GimpTool *tool,
if (release_type == GIMP_BUTTON_RELEASE_CLICK)
{
-// p.x = coords->x; p.y = coords->y;
-// cp = npd_get_control_point_at (model, &p);
-// if (cp != NULL)
-// {
-// gimp_n_point_deformation_add_handle (npd_tool, &p);
-// }
+ p.x = coords->x; p.y = coords->y;
+ cp = npd_get_control_point_at (model, &p);
+ if (cp == NULL)
+ {
+ gimp_n_point_deformation_add_handle (npd_tool, &p);
+ }
}
else
if (release_type == GIMP_BUTTON_RELEASE_NORMAL)
@@ -404,7 +404,7 @@ gimp_n_point_deformation_tool_button_release (GimpTool *tool,
gegl_node_invalidated (npd_tool->node, NULL, FALSE);
- gegl_node_process (npd_tool->sink);
+ gegl_node_process (npd_tool->sink);
gegl_buffer_copy (npd_tool->shadow, NULL,
npd_tool->buf, NULL);
gimp_drawable_update (npd_tool->drawable,
@@ -413,7 +413,7 @@ gimp_n_point_deformation_tool_button_release (GimpTool *tool,
gegl_buffer_get_width (buffer),
gegl_buffer_get_height (buffer));
gimp_image_flush (gimp_display_get_image (display));
- gimp_draw_tool_resume (GIMP_DRAW_TOOL (npd_tool));
+ gimp_draw_tool_resume (GIMP_DRAW_TOOL (npd_tool));
}
static void
@@ -428,10 +428,10 @@ gimp_n_point_deformation_tool_oper_update (GimpTool *tool,
if (npd_tool->active)
{
-// NPDModel *model = npd_tool->model;
-// NPDPoint p;
-// p.x = coords->x; p.y = coords->y;
-// npd_tool->hovering_cp = npd_get_control_point_at (model, &p);
+ NPDModel *model = npd_tool->model;
+ NPDPoint p;
+ p.x = coords->x; p.y = coords->y;
+ npd_tool->hovering_cp = npd_get_control_point_at (model, &p);
}
gimp_draw_tool_pause (draw_tool);
@@ -442,53 +442,53 @@ gimp_n_point_deformation_tool_oper_update (GimpTool *tool,
gimp_draw_tool_resume (draw_tool);
}
-//static void
-//gimp_n_point_deformation_add_handle (GimpNPointDeformationTool *npd_tool,
-// NPDPoint *coords)
-//{
-// NPDModel *model = npd_tool->model;
-// npd_add_control_point (model, coords);
-//}
+static void
+gimp_n_point_deformation_add_handle (GimpNPointDeformationTool *npd_tool,
+ NPDPoint *coords)
+{
+ NPDModel *model = npd_tool->model;
+ npd_add_control_point (model, coords);
+}
static void
gimp_n_point_deformation_tool_draw (GimpDrawTool *draw_tool)
{
-// GimpNPointDeformationTool *npd_tool = GIMP_N_POINT_DEFORMATION_TOOL (draw_tool);
-// NPDModel *model = npd_tool->model;
-// gint i;
-// NPDControlPoint *cp;
-// GimpHandleType handle_type;
+ GimpNPointDeformationTool *npd_tool = GIMP_N_POINT_DEFORMATION_TOOL (draw_tool);
+ NPDModel *model = npd_tool->model;
+ gint i;
+ NPDControlPoint *cp;
+ GimpHandleType handle_type;
-// g_return_if_fail (model != NULL);
+ g_return_if_fail (model != NULL);
-// for (i = 0; i < model->control_points->len; i++)
-// {
-// cp = &g_array_index (model->control_points, NPDControlPoint, i);
-//
-// if (cp == npd_tool->hovering_cp)
-// handle_type = GIMP_HANDLE_FILLED_CIRCLE;
-// else
-// handle_type = GIMP_HANDLE_CIRCLE;
-//
-// gimp_draw_tool_add_handle (draw_tool,
-// handle_type,
-// cp->point.x,
-// cp->point.y,
-// GIMP_TOOL_HANDLE_SIZE_CIRCLE,
-// GIMP_TOOL_HANDLE_SIZE_CIRCLE,
-// GIMP_HANDLE_ANCHOR_CENTER);
-//
-// if (g_slist_find (npd_tool->selected_cps, cp) != NULL)
-// {
-// gimp_draw_tool_add_handle (draw_tool,
-// GIMP_HANDLE_SQUARE,
-// cp->point.x,
-// cp->point.y,
-// GIMP_TOOL_HANDLE_SIZE_CIRCLE,
-// GIMP_TOOL_HANDLE_SIZE_CIRCLE,
-// GIMP_HANDLE_ANCHOR_CENTER);
-// }
-// }
+ for (i = 0; i < model->control_points->len; i++)
+ {
+ cp = &g_array_index (model->control_points, NPDControlPoint, i);
+
+ if (cp == npd_tool->hovering_cp)
+ handle_type = GIMP_HANDLE_FILLED_CIRCLE;
+ else
+ handle_type = GIMP_HANDLE_CIRCLE;
+
+ gimp_draw_tool_add_handle (draw_tool,
+ handle_type,
+ cp->point.x,
+ cp->point.y,
+ GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+ GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+ GIMP_HANDLE_ANCHOR_CENTER);
+
+ if (g_slist_find (npd_tool->selected_cps, cp) != NULL)
+ {
+ gimp_draw_tool_add_handle (draw_tool,
+ GIMP_HANDLE_SQUARE,
+ cp->point.x,
+ cp->point.y,
+ GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+ GIMP_TOOL_HANDLE_SIZE_CIRCLE,
+ GIMP_HANDLE_ANCHOR_CENTER);
+ }
+ }
}
@@ -500,28 +500,28 @@ gimp_n_point_deformation_tool_motion (GimpTool *tool,
GimpDisplay *display)
{
GimpNPointDeformationTool *npd_tool = GIMP_N_POINT_DEFORMATION_TOOL (tool);
-// NPDControlPoint *selected_cp = npd_tool->selected_cp;
-// GSList *selected_cps = npd_tool->selected_cps;
-// GSList *previous_cp_positions = npd_tool->previous_cp_positions;
-// gdouble movement_x = coords->x - npd_tool->movement_start_x;
-// gdouble movement_y = coords->y - npd_tool->movement_start_y;
+ NPDControlPoint *selected_cp = npd_tool->selected_cp;
+ GSList *selected_cps = npd_tool->selected_cps;
+ GSList *previous_cp_positions = npd_tool->previous_cp_positions;
+ gdouble movement_x = coords->x - npd_tool->movement_start_x;
+ gdouble movement_y = coords->y - npd_tool->movement_start_y;
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
-// if (selected_cp != NULL)
-// {
-// while (selected_cps != NULL)
-// {
-// NPDControlPoint *cp = selected_cps->data;
-// NPDPoint *p = &cp->point;
-// NPDPoint *prev = previous_cp_positions->data;
-// p->x = prev->x + movement_x;
-// p->y = prev->y + movement_y;
-//
-// selected_cps = g_slist_next (selected_cps);
-// previous_cp_positions = g_slist_next (previous_cp_positions);
-// }
-// }
+ if (selected_cp != NULL)
+ {
+ while (selected_cps != NULL)
+ {
+ NPDControlPoint *cp = selected_cps->data;
+ NPDPoint *p = &cp->point;
+ NPDPoint *prev = previous_cp_positions->data;
+ p->x = prev->x + movement_x;
+ p->y = prev->y + movement_y;
+
+ selected_cps = g_slist_next (selected_cps);
+ previous_cp_positions = g_slist_next (previous_cp_positions);
+ }
+ }
npd_tool->cursor_x = coords->x;
npd_tool->cursor_y = coords->y;
diff --git a/app/tools/gimpnpointdeformationtool.h b/app/tools/gimpnpointdeformationtool.h
index d01c239..8efe47c 100644
--- a/app/tools/gimpnpointdeformationtool.h
+++ b/app/tools/gimpnpointdeformationtool.h
@@ -22,7 +22,7 @@
#include "gimpdrawtool.h"
-//#include <npd/npd_common.h>
+#include <npd/npd_common.h>
#define GIMP_TYPE_N_POINT_DEFORMATION_TOOL (gimp_n_point_deformation_tool_get_type ())
@@ -40,32 +40,33 @@ typedef struct _GimpNPointDeformationToolClass GimpNPointDeformationToolClass;
struct _GimpNPointDeformationTool
{
- GimpDrawTool parent_instance;
+ GimpDrawTool parent_instance;
- GeglNode *graph;
- GeglNode *node;
- GeglNode *sink;
+ GeglNode *graph;
+ GeglNode *node;
+ GeglNode *sink;
- GeglBuffer *shadow, *buf;
+ GeglBuffer *shadow, *buf;
- GimpDrawable *drawable;
+ GimpDrawable *drawable;
-// NPDModel *model;
-// NPDControlPoint *selected_cp; /* last selected control point */
- GSList *selected_cps; /* list of selected control points */
-// NPDControlPoint *hovering_cp;
- GSList *previous_cp_positions; /* list of NPDPoints holding previous control points positions */
-
- gdouble movement_start_x;
- gdouble movement_start_y;
+ NPDModel *model;
+ NPDControlPoint *selected_cp; /* last selected control point */
+ GSList *selected_cps; /* list of selected control points */
+ NPDControlPoint *hovering_cp;
+
+ gdouble cursor_x;
+ gdouble cursor_y;
+
+ gdouble delta_x;
+ gdouble delta_y;
- gdouble cursor_x;
- gdouble cursor_y;
+ gdouble movement_start_x;
+ gdouble movement_start_y;
-// gdouble delta_x;
-// gdouble delta_y;
+ GSList *previous_cp_positions; /* list of NPDPoints holding previous control points positions */
- gboolean active;
+ gboolean active;
};
struct _GimpNPointDeformationToolClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]