[Bf-blender-cvs] [1cd780f] soc-2013-paint: Refactor:
Antony Riakiotakis
noreply at git.blender.org
Sun Apr 20 17:45:48 CEST 2014
Commit: 1cd780f836c5a097aada367ceec930ccc795ebae
Author: Antony Riakiotakis
Date: Sun Apr 20 18:40:40 2014 +0300
https://developer.blender.org/rB1cd780f836c5a097aada367ceec930ccc795ebae
Refactor:
* Change naming slightly to add_index to better reflect what the
variable does.
* Simplify undo for paint curves. Only need to call one function prior
to editing.
* Add undo size count for paint curves.
===================================================================
M source/blender/editors/sculpt_paint/paint_curve.c
M source/blender/makesdna/DNA_brush_types.h
===================================================================
diff --git a/source/blender/editors/sculpt_paint/paint_curve.c b/source/blender/editors/sculpt_paint/paint_curve.c
index ddad1c8..b1568f6 100644
--- a/source/blender/editors/sculpt_paint/paint_curve.c
+++ b/source/blender/editors/sculpt_paint/paint_curve.c
@@ -88,7 +88,7 @@ static void paintcurve_undo_restore(bContext *C, ListBase *lb)
if (strncmp(uc->idname, pc->id.name, BLI_strnlen(uc->idname, sizeof(uc->idname))) == 0) {
SWAP(PaintCurvePoint *, pc->points, uc->points);
SWAP(int, pc->tot_points, uc->tot_points);
- SWAP(int, pc->active_point, uc->active_point);
+ SWAP(int, pc->add_index, uc->active_point);
}
}
@@ -107,59 +107,44 @@ static void paintcurve_undo_begin(bContext *C, wmOperator *op, PaintCurve *pc)
{
PaintMode mode = BKE_paintmode_get_active_from_context(C);
ListBase *lb = NULL;
+ int undo_stack_id;
+ UndoCurve *uc;
switch (mode) {
case PAINT_TEXTURE_2D:
case PAINT_TEXTURE_PROJECTIVE:
- ED_undo_paint_push_begin(UNDO_PAINT_IMAGE, op->type->name,
- paintcurve_undo_restore, paintcurve_undo_delete);
- lb = undo_paint_push_get_list(UNDO_PAINT_IMAGE);
+ undo_stack_id = UNDO_PAINT_IMAGE;
break;
case PAINT_SCULPT:
- ED_undo_paint_push_begin(UNDO_PAINT_MESH, op->type->name,
- paintcurve_undo_restore, paintcurve_undo_delete);
- lb = undo_paint_push_get_list(UNDO_PAINT_MESH);
+ undo_stack_id = UNDO_PAINT_MESH;
break;
default:
/* do nothing, undo is handled by global */
- break;
+ return;
}
- if (lb != NULL) {
- UndoCurve *uc = MEM_callocN(sizeof(UndoCurve), "Undo_curve");
+ ED_undo_paint_push_begin(undo_stack_id, op->type->name,
+ paintcurve_undo_restore, paintcurve_undo_delete);
+ lb = undo_paint_push_get_list(undo_stack_id);
- lb->first = uc;
+ uc = MEM_callocN(sizeof(*uc), "Undo_curve");
- BLI_strncpy(uc->idname, pc->id.name, sizeof(uc->idname));
- uc->tot_points = pc->tot_points;
- uc->active_point = pc->active_point;
- uc->points = MEM_dupallocN(pc->points);
- }
-}
+ lb->first = uc;
-static void paintcurve_undo_end(bContext *C)
-{
- PaintMode mode = BKE_paintmode_get_active_from_context(C);
+ BLI_strncpy(uc->idname, pc->id.name, sizeof(uc->idname));
+ uc->tot_points = pc->tot_points;
+ uc->active_point = pc->add_index;
+ uc->points = MEM_dupallocN(pc->points);
- switch (mode) {
- case PAINT_TEXTURE_2D:
- case PAINT_TEXTURE_PROJECTIVE:
- ED_undo_paint_push_end(UNDO_PAINT_IMAGE);
- break;
+ undo_paint_push_count_alloc(undo_stack_id, sizeof(*uc) + sizeof(*pc->points) * pc->tot_points);
- case PAINT_SCULPT:
- ED_undo_paint_push_end(UNDO_PAINT_MESH);
- break;
-
- default:
- /* do nothing, undo is handled by global */
- break;
- }
+ ED_undo_paint_push_end(undo_stack_id);
}
+
/******************* Operators *********************************/
static int paintcurve_new_exec(bContext *C, wmOperator *UNUSED(op))
@@ -210,7 +195,7 @@ static void paintcurve_point_add(bContext *C, wmOperator *op, const int loc[2])
paintcurve_undo_begin(C, op, pc);
pcp = MEM_mallocN((pc->tot_points + 1) * sizeof(PaintCurvePoint), "PaintCurvePoint");
- add_index = pc->active_point;
+ add_index = pc->add_index;
if (pc->points) {
if (add_index > 0)
@@ -236,9 +221,7 @@ static void paintcurve_point_add(bContext *C, wmOperator *op, const int loc[2])
pcp[add_index].bez.f3 = SELECT;
pcp[add_index].bez.h2 = HD_ALIGN;
- pc->active_point = add_index + 1;
-
- paintcurve_undo_end(C);
+ pc->add_index = add_index + 1;
WM_paint_cursor_tag_redraw(window, ar);
}
@@ -320,14 +303,14 @@ static int paintcurve_delete_point_exec(bContext *C, wmOperator *op)
if (!(pcp->bez.f2 & DELETE_TAG)) {
points_new[j] = pc->points[i];
- if ((i + 1) == pc->active_point) {
- pc->active_point = j + 1;
+ if ((i + 1) == pc->add_index) {
+ pc->add_index = j + 1;
}
j++;
}
- else if ((i + 1) == pc->active_point) {
+ else if ((i + 1) == pc->add_index) {
/* prefer previous point */
- pc->active_point = j;
+ pc->add_index = j;
}
}
MEM_freeN(pc->points);
@@ -338,8 +321,6 @@ static int paintcurve_delete_point_exec(bContext *C, wmOperator *op)
#undef DELETE_TAG
- paintcurve_undo_end(C);
-
WM_paint_cursor_tag_redraw(window, ar);
return OPERATOR_FINISHED;
@@ -411,7 +392,7 @@ static void paintcurve_point_select(bContext *C, wmOperator *op, const int loc[2
(fabs(loc[1] - pcp->bez.vec[1][1]) < PAINT_CURVE_SELECT_THRESHOLD))
{
pcp->bez.f2 ^= SELECT;
- pc->active_point = i + 1;
+ pc->add_index = i + 1;
break;
}
}
@@ -420,7 +401,7 @@ static void paintcurve_point_select(bContext *C, wmOperator *op, const int loc[2
(fabs(loc[1] - pcp->bez.vec[0][1]) < PAINT_CURVE_SELECT_THRESHOLD))
{
pcp->bez.f1 ^= SELECT;
- pc->active_point = i + 1;
+ pc->add_index = i + 1;
if (handle)
pcp->bez.h1 = HD_ALIGN;
break;
@@ -430,7 +411,7 @@ static void paintcurve_point_select(bContext *C, wmOperator *op, const int loc[2
(fabs(loc[1] - pcp->bez.vec[2][1]) < PAINT_CURVE_SELECT_THRESHOLD))
{
pcp->bez.f3 ^= SELECT;
- pc->active_point = i + 1;
+ pc->add_index = i + 1;
if (handle)
pcp->bez.h2 = HD_ALIGN;
break;
@@ -438,8 +419,6 @@ static void paintcurve_point_select(bContext *C, wmOperator *op, const int loc[2
}
}
- paintcurve_undo_end(C);
-
WM_paint_cursor_tag_redraw(window, ar);
}
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 0cd2254..da0b3cd 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -167,7 +167,7 @@ typedef struct PaintCurve
ID id;
PaintCurvePoint *points; /* points of curve */
int tot_points;
- int active_point;
+ int add_index; /* index where next point will be added */
} PaintCurve;
/* Brush.gradient_source */
More information about the Bf-blender-cvs
mailing list