[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58402] branches/soc-2013-paint/source/ blender: Palettes: Refining based on user feedback on blenderartists:

Antony Riakiotakis kalast at gmail.com
Fri Jul 19 14:12:00 CEST 2013


Revision: 58402
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58402
Author:   psy-fi
Date:     2013-07-19 12:11:59 +0000 (Fri, 19 Jul 2013)
Log Message:
-----------
Palettes: Refining based on user feedback on blenderartists:

* Palette colors can be set to active brush by L-clicking
* Palette colors can be edited by ctrl-L-clicking (regular colours can
be edited by simply L-clicking)
* Palette colors can be deleted by hovering over them and pressing
delete or X

To make this work, an extra button property was added. Also I separated
the color button handling code since it was becoming too much of its
own.

Modified Paths:
--------------
    branches/soc-2013-paint/source/blender/blenkernel/BKE_paint.h
    branches/soc-2013-paint/source/blender/blenkernel/intern/paint.c
    branches/soc-2013-paint/source/blender/editors/include/UI_interface.h
    branches/soc-2013-paint/source/blender/editors/interface/interface_handlers.c
    branches/soc-2013-paint/source/blender/editors/interface/interface_templates.c

Modified: branches/soc-2013-paint/source/blender/blenkernel/BKE_paint.h
===================================================================
--- branches/soc-2013-paint/source/blender/blenkernel/BKE_paint.h	2013-07-19 11:51:04 UTC (rev 58401)
+++ branches/soc-2013-paint/source/blender/blenkernel/BKE_paint.h	2013-07-19 12:11:59 UTC (rev 58402)
@@ -100,6 +100,7 @@
 void BKE_free_palette(struct Palette *palette);
 struct Palette *BKE_palette_add(struct Main *bmain, const char *name);
 struct PaletteColor *BKE_palette_color_add(struct Palette *palette);
+void BKE_palette_remove_color (struct Palette *palette, struct PaletteColor *colour);
 
 struct Paint *BKE_paint_get_active(struct Scene *sce);
 struct Paint *BKE_paint_get_active_from_context(const struct bContext *C);

Modified: branches/soc-2013-paint/source/blender/blenkernel/intern/paint.c
===================================================================
--- branches/soc-2013-paint/source/blender/blenkernel/intern/paint.c	2013-07-19 11:51:04 UTC (rev 58401)
+++ branches/soc-2013-paint/source/blender/blenkernel/intern/paint.c	2013-07-19 12:11:59 UTC (rev 58402)
@@ -283,6 +283,13 @@
 	}
 }
 
+/* remove colour from palette. Must be certain colour is inside the palette! */
+void BKE_palette_remove_color (Palette *palette, PaletteColor *colour)
+{
+	BLI_remlink(&palette->colors, colour);
+	MEM_freeN(colour);
+}
+
 Palette *BKE_palette_add(Main *bmain, const char *name)
 {
 	Palette *palette;

Modified: branches/soc-2013-paint/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/soc-2013-paint/source/blender/editors/include/UI_interface.h	2013-07-19 11:51:04 UTC (rev 58401)
+++ branches/soc-2013-paint/source/blender/editors/include/UI_interface.h	2013-07-19 12:11:59 UTC (rev 58402)
@@ -272,6 +272,8 @@
 
 #define UI_GRAD_V_ALT   9
 
+#define UI_COLOR_PALETTE 20
+
 /* Drawing
  *
  * Functions to draw various shapes, taking theme settings into account.

Modified: branches/soc-2013-paint/source/blender/editors/interface/interface_handlers.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/interface/interface_handlers.c	2013-07-19 11:51:04 UTC (rev 58401)
+++ branches/soc-2013-paint/source/blender/editors/interface/interface_handlers.c	2013-07-19 12:11:59 UTC (rev 58402)
@@ -38,6 +38,7 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "DNA_brush_types.h"
 #include "DNA_sensor_types.h"
 #include "DNA_controller_types.h"
 #include "DNA_actuator_types.h"
@@ -928,8 +929,7 @@
 				return false;
 			}
 		}
-		else
-		{
+		else {
 			wmDrag *drag;
 
 			drag = WM_event_start_drag(C, but->icon, but->dragtype, but->dragpoin, ui_get_but_val(but), 0);
@@ -3453,7 +3453,7 @@
 		}
 #ifdef USE_DRAG_TOGGLE
 		if (event->type == LEFTMOUSE && event->val == KM_PRESS
-		    && (ui_is_but_bool(but) || but->type == COLOR))
+		    && (ui_is_but_bool(but)))
 		{
 			button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG);
 			data->dragstartx = event->x;
@@ -3498,39 +3498,102 @@
 				return WM_UI_HANDLER_BREAK;
 			}
 		}
-		else if (but->type == COLOR) {
-			if (ELEM3(event->type, MOUSEPAN, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->alt) {
-				float *hsv = ui_block_hsv_get(but->block);
-				float col[3];
-				
-				ui_get_but_vectorf(but, col);
-				rgb_to_hsv_compat_v(col, hsv);
+	}
+	else if (data->state == BUTTON_STATE_WAIT_DRAG) {
+		
+		/* this function also ends state */
+		if (ui_but_start_drag(C, but, data, event)) {
+			return WM_UI_HANDLER_BREAK;
+		}
+		
+		/* outside icon quit, not needed if drag activated */
+		if (0 == ui_but_mouse_inside_icon(but, data->region, event)) {
+			button_activate_state(C, but, BUTTON_STATE_EXIT);
+			data->cancel = true;
+			return WM_UI_HANDLER_BREAK;
+		}
 
-				if (event->type == WHEELDOWNMOUSE)
-					hsv[2] = CLAMPIS(hsv[2] - 0.05f, 0.0f, 1.0f);
-				else if (event->type == WHEELUPMOUSE)
-					hsv[2] = CLAMPIS(hsv[2] + 0.05f, 0.0f, 1.0f);
-				else {
-					float fac = 0.005 * (event->y - event->prevy);
-					hsv[2] = CLAMPIS(hsv[2] + fac, 0.0f, 1.0f);
-				}
-				
-				hsv_to_rgb_v(hsv, data->vec);
-				ui_set_but_vectorf(but, data->vec);
-				
-				button_activate_state(C, but, BUTTON_STATE_EXIT);
-				ui_apply_button(C, but->block, but, data, true);
+		if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
+			button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
+			return WM_UI_HANDLER_BREAK;
+		}
+	}
+
+	return WM_UI_HANDLER_CONTINUE;
+}
+
+static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
+{
+
+	if (data->state == BUTTON_STATE_HIGHLIGHT) {
+
+		/* first handle click on icondrag type button */
+		if (event->type == LEFTMOUSE && but->dragpoin && event->val == KM_PRESS) {
+			if (ui_but_mouse_inside_icon(but, data->region, event)) {
+				button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG);
+				data->dragstartx = event->x;
+				data->dragstarty = event->y;
 				return WM_UI_HANDLER_BREAK;
 			}
 		}
+#ifdef USE_DRAG_TOGGLE
+		if (event->type == LEFTMOUSE && event->val == KM_PRESS)
+		{
+			button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG);
+			data->dragstartx = event->x;
+			data->dragstarty = event->y;
+			return WM_UI_HANDLER_BREAK;
+		}
+#endif
+		/* regular open menu */
+		if (ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
+			button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
+			return WM_UI_HANDLER_BREAK;
+		}
+		else if (ELEM3(event->type, MOUSEPAN, WHEELDOWNMOUSE, WHEELUPMOUSE) && event->alt) {
+			float *hsv = ui_block_hsv_get(but->block);
+			float col[3];
+
+			ui_get_but_vectorf(but, col);
+			rgb_to_hsv_compat_v(col, hsv);
+
+			if (event->type == WHEELDOWNMOUSE)
+				hsv[2] = CLAMPIS(hsv[2] - 0.05f, 0.0f, 1.0f);
+			else if (event->type == WHEELUPMOUSE)
+				hsv[2] = CLAMPIS(hsv[2] + 0.05f, 0.0f, 1.0f);
+			else {
+				float fac = 0.005 * (event->y - event->prevy);
+				hsv[2] = CLAMPIS(hsv[2] + fac, 0.0f, 1.0f);
+			}
+
+			hsv_to_rgb_v(hsv, data->vec);
+			ui_set_but_vectorf(but, data->vec);
+
+			button_activate_state(C, but, BUTTON_STATE_EXIT);
+			ui_apply_button(C, but->block, but, data, true);
+			return WM_UI_HANDLER_BREAK;
+		}
+		else if ((int)(but->a1) == UI_COLOR_PALETTE &&
+		         ELEM(event->type, XKEY, DELKEY) && event->val == KM_PRESS)
+		{
+			Scene *scene = CTX_data_scene(C);
+			Paint *paint = BKE_paint_get_active(scene);
+			Palette *palette = BKE_paint_palette(paint);
+			PaletteColor *color = but->rnapoin.data;
+
+			BKE_palette_remove_color(palette, color);
+
+			button_activate_state(C, but, BUTTON_STATE_EXIT);
+			return WM_UI_HANDLER_BREAK;
+		}
 	}
 	else if (data->state == BUTTON_STATE_WAIT_DRAG) {
-		
+
 		/* this function also ends state */
 		if (ui_but_start_drag(C, but, data, event)) {
 			return WM_UI_HANDLER_BREAK;
 		}
-		
+
 		/* outside icon quit, not needed if drag activated */
 		if (0 == ui_but_mouse_inside_icon(but, data->region, event)) {
 			button_activate_state(C, but, BUTTON_STATE_EXIT);
@@ -3539,7 +3602,22 @@
 		}
 
 		if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
-			button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
+			if ((int)(but->a1) == UI_COLOR_PALETTE && !event->ctrl) {
+				Scene *scene = CTX_data_scene(C);
+				Paint *paint = BKE_paint_get_active(scene);
+				Brush *brush = BKE_paint_brush(paint);
+
+				if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
+					RNA_property_float_get_array(&but->rnapoin, but->rnaprop, brush->rgb);
+				} else if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR) {
+					float color[3];
+					RNA_property_float_get_array(&but->rnapoin, but->rnaprop, color);
+					linearrgb_to_srgb_v3_v3(brush->rgb, color);
+				}
+				button_activate_state(C, but, BUTTON_STATE_EXIT);
+			} else {
+				button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
+			}
 			return WM_UI_HANDLER_BREAK;
 		}
 
@@ -5438,7 +5516,7 @@
 			if (but->a1 == UI_GRAD_V_ALT)  /* signal to prevent calling up color picker */
 				retval = ui_do_but_EXIT(C, but, data, event);
 			else
-				retval = ui_do_but_BLOCK(C, but, data, event);
+				retval = ui_do_but_COLOR(C, but, data, event);
 			break;
 		case BUT_NORMAL:
 			retval = ui_do_but_NORMAL(C, block, but, data, event);

Modified: branches/soc-2013-paint/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/soc-2013-paint/source/blender/editors/interface/interface_templates.c	2013-07-19 11:51:04 UTC (rev 58401)
+++ branches/soc-2013-paint/source/blender/editors/interface/interface_templates.c	2013-07-19 12:11:59 UTC (rev 58402)
@@ -2339,7 +2339,7 @@
 
 		RNA_pointer_create(&palette->id, &RNA_PaletteColor, color, &ptr);
 		uiDefButR(block, COLOR, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, &ptr, "color",
-		          -1, 0.0, 1.0, 0.0, 0.0, "");
+		          -1, 0.0, 1.0, UI_COLOR_PALETTE, 0.0, "");
 
 		row_cols++;
 	}




More information about the Bf-blender-cvs mailing list