[Bf-blender-cvs] [ef757a2ef80] greasepencil-object: GP: Primitive: Fkey to size brush

Charlie Jolly noreply at git.blender.org
Thu Dec 20 12:46:24 CET 2018


Commit: ef757a2ef80a29a89447a422939b05b1ececc50e
Author: Charlie Jolly
Date:   Thu Dec 20 11:45:51 2018 +0000
Branches: greasepencil-object
https://developer.blender.org/rBef757a2ef80a29a89447a422939b05b1ececc50e

GP: Primitive: Fkey to size brush

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

M	source/blender/editors/gpencil/gpencil_intern.h
M	source/blender/editors/gpencil/gpencil_primitive.c

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

diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 4e998e2ddcb..f93952aae31 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -157,6 +157,7 @@ typedef struct tGPDprimitive {
 	int type;                         /* type of primitive */
 	int orign_type;                   /* original type of primitive */
 	bool curve;                       /* type of primitive is a curve */
+	int brush_size;                   /* brush size */
 	short flip;                       /* flip option */
 	tGPspoint *points;                /* array of data-points for stroke */
 	int point_count;                  /* number of edges allocated */
diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c
index c95a0ce5b4a..3c3dd5aa622 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -96,6 +96,7 @@
 #define IN_PROGRESS 1
 #define IN_CURVE_EDIT 2
 #define IN_MOVE 3
+#define IN_BRUSH_SIZE 4
 
 #define SELECT_NONE 0
 #define SELECT_START 1
@@ -384,6 +385,9 @@ static void gpencil_primitive_add_segment(tGPDprimitive *tgpi)
 /* Helper: set control point */
 static void gp_primitive_set_cp(tGPDprimitive *tgpi, float p[2], float color[4], int size)
 {
+	if (tgpi->flag == IN_PROGRESS) {
+		return;
+	}
 	bGPDcontrolpoint *cp_points = tgpi->gpd->runtime.cp_points;
 
 	if (tgpi->gpd->runtime.tot_cp_points < MAX_CP) {
@@ -1370,6 +1374,29 @@ static void gpencil_primitive_edit_event_handling(bContext *C, wmOperator *op, w
 	}
 }
 
+/* brush size */
+static void gpencil_primitive_size(tGPDprimitive *tgpi, bool reset)
+{
+	Brush *brush = tgpi->brush;
+	if (brush) {
+		if (reset) {
+			brush->size = tgpi->brush_size;
+			tgpi->brush_size = 0;
+		}
+		else {
+			if (tgpi->brush_size == 0) {
+				tgpi->brush_size = brush->size;
+			}
+			float move[2];
+			sub_v2_v2v2(move, tgpi->mval, tgpi->mvalo);
+			int adjust = (move[1] > 0.0f) ? 1 : -1;
+			brush->size += adjust * (int)fabsf(len_manhattan_v2(move));
+		}
+		CLAMP_MIN(brush->size, 1);
+	}
+	
+}
+
 /* move */
 static void gpencil_primitive_move(tGPDprimitive *tgpi)
 {
@@ -1401,7 +1428,6 @@ static int gpencil_primitive_modal(bContext *C, wmOperator *op, const wmEvent *e
 	copy_v2fl_v2i(tgpi->mval, event->mval);
 
 	if (tgpi->flag == IN_MOVE) {
-
 		switch (event->type) {
 			case MOUSEMOVE:
 				gpencil_primitive_move(tgpi);
@@ -1416,6 +1442,29 @@ static int gpencil_primitive_modal(bContext *C, wmOperator *op, const wmEvent *e
 		copy_v2_v2(tgpi->mvalo, tgpi->mval);
 		return OPERATOR_RUNNING_MODAL;
 	}
+	if (tgpi->flag == IN_BRUSH_SIZE) {
+		switch (event->type) {
+		case MOUSEMOVE:
+			gpencil_primitive_size(tgpi, false);
+			gpencil_primitive_update(C, op, tgpi);
+			break;
+		case ESCKEY:
+		case MIDDLEMOUSE:
+		case LEFTMOUSE:
+			tgpi->brush_size = 0;
+			tgpi->flag = IN_CURVE_EDIT;
+			break;
+		case RIGHTMOUSE:
+			if (event->val == KM_RELEASE) {
+				tgpi->flag = IN_CURVE_EDIT;
+				gpencil_primitive_size(tgpi, true);
+				gpencil_primitive_update(C, op, tgpi);
+			}
+			break;
+		}
+		copy_v2_v2(tgpi->mvalo, tgpi->mval);
+		return OPERATOR_RUNNING_MODAL;
+	}
 	else if (tgpi->flag != IDLE) {
 		gpencil_primitive_edit_event_handling(C, op, win, event, tgpi);
 	}
@@ -1520,6 +1569,14 @@ static int gpencil_primitive_modal(bContext *C, wmOperator *op, const wmEvent *e
 			}
 			break;
 		}
+		case FKEY: /* brush thickness */
+		{
+			if ((event->val == KM_PRESS)) {
+				tgpi->flag = IN_BRUSH_SIZE;
+				WM_cursor_modal_set(win, BC_NS_SCROLLCURSOR);
+			}
+			break;
+		}
 		case CKEY: /* curve mode */
 		{
 			if ((event->val == KM_PRESS) &&



More information about the Bf-blender-cvs mailing list