[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58808] branches/soc-2013-paint: WIP. gradient code

Antony Riakiotakis kalast at gmail.com
Thu Aug 1 19:18:18 CEST 2013


Revision: 58808
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58808
Author:   psy-fi
Date:     2013-08-01 17:18:17 +0000 (Thu, 01 Aug 2013)
Log Message:
-----------
WIP. gradient code

Modified Paths:
--------------
    branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py
    branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c
    branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c

Modified: branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py
===================================================================
--- branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py	2013-08-01 17:18:08 UTC (rev 58807)
+++ branches/soc-2013-paint/release/scripts/startup/bl_ui/space_image.py	2013-08-01 17:18:17 UTC (rev 58808)
@@ -971,6 +971,7 @@
 
         col = layout.column()
         col.operator("paint.bucket_fill")
+        col.operator("paint.gradient_fill")
 
 
 

Modified: branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2013-08-01 17:18:08 UTC (rev 58807)
+++ branches/soc-2013-paint/release/scripts/startup/bl_ui/space_view3d_toolbar.py	2013-08-01 17:18:17 UTC (rev 58808)
@@ -1279,6 +1279,7 @@
 
         col = layout.column()
         col.operator("paint.bucket_fill")
+        col.operator("paint.gradient_fill")
 
 
 class VIEW3D_PT_imagepaint_options(View3DPaintPanel):

Modified: branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c	2013-08-01 17:18:08 UTC (rev 58807)
+++ branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_image.c	2013-08-01 17:18:17 UTC (rev 58808)
@@ -1340,14 +1340,65 @@
 	RNA_def_float_color(ot->srna, "color", 3, NULL, 0.0, 1.0, "Color", "Color for bucket fill", 0.0, 1.0);
 }
 
-static int gradient_fill_exec(bContext *C, wmOperator *UNUSED(op))
+typedef struct GradientFillData {
+	int mouse_init[2];
+//	int x_init, y_init;
+	bool started;
+	void *cursor;
+} GradientFillData;
+
+static void gradient_draw_line(bContext *UNUSED(C), int x, int y, void *customdata) {
+	GradientFillData *data = (GradientFillData *)customdata;
+
+	if (data && data->started) {
+		glEnable(GL_LINE_SMOOTH);
+		glEnable(GL_BLEND);
+
+		glColor4ub(0, 0, 0, 255);
+		sdrawline(x, y, data->mouse_init[0], data->mouse_init[1]);
+
+		glDisable(GL_BLEND);
+		glDisable(GL_LINE_SMOOTH);
+	}
+}
+
+static int gradient_fill_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *UNUSED(event))
 {
-	PaintMode mode = BKE_paintmode_get_active_from_context(C);
+	GradientFillData *data = MEM_mallocN(sizeof(*data), "Gradient Fill data");
 
-	return OPERATOR_FINISHED;
+	data->started = false;
+	op->customdata = data;
+
+	data->cursor = WM_paint_cursor_activate(CTX_wm_manager(C), image_paint_poll, gradient_draw_line, data);
+	WM_event_add_modal_handler(C, op);
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
+static int gradient_fill_modal(struct bContext *C, struct wmOperator *op, const struct wmEvent *event)
+{
+	wmWindow *window = CTX_wm_window(C);
+	ARegion *ar = CTX_wm_region(C);
 
+	GradientFillData *data = op->customdata;
+
+	if (event->type == LEFTMOUSE) {
+		if (event->val == KM_PRESS) {
+			copy_v2_v2_int(data->mouse_init, event->mval);
+			data->started = true;
+		}
+		else if (event->val == KM_RELEASE) {
+			WM_paint_cursor_end(CTX_wm_manager(C), data->cursor);
+			MEM_freeN(data);
+			return OPERATOR_FINISHED;
+		}
+	}
+
+	WM_paint_cursor_tag_redraw(window, ar);
+
+	return OPERATOR_RUNNING_MODAL;
+}
+
 void PAINT_OT_gradient_fill(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -1356,7 +1407,8 @@
 	ot->description = "Fill canvas with a gradient";
 
 	/* api callbacks */
-	ot->exec = gradient_fill_exec;
+	ot->invoke = gradient_fill_invoke;
+	ot->modal = gradient_fill_modal;
 	ot->poll = image_paint_poll;
 
 	/* flags */

Modified: branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c	2013-08-01 17:18:08 UTC (rev 58807)
+++ branches/soc-2013-paint/source/blender/editors/sculpt_paint/paint_stroke.c	2013-08-01 17:18:17 UTC (rev 58808)
@@ -74,7 +74,7 @@
 
 typedef struct PaintStroke {
 	void *mode_data;
-	void *smooth_stroke_cursor;
+	void *stroke_cursor;
 	wmTimer *timer;
 
 	/* Cached values */
@@ -618,8 +618,8 @@
 			stroke->timer);
 	}
 
-	if (stroke->smooth_stroke_cursor)
-		WM_paint_cursor_end(CTX_wm_manager(C), stroke->smooth_stroke_cursor);
+	if (stroke->stroke_cursor)
+		WM_paint_cursor_end(CTX_wm_manager(C), stroke->stroke_cursor);
 
 	BLI_freelistN(&stroke->line);
 
@@ -793,7 +793,7 @@
 	/* one time initialization */
 	if (!stroke->stroke_init) {
 		if (paint_supports_smooth_stroke(br, mode))
-			stroke->smooth_stroke_cursor =
+			stroke->stroke_cursor =
 			    WM_paint_cursor_activate(CTX_wm_manager(C), paint_poll, paint_draw_smooth_cursor, stroke);
 
 		stroke->stroke_init = true;
@@ -813,7 +813,7 @@
 
 			if (br->flag & BRUSH_LINE) {
 				LinePoint *p = MEM_callocN(sizeof(*p), "line_stroke_point");
-				stroke->smooth_stroke_cursor =
+				stroke->stroke_cursor =
 					WM_paint_cursor_activate(CTX_wm_manager(C), paint_poll, paint_draw_line_cursor, stroke);
 
 				BLI_addtail(&stroke->line, p);




More information about the Bf-blender-cvs mailing list