[Bf-blender-cvs] [e4bc3ba] HMD_viewport: Use modal handler for HMD session
Julian Eisel
noreply at git.blender.org
Wed Mar 16 16:10:58 CET 2016
Commit: e4bc3bac37dab7ec1bb60e61b04c3629cf9dd837
Author: Julian Eisel
Date: Fri Mar 11 03:05:14 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rBe4bc3bac37dab7ec1bb60e61b04c3629cf9dd837
Use modal handler for HMD session
Also some cleanup.
===================================================================
M source/blender/editors/interface/interface_handlers.c
M source/blender/editors/space_view3d/view3d_edit.c
M source/blender/editors/space_view3d/view3d_intern.h
M source/blender/editors/space_view3d/view3d_ops.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_operators.c
M source/blender/windowmanager/intern/wm_window.c
M source/blender/windowmanager/wm_event_types.h
===================================================================
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 671b9a7..89f718b 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -9836,16 +9836,6 @@ static int ui_region_handler(bContext *C, const wmEvent *event, void *UNUSED(use
/* delayed apply callbacks */
ui_apply_but_funcs_after(C);
- if (event->type == EVT_VR_TRANSFORM) {
- float* trans = event->customdata;
-/*
- printf("Got EVT_VR_TRANSFORM event, transform is w x y z %f %f %f %f\n",
- trans[0],
- trans[1],
- trans[2],
- trans[3]);*/
- }
-
return retval;
}
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index ede051e..b882ffa 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4844,53 +4844,77 @@ void VIEW3D_OT_hmd_refresh(wmOperatorType *ot)
/* flags */
ot->flag = OPTYPE_INTERNAL;
}
+static void hmd_run_exit(wmWindow *win, Scene *scene)
+{
+ scene->flag &= ~SCE_HMD_RUNNING;
+ WM_window_fullscreen_toggle(win, false, true);
+}
-static int hmd_refresh_exec(bContext *C, wmOperator *op)
+static int hmd_session_run_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
- wmWindowManager *wm = CTX_wm_manager(C);
- wmWindow *win;
+ wmWindow *win = op->customdata;
Scene *scene = CTX_data_scene(C);
- for (win = wm->windows.first; win; win = win->next) {
- if (win->screen->flag & SCREEN_FLAG_HMD_SCREEN) {
- break;
+ switch (event->type) {
+ case EVT_HMD_TRANSFORM:
+ {
+ if ((scene->r.scemode & R_HMD_IGNORE_ROT) == 0) {
+ View3D *v3d = CTX_wm_view3d(C);
+ Object *camera_ob = v3d ? v3d->camera : scene->camera;
+ HMDData *data = event->customdata;
+ static float quad[4] = {M_SQRT1_2, M_SQRT1_2, 0.0f, 0.0f};
+
+ mul_qt_qtqt(camera_ob->quat, quad, data->orientation);
+ normalize_qt(camera_ob->quat);
+ loc_quat_size_to_mat4(camera_ob->obmat, camera_ob->loc, camera_ob->quat, camera_ob->size);
+
+ DAG_id_tag_update(&camera_ob->id, 0); /* sets recalc flags */
+ ED_region_tag_redraw(CTX_wm_region(C));
+ }
+ return OPERATOR_RUNNING_MODAL;
}
+ case ESCKEY:
+ hmd_run_exit(win, scene);
+ return OPERATOR_FINISHED;
}
- /* Sanity */
- if (!win)
- return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
- wmWindow *winstore = CTX_wm_window(C);
- ScrArea *sastore = CTX_wm_area(C);
- ARegion *arstore = CTX_wm_region(C);
- CTX_wm_window_set(C, win);
- CTX_wm_area_set(C, win->screen->areabase.first);
- CTX_wm_region_set(C, BKE_area_find_region_type(win->screen->areabase.first, RGN_TYPE_WINDOW));
- WM_operator_name_call(C, "WM_OT_window_fullscreen_toggle", WM_OP_EXEC_DEFAULT, NULL);
- View3D *v3d = CTX_wm_view3d(C);
- RegionView3D *rv3d = CTX_wm_region_view3d(C);
- const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
-
- if ((rv3d->viewlock & RV3D_LOCKED) == 0) {
- if (rv3d->persp != RV3D_CAMOB) {
- Object *ob = OBACT;
+ return OPERATOR_PASS_THROUGH;
+}
- if (!rv3d->smooth_timer) {
- /* store settings of current view before allowing overwriting with camera view
- * only if we're not currently in a view transition */
-
- ED_view3d_lastview_store(rv3d);
- }
+static int hmd_session_run_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ Scene *scene = CTX_data_scene(C);
+ wmWindow *win = CTX_wm_window(C);
+ const bool was_hmd_running = (scene->flag & SCE_HMD_RUNNING);
-#if 0
- if (G.qual == LR_ALTKEY) {
- if (oldcamera && is_an_active_object(oldcamera)) {
- v3d->camera = oldcamera;
- }
- handle_view3d_lock();
+ if (!win->screen->flag & SCREEN_FLAG_HMD_SCREEN) {
+ wmWindowManager *wm = CTX_wm_manager(C);
+ for (win = wm->windows.first; win; win = win->next) {
+ if (win->screen->flag & SCREEN_FLAG_HMD_SCREEN) {
+ break;
}
-#endif
-
+ }
+ }
+ if (!win) {
+ BLI_assert(0);
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
+
+ scene->flag ^= SCE_HMD_RUNNING;
+ if (was_hmd_running) {
+ WM_window_fullscreen_toggle(win, false, true);
+ BLI_assert(0);
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
+ else {
+ ScrArea *sa = win->screen->areabase.first;
+ ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
+ View3D *v3d = sa->spacedata.first;
+ RegionView3D *rv3d = ar->regiondata;
+ BLI_assert(sa->spacetype = SPACE_VIEW3D);
+
+ if (rv3d->persp != RV3D_CAMOB) {
+ Object *ob = OBACT;
/* first get the default camera for the view lock type */
if (v3d->scenelock) {
/* sets the camera view if available */
@@ -4902,47 +4926,32 @@ static int hmd_refresh_exec(bContext *C, wmOperator *op)
v3d->camera = scene->camera;
}
}
-
/* if the camera isn't found, check a number of options */
if (v3d->camera == NULL && ob && ob->type == OB_CAMERA)
v3d->camera = ob;
-
if (v3d->camera == NULL)
v3d->camera = BKE_scene_camera_find(scene);
-
- /* couldnt find any useful camera, bail out */
- if (v3d->camera == NULL)
- return OPERATOR_CANCELLED;
-
- /* important these don't get out of sync for locked scenes */
- if (v3d->scenelock)
- scene->camera = v3d->camera;
-
- /* finally do snazzy view zooming */
- rv3d->persp = RV3D_CAMOB;
- ED_view3d_smooth_view(
- C, v3d, CTX_wm_region(C), smooth_viewtx,
- &(const V3D_SmoothParams) {
- .camera = v3d->camera, .ofs = rv3d->ofs, .quat = rv3d->viewquat,
- .dist = &rv3d->dist, .lens = &v3d->lens});
+ if (v3d->camera)
+ rv3d->persp = RV3D_CAMOB;
}
+
+ op->customdata = win;
+ WM_window_fullscreen_toggle(win, true, false);
+ WM_event_add_modal_handler(C, op);
+ return OPERATOR_RUNNING_MODAL;
}
- CTX_wm_region_set(C, arstore);
- CTX_wm_area_set(C, sastore);
- CTX_wm_window_set(C, winstore);
- scene->flag ^= SCE_HMD_RUNNING;
- return OPERATOR_FINISHED;
}
-void VIEW3D_OT_hmd_run(wmOperatorType *ot)
+void VIEW3D_OT_hmd_session_run(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Run HMD Session";
ot->description = "Start/Stop a head mounted display (virtual reality) session";
- ot->idname = "VIEW3D_OT_hmd_run";
+ ot->idname = "VIEW3D_OT_hmd_session_run";
/* api callbacks */
- ot->exec = hmd_refresh_exec;
+ ot->invoke = hmd_session_run_invoke;
+ ot->modal = hmd_session_run_modal;
/* flags */
ot->flag = OPTYPE_INTERNAL;
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index f00a111..e6f9904 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -103,8 +103,7 @@ void VIEW3D_OT_enable_manipulator(struct wmOperatorType *ot);
void VIEW3D_OT_render_border(struct wmOperatorType *ot);
void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot);
void VIEW3D_OT_zoom_border(struct wmOperatorType *ot);
-void VIEW3D_OT_hmd_refresh(struct wmOperatorType *ot);
-void VIEW3D_OT_hmd_run(struct wmOperatorType *ot);
+void VIEW3D_OT_hmd_session_run(struct wmOperatorType *ot);
void view3d_boxview_copy(ScrArea *sa, ARegion *ar);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index a5d9212..6dc4894 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -218,8 +218,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_center);
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected);
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active);
- WM_operatortype_append(VIEW3D_OT_hmd_refresh);
- WM_operatortype_append(VIEW3D_OT_hmd_run);
+ WM_operatortype_append(VIEW3D_OT_hmd_session_run);
transform_operatortypes();
}
@@ -506,8 +505,6 @@ void view3d_keymap(wmKeyConfig *keyconf)
WM_keymap_add_menu(keymap, "VIEW3D_MT_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
- WM_keymap_add_item(keymap, "VIEW3D_OT_hmd_refresh", EVT_VR_TRANSFORM, KM_ANY, KM_ANY, 0);
-
#ifdef __APPLE__
WM_keymap_add_item(keymap, "VIEW3D_OT_copybuffer", CKEY, KM_PRESS, KM_OSKEY, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_pastebuffer", VKEY, KM_PRESS, KM_OSKEY, 0);
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index eba411b..8386ce2 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -100,7 +100,9 @@ enum {
struct wmWindow *WM_window_open(struct bContext *C, const struct rcti *rect);
struct wmWindow *WM_window_open_temp(struct bContext *C, const struct rcti *rect_init, int type);
-
+
+void WM_window_fullscreen_toggle(const struct wmWindow *win, const bool force_full, const bool force_normal);
+
/* returns true if draw method is triple buffer */
bool WM_is_draw_triple(struct wmWindow *win);
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 906f9b2..60ec983 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3504,7 +3504,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
{
GHOST_TEventOpenHMDData *e = customdata;
- event.type = EVT_VR_TRANSFORM;
+ event.type = EVT_HMD_TRANSFORM;
event.customdata = e->orientation;
wm_event_add(win, &event);
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index e7bbb5b..b96dfc3 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -5097,7 +5097,7 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
-static int wm_md_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
+static int wm_hmd_view_open_invoke(bContext *C, wmOperator *UNUSED
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list