[Bf-blender-cvs] [47afaf3] soc-2013-paint: Merge branch 'master' into soc-2013-paint

Campbell Barton noreply at git.blender.org
Mon Jun 23 14:22:35 CEST 2014


Commit: 47afaf3ef3e84ba74ec5e16af470c634e76efb3d
Author: Campbell Barton
Date:   Mon Jun 23 22:20:12 2014 +1000
https://developer.blender.org/rB47afaf3ef3e84ba74ec5e16af470c634e76efb3d

Merge branch 'master' into soc-2013-paint

Conflicts:
	source/blender/editors/include/ED_sculpt.h

===================================================================



===================================================================

diff --cc source/blender/editors/include/ED_paint.h
index b3449be,d7e84d8..decd79f
--- a/source/blender/editors/include/ED_paint.h
+++ b/source/blender/editors/include/ED_paint.h
@@@ -27,26 -22,12 +22,13 @@@
   *  \ingroup editors
   */
  
- #ifndef __ED_SCULPT_H__
- #define __ED_SCULPT_H__
+ #ifndef __ED_PAINT_H__
+ #define __ED_PAINT_H__
  
- struct ARegion;
  struct bContext;
- struct MultiresModifierData;
- struct Object;
  struct RegionView3D;
  struct wmKeyConfig;
- struct wmWindowManager;
- struct ViewContext;
- struct rcti;
- 
- /* sculpt.c */
- void ED_operatortypes_sculpt(void);
- void sculpt_get_redraw_planes(float planes[4][4], struct ARegion *ar,
-                               struct RegionView3D *rv3d, struct Object *ob);
- void ED_sculpt_get_average_stroke(struct Object *ob, float stroke[3]);
- bool ED_sculpt_minmax(struct bContext *C, float min[3], float max[3]);
- int do_sculpt_mask_box_select(struct bContext *C, struct ViewContext *vc, struct rcti *rect, bool select, bool extend);
++struct wmOperator;
  
  /* paint_ops.c */
  void ED_operatortypes_paint(void);
@@@ -67,16 -48,14 +51,15 @@@ const char *ED_undo_paint_get_name(stru
  void ED_undo_paint_free(void);
  int ED_undo_paint_valid(int type, const char *name);
  bool ED_undo_paint_empty(int type);
 -void ED_undo_paint_push_begin(int type, const char *name, UndoRestoreCb restore, UndoFreeCb free);
 +void ED_undo_paint_push_begin(int type, const char *name, UndoRestoreCb restore, UndoFreeCb free, UndoCleanupCb cleanup);
  void ED_undo_paint_push_end(int type);
  
+ /* paint_image.c */
  /* image painting specific undo */
  void ED_image_undo_restore(struct bContext *C, struct ListBase *lb);
  void ED_image_undo_free(struct ListBase *lb);
- 
- struct wmOperator;
  void ED_imapaint_clear_partial_redraw(void);
  void ED_imapaint_dirty_region(struct Image *ima, struct ImBuf *ibuf, int x, int y, int w, int h);
 +void ED_imapaint_bucket_fill(struct bContext *C, float color[3], struct wmOperator *op);
  
- #endif
+ #endif /* __ED_PAINT_H__ */
diff --cc source/blender/editors/interface/interface_ops.c
index 1673509,316a4d3..292fdf5
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@@ -57,8 -55,6 +57,8 @@@
  #include "WM_api.h"
  #include "WM_types.h"
  
- #include "ED_sculpt.h"
++#include "ED_paint.h"
 +
  /* only for UI_OT_editsource */
  #include "ED_screen.h"
  #include "BKE_main.h"
diff --cc source/blender/editors/sculpt_paint/paint_curve.c
index 64d1252,0000000..f3bd8e2
mode 100644,000000..100644
--- a/source/blender/editors/sculpt_paint/paint_curve.c
+++ b/source/blender/editors/sculpt_paint/paint_curve.c
@@@ -1,539 -1,0 +1,539 @@@
 +/*
 + * ***** BEGIN GPL LICENSE BLOCK *****
 + *
 + * 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 2
 + * 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, write to the Free Software Foundation,
 + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 + *
 + * ***** END GPL LICENSE BLOCK *****
 + */
 +
 +#include "MEM_guardedalloc.h"
 +
 +#include "DNA_brush_types.h"
 +#include "DNA_curve_types.h"
 +#include "DNA_object_types.h"
 +#include "DNA_scene_types.h"
 +#include "DNA_screen_types.h"
 +#include "DNA_space_types.h"
 +#include "DNA_view3d_types.h"
 +
 +#include "BKE_context.h"
 +#include "BKE_main.h"
 +#include "BKE_paint.h"
 +
 +#include "BLI_math_vector.h"
 +#include "BLI_string.h"
 +
- #include "ED_sculpt.h"
++#include "ED_paint.h"
 +
 +#include "WM_api.h"
 +#include "WM_keymap.h"
 +#include "WM_types.h"
 +
 +#include "RNA_access.h"
 +#include "RNA_define.h"
 +
 +#include "paint_intern.h"
 +
 +#include <string.h>
 +#include <limits.h>
 +
 +int paintcurve_poll(bContext *C)
 +{
 +	Object *ob = CTX_data_active_object(C);
 +	Paint *p;
 +	RegionView3D *rv3d = CTX_wm_region_view3d(C);
 +	SpaceImage *sima;
 +
 +	if (rv3d && !(ob && (ob->mode & OB_MODE_ALL_PAINT)))
 +		return false;
 +
 +	sima = CTX_wm_space_image(C);
 +
 +	if (sima && sima->mode != SI_MODE_PAINT)
 +		return false;
 +
 +	p = BKE_paint_get_active_from_context(C);
 +
 +	if (p && p->brush && (p->brush->flag & BRUSH_CURVE)) {
 +		return true;
 +	}
 +
 +	return false;
 +}
 +
 +/* Paint Curve Undo*/
 +
 +typedef struct UndoCurve {
 +	struct UndoImageTile *next, *prev;
 +
 +	PaintCurvePoint *points; /* points of curve */
 +	int tot_points;
 +	int active_point;
 +
 +	char idname[MAX_ID_NAME];  /* name instead of pointer*/
 +} UndoCurve;
 +
 +static void paintcurve_undo_restore(bContext *C, ListBase *lb)
 +{
 +	Paint *p = BKE_paint_get_active_from_context(C);
 +	UndoCurve *uc;
 +	PaintCurve *pc;
 +
 +	if (p->brush) {
 +		pc = p->brush->paint_curve;
 +	}
 +
 +	if (!pc)
 +		return;
 +
 +	uc = (UndoCurve *)lb->first;
 +
 +	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->add_index, uc->active_point);
 +	}
 +}
 +
 +static void paintcurve_undo_delete(ListBase *lb)
 +{
 +	UndoCurve *uc;
 +	uc = (UndoCurve *)lb->first;
 +
 +	if (uc->points)
 +		MEM_freeN(uc->points);
 +	uc->points = NULL;
 +}
 +
 +
 +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:
 +			undo_stack_id = UNDO_PAINT_IMAGE;
 +			break;
 +
 +		case PAINT_SCULPT:
 +			undo_stack_id = UNDO_PAINT_MESH;
 +			break;
 +
 +		default:
 +			/* do nothing, undo is handled by global */
 +			return;
 +	}
 +
 +
 +	ED_undo_paint_push_begin(undo_stack_id, op->type->name,
 +	                         paintcurve_undo_restore, paintcurve_undo_delete, NULL);
 +	lb = undo_paint_push_get_list(undo_stack_id);
 +
 +	uc = MEM_callocN(sizeof(*uc), "Undo_curve");
 +
 +	lb->first = uc;
 +
 +	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);
 +
 +	undo_paint_push_count_alloc(undo_stack_id, sizeof(*uc) + sizeof(*pc->points) * pc->tot_points);
 +
 +	ED_undo_paint_push_end(undo_stack_id);
 +}
 +
 +
 +/******************* Operators *********************************/
 +
 +static int paintcurve_new_exec(bContext *C, wmOperator *UNUSED(op))
 +{
 +	Paint *p = BKE_paint_get_active_from_context(C);
 +	Main *bmain = CTX_data_main(C);
 +
 +	if (p && p->brush) {
 +		p->brush->paint_curve = BKE_paint_curve_add(bmain, "PaintCurve");
 +	}
 +
 +	return OPERATOR_FINISHED;
 +}
 +
 +void PAINTCURVE_OT_new(wmOperatorType *ot)
 +{
 +	/* identifiers */
 +	ot->name = "Add New Paint Curve";
 +	ot->description = "Add new paint curve";
 +	ot->idname = "PAINTCURVE_OT_new";
 +
 +	/* api callbacks */
 +	ot->exec = paintcurve_new_exec;
 +	ot->poll = paintcurve_poll;
 +
 +	/* flags */
 +	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 +}
 +
 +static void paintcurve_point_add(bContext *C,  wmOperator *op, const int loc[2])
 +{
 +	Paint *p = BKE_paint_get_active_from_context(C);
 +	Brush *br = p->brush;
 +	Main *bmain = CTX_data_main(C);
 +	PaintCurve *pc;
 +	PaintCurvePoint *pcp;
 +	wmWindow *window = CTX_wm_window(C);
 +	ARegion *ar = CTX_wm_region(C);
 +	float vec[3] = {loc[0], loc[1], 0.0};
 +	int add_index;
 +	int i;
 +
 +	pc = br->paint_curve;
 +	if (!pc) {
 +		br->paint_curve = pc = BKE_paint_curve_add(bmain, "PaintCurve");
 +	}
 +
 +	paintcurve_undo_begin(C, op, pc);
 +
 +	pcp = MEM_mallocN((pc->tot_points + 1) * sizeof(PaintCurvePoint), "PaintCurvePoint");
 +	add_index = pc->add_index;
 +
 +	if (pc->points) {
 +		if (add_index > 0)
 +			memcpy(pcp, pc->points, add_index * sizeof(PaintCurvePoint));
 +		if (add_index < pc->tot_points)
 +			memcpy(pcp + add_index + 1, pc->points + add_index, (pc->tot_points - add_index) * sizeof(PaintCurvePoint));
 +
 +		MEM_freeN(pc->points);
 +	}
 +	pc->points = pcp;
 +	pc->tot_points++;
 +
 +	/* initialize new point */
 +	memset(&pcp[add_index], 0, sizeof(PaintCurvePoint));
 +	copy_v3_v3(pcp[add_index].bez.vec[0], vec);
 +	copy_v3_v3(pcp[add_index].bez.vec[1], vec);
 +	copy_v3_v3(pcp[add_index].bez.vec[2], vec);
 +
 +	/* last step, clear selection from all bezier handles expect the next */
 +	for (i = 0; i < pc->tot_points; i++) {
 +		pcp[i].bez.f1 = pcp[i].bez.f2 = pcp[i].bez.f3 = 0;
 +	}
 +	pcp[add_index].bez.f3 = SELECT;
 +	pcp[add_index].bez.h2 = HD_ALIGN;
 +
 +	pc->add_index = add_index + 1;
 +
 +	WM_paint_cursor_tag_redraw(window, ar);
 +}
 +
 +
 +static int paintcurve_add_point_invoke(bContext *C, wmOperator *op, const wmEvent *event)
 +{
 +	int loc[2] = {event->mval[0], event->mval[1]};
 +	paintcurve_point_add(C, op, loc);
 +	RNA_int_set_array(op->ptr, "location", loc);
 +	return OPERATOR_FINISHED;
 +}
 +
 +static int paintcurve_add_point_exec(bContext *C, wmOperator *op)
 +{
 +	int loc[2];
 +
 +	if (RNA_struct_property_is_set(op->ptr, "location")) {
 +		RNA_int_get_array(op->ptr, "location", loc);
 +		paintcurve_point_add(C, op, loc);
 +		return OPERATOR_FINISHED;
 +	}
 +
 +	return OPERATOR_CANCELLED;
 +}
 +
 +void PAINTCURVE_OT_add_point(wmOperatorType *ot)
 +{
 +	/* identifiers */
 +	ot->name = "Add New Paint Curve Point";
 +	ot->description = "Add new paint curve point";
 +	ot->idname = "PAINTCURVE_OT_add_point";
 +
 +	/* api callbacks */
 +	ot->invoke = paintcurve_add_point_invoke;
 +	ot->exec = paintcurve_add_point_exec;
 +	ot->poll = paintcurve_poll;
 +
 +	/* flags */
 +	ot->flag = OPTYPE_UNDO;
 +
 +	/* properties */
 +	RNA_def_int_vector(ot->srna, "location", 2, NULL, 0, SHRT_MAX,
 +	                   "Location", "Location of vertex 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list