[Bf-blender-cvs] [1f4337b] pie-menus: Pies:

Antony Riakiotakis noreply at git.blender.org
Mon May 26 23:03:52 CEST 2014


Commit: 1f4337b77020b827f33149a7aba508f90fd8f49e
Author: Antony Riakiotakis
Date:   Tue May 27 00:03:41 2014 +0300
https://developer.blender.org/rB1f4337b77020b827f33149a7aba508f90fd8f49e

Pies:

* More display code
* Add collision detection in one more place, now object mode pie
collision works correctly.
* Changed object mode pie shortcut to TAB

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

M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/interface_widgets.c
M	source/blender/editors/sculpt_paint/paint_ops.c

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

diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 4993e51..9205858 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -6379,18 +6379,43 @@ static bool ui_mouse_inside_region(ARegion *ar, int x, int y)
 	return true;
 }
 
+static void ui_block_calculate_pie_segment(const float mx, const float my, float seg2[2], const uiBlock *block)
+{
+	float seg1[2];
+
+	seg1[0] = BLI_rctf_cent_x(&block->rect);
+	seg1[1] = BLI_rctf_cent_y(&block->rect);
+
+	seg2[0] = mx - seg1[0];
+	seg2[1] = my - seg1[1];
+	normalize_v2(seg2);
+}
+
+
 static bool ui_mouse_inside_button(ARegion *ar, uiBut *but, int x, int y)
 {
+	uiBlock *block = but->block;
 	float mx, my;
+	float seg[2];
+
 	if (!ui_mouse_inside_region(ar, x, y))
 		return false;
 
 	mx = x;
 	my = y;
 
-	ui_window_to_block_fl(ar, but->block, &mx, &my);
+	ui_window_to_block_fl(ar, block, &mx, &my);
 
-	if (!ui_but_contains_pt(but, mx, my))
+	if (block->flag & UI_BLOCK_RADIAL) {
+		ui_block_calculate_pie_segment(mx, my, seg, block);
+	}
+
+	if (but->dt == UI_EMBOSSR) {
+		if (!ui_but_isect_pie_seg(block, but, seg)) {
+			return false;
+		}
+	}
+	else if (!ui_but_contains_pt(but, mx, my))
 		return false;
 	
 	return true;
@@ -6426,18 +6451,6 @@ bool ui_is_but_search_unlink_visible(const uiBut *but)
 	        (but->drawstr[0] != '\0'));
 }
 
-static void ui_block_calculate_pie_segment(const float mx, const float my, float seg2[2], const uiBlock *block)
-{
-	float seg1[2];
-
-	seg1[0] = BLI_rctf_cent_x(&block->rect);
-	seg1[1] = BLI_rctf_cent_y(&block->rect);
-
-	seg2[0] = mx - seg1[0];
-	seg2[1] = my - seg1[1];
-	normalize_v2(seg2);
-}
-
 /* x and y are only used in case event is NULL... */
 static uiBut *ui_but_find_mouse_over_ex(ARegion *ar, const int x, const int y, const bool labeledit)
 {
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 1c1f3eb..2791f37 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -371,6 +371,7 @@ struct uiBlock {
 	                          */
 	int num_pie_items; /* number of pie items, useful to determine collision based on how pie items are distributed */
 	float pie_center_width; /* width of the central text of the pie menu */
+	float pie_dir[2];
 };
 
 typedef struct uiSafetyRct {
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index f516a4b..03fde12 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -3671,14 +3671,17 @@ void ui_draw_menu_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect)
 
 void ui_draw_pie_center(uiBlock *block)
 {
+	bTheme *btheme = UI_GetTheme();
 	float cx = BLI_rctf_cent_x(&block->rect);
 	float cy = BLI_rctf_cent_y(&block->rect);
 
 	float pie_radius_internal = block->pie_center_width;
-	glColor4ub(127, 127, 127, 127);
+	glColor4ubv(btheme->tui.wcol_menu_back.inner);
 	glPushMatrix();
 	glTranslatef(cx, cy, 0.0);
-	glutil_draw_lined_arc(0.0, (float)(M_PI * 2.0), pie_radius_internal, 40);
+	glEnable(GL_BLEND);
+	glutil_draw_filled_arc(0.0, (float)(M_PI * 2.0), pie_radius_internal, 40);
+	glDisable(GL_BLEND);
 	glPopMatrix();
 }
 
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index f09ae61..4d65388 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -1194,7 +1194,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf)
 	kmi = WM_keymap_add_item(keymap, "WM_OT_context_pie_enum", AKEY, KM_PRESS, 0, 0);
 	RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.stroke_method");
 
-	WM_keymap_add_pie_menu(keymap, "VIEW3D_PIE_object_mode", QKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_pie_menu(keymap, "VIEW3D_PIE_object_mode", TABKEY, KM_PRESS, 0, 0);
 
 	kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", SKEY, KM_PRESS, KM_SHIFT, 0);
 	RNA_string_set(kmi->ptr, "data_path", "tool_settings.sculpt.brush.use_smooth_stroke");




More information about the Bf-blender-cvs mailing list