[Bf-blender-cvs] [d13a194] pie-menus: Press and release style interaction for pie menus
Antony Riakiotakis
noreply at git.blender.org
Fri May 30 18:47:25 CEST 2014
Commit: d13a194bb78e8dd0b01606dea26c7b1d56574c44
Author: Antony Riakiotakis
Date: Fri May 30 19:47:08 2014 +0300
https://developer.blender.org/rBd13a194bb78e8dd0b01606dea26c7b1d56574c44
Press and release style interaction for pie menus
works by sending enter press and enter release events. May be somewhat
hacky but it should work.
+ minor cleanup.
===================================================================
M source/blender/editors/interface/interface_handlers.c
M source/blender/editors/interface/interface_intern.h
M source/blender/editors/interface/interface_regions.c
===================================================================
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 87de12b..83168f1 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -7858,6 +7858,15 @@ static int ui_handle_menu_event(
if (event->customdata == menu->scrolltimer)
ui_menu_scroll(ar, block, my, NULL);
}
+ else if ((block->flag & UI_BLOCK_RADIAL) && but && (event->type == block->event) && event->val == KM_RELEASE) {
+ wmEvent local_event = *event;
+ local_event.type = RETKEY;
+ local_event.val = KM_PRESS;
+ ui_handle_menu_button(C, &local_event, menu);
+ local_event.type = RETKEY;
+ local_event.val = KM_RELEASE;
+ return ui_handle_menu_button(C, &local_event, menu);
+ }
else {
/* for ui_mouse_motion_towards_block */
if (event->type == MOUSEMOVE) {
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 2791f37..df56378 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -372,6 +372,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];
+ int event; /* initial event used to fire the pie menu, store here so we can query for release */
};
typedef struct uiSafetyRct {
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index b1154e4..47216f7 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -2178,11 +2178,6 @@ struct uiPopupMenu {
struct uiPieMenu {
uiBlock *block_radial; /* radial block of the pie menu (more could be added later) */
uiLayout *layout;
-
- /*center coordinates of pie menu in window space */
- int mx, my;
- /* event that was used to fire up the pie. Used to detect when to quit */
- short event;
};
static uiBlock *ui_block_func_POPUP(bContext *C, uiPopupBlockHandle *handle, void *arg_pup)
@@ -2490,10 +2485,10 @@ struct uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon
pie->block_radial->flag |= UI_BLOCK_POPUP_MEMORY;
pie->block_radial->puphash = ui_popup_menu_hash(title);
pie->block_radial->flag |= UI_BLOCK_RADIAL;
+ pie->block_radial->event = event;
pie->layout = uiBlockLayout(pie->block_radial, UI_LAYOUT_VERTICAL, UI_LAYOUT_PIEMENU, 0, 0, 200, 0, 0, style);
- pie->event = event;
/* create title button */
if (title[0]) {
@@ -2521,10 +2516,6 @@ void uiPieMenuEnd(bContext *C, uiPieMenu *pie)
wmWindow *window = CTX_wm_window(C);
uiPopupBlockHandle *menu;
- /* initially start pie from mouse position */
- pie->mx = window->eventstate->x;
- pie->my = window->eventstate->y;
-
menu = ui_popup_block_create(C, NULL, NULL, NULL, ui_block_func_PIE, pie);
menu->popup = true;
More information about the Bf-blender-cvs
mailing list