[Bf-blender-cvs] [de0ca25d6ed] greasepencil-object: Make color picker a floating panel

Antonio Vazquez noreply at git.blender.org
Sat Jan 13 19:04:58 CET 2018


Commit: de0ca25d6ed57d38cd1564817156ca2216d61995
Author: Antonio Vazquez
Date:   Sat Jan 13 18:25:22 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBde0ca25d6ed57d38cd1564817156ca2216d61995

Make color picker a floating panel

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

M	source/blender/editors/gpencil/gpencil_colorpick.c
M	source/blender/editors/include/ED_gpencil.h

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

diff --git a/source/blender/editors/gpencil/gpencil_colorpick.c b/source/blender/editors/gpencil/gpencil_colorpick.c
index a4b8002f683..837063fad27 100644
--- a/source/blender/editors/gpencil/gpencil_colorpick.c
+++ b/source/blender/editors/gpencil/gpencil_colorpick.c
@@ -238,10 +238,11 @@ static void gpencil_draw_color_table(const bContext *UNUSED(C), tGPDpick *tgpk)
 	line[3] = 1.0f;
 
 	/* draw panel background */
-	UI_GetThemeColor4fv(TH_PANEL_BACK, ink);
-	ink[3] = 1.0f;
-	gp_draw_fill_box(&tgpk->panel, ink, ink, 0);
-
+	UI_GetThemeColor4fv(TH_BACK, ink);
+	ink[3] = 0.9f;
+	UI_draw_roundbox_4fv(true, tgpk->panel.xmin, tgpk->panel.ymin, 
+						tgpk->panel.xmax, tgpk->panel.ymax,
+						3.0f, ink);
 	/* draw color boxes */
 	tGPDpickColor *col = tgpk->colors;
 	for (int i = 0; i < tgpk->totcolor; i++, col++) {
@@ -288,7 +289,7 @@ static int gpencil_colorpick_poll(bContext *C)
 }
 
 /* Allocate memory and initialize values */
-static tGPDpick *gp_session_init_colorpick(bContext *C, wmOperator *op)
+static tGPDpick *gp_session_init_colorpick(bContext *C, wmOperator *op, const wmEvent *event)
 {
 	tGPDpick *tgpk = MEM_callocN(sizeof(tGPDpick), __func__);
 
@@ -305,6 +306,12 @@ static tGPDpick *gp_session_init_colorpick(bContext *C, wmOperator *op)
 	tgpk->sa = CTX_wm_area(C);
 	tgpk->ar = CTX_wm_region(C);
 	tgpk->brush = BKE_gpencil_brush_getactive(ts);
+	tgpk->bflag = tgpk->brush->flag;
+	tgpk->brush->flag &= ~GP_BRUSH_ENABLE_CURSOR;
+
+
+	tgpk->center[0] = event->mval[0];
+	tgpk->center[1] = event->mval[1];
 
 	ED_region_visible_rect(tgpk->ar, &tgpk->rect);
 
@@ -324,18 +331,19 @@ static tGPDpick *gp_session_init_colorpick(bContext *C, wmOperator *op)
 
 	/* get number of rows and columns */
 	tgpk->row = (tgpk->rect.ymax - tgpk->rect.ymin - GP_BOX_GAP) / (tgpk->boxsize[1] + GP_BOX_GAP);
-	CLAMP_MIN(tgpk->row, 1);
+	CLAMP(tgpk->row, 1, 6);
 	tgpk->col = tgpk->totcolor / tgpk->row;
 	if (tgpk->totcolor % tgpk->row > 0) {
 		tgpk->col++;
 	}
 	CLAMP_MIN(tgpk->col, 1);
 
-	/* define panel size (vertical right) */
-	tgpk->panel.xmin = tgpk->rect.xmax - (GP_BOX_SIZE * tgpk->col ) - (GP_BOX_GAP * (tgpk->col + 1));
-	tgpk->panel.ymin = tgpk->rect.ymin;
-	tgpk->panel.xmax = tgpk->rect.xmax + 1;
-	tgpk->panel.ymax = tgpk->rect.ymax + 1;
+	/* define panel size */
+	tgpk->panel.xmin = tgpk->center[0] - ((GP_BOX_SIZE * tgpk->col) + (GP_BOX_GAP * (tgpk->col + 1)) / 2);
+	tgpk->panel.ymin = tgpk->center[1] - ((GP_BOX_SIZE * tgpk->row) + (GP_BOX_GAP * (tgpk->row + 1)) / 2);
+
+	tgpk->panel.xmax = tgpk->panel.xmin + (GP_BOX_SIZE * tgpk->col) + (GP_BOX_GAP * (tgpk->col + 1));
+	tgpk->panel.ymax = tgpk->panel.ymin + (GP_BOX_SIZE * tgpk->row) + (GP_BOX_GAP * (tgpk->row + 1));
 
 	/* load color table */
 	tGPDpickColor *tcolor = tgpk->colors;
@@ -412,6 +420,9 @@ static void gpencil_colorpick_exit(bContext *C, wmOperator *op)
 		/* free color table */
 		MEM_SAFE_FREE(tgpk->colors);
 
+		/* rest brush flags */
+		tgpk->brush->flag = tgpk->bflag;
+
 		/* finally, free memory used by temp data */
 		MEM_freeN(tgpk);
 	}
@@ -429,12 +440,12 @@ static void gpencil_colorpick_cancel(bContext *C, wmOperator *op)
 }
 
 /* Init: Allocate memory and set init values */
-static int gpencil_colorpick_init(bContext *C, wmOperator *op)
+static int gpencil_colorpick_init(bContext *C, wmOperator *op, const wmEvent *event)
 {
 	tGPDpick *tgpk;
 
 	/* check context */
-	tgpk = op->customdata = gp_session_init_colorpick(C, op);
+	tgpk = op->customdata = gp_session_init_colorpick(C, op, event);
 	if (tgpk == NULL) {
 		/* something wasn't set correctly in context */
 		gpencil_colorpick_exit(C, op);
@@ -451,7 +462,7 @@ static int gpencil_colorpick_invoke(bContext *C, wmOperator *op, const wmEvent *
 	tGPDpick *tgpk = NULL;
 
 	/* try to initialize context data needed */
-	if (!gpencil_colorpick_init(C, op)) {
+	if (!gpencil_colorpick_init(C, op, event)) {
 		gpencil_colorpick_exit(C, op);
 		if (op->customdata)
 			MEM_freeN(op->customdata);
@@ -502,7 +513,7 @@ static int gpencil_colorpick_modal(bContext *C, wmOperator *op, const wmEvent *e
 	Object *ob = CTX_data_active_object(C);
 	tGPDpick *tgpk = op->customdata;
 
-	int estate = OPERATOR_PASS_THROUGH; /* default exit state - pass through */
+	int estate = OPERATOR_RUNNING_MODAL; 
 
 	switch (event->type) {
 		case ESCKEY:
@@ -535,7 +546,7 @@ static int gpencil_colorpick_modal(bContext *C, wmOperator *op, const wmEvent *e
 			gpencil_colorpick_exit(C, op);
 			break;
 		
-		case OPERATOR_RUNNING_MODAL | OPERATOR_PASS_THROUGH:
+		case OPERATOR_RUNNING_MODAL:
 			break;
 	}
 	
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 70555c69728..d3daa0a49af 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -210,7 +210,9 @@ typedef struct tGPDpick {
 	struct ARegion *ar;					/* region where painting originated */
 	struct Palette *palette;			/* current palette */
 	struct bGPDbrush *brush;            /* current brush */
+	short bflag;                        /* previous brush flag */
 
+	int center[2];                      /* mouse center position */
 	rcti rect;                          /* visible area */
 	rcti panel;                         /* panel area */
 	int row, col;                       /* number of rows and columns */



More information about the Bf-blender-cvs mailing list