Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2015-07-03 16:54:34 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2015-07-03 16:55:22 +0300
commit1ace3272aa4fbde703c975ddec4e1ccf31066da5 (patch)
treee448e20a584a8b3f626c5496df2ef64618473650 /source/blender/editors/space_view3d
parent9133f5a3571b9c8b05cfb6b04a09fd03fd439988 (diff)
Walk mode: Add modal shortcuts in UI (header help message).
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/view3d_walk.c70
1 files changed, 43 insertions, 27 deletions
diff --git a/source/blender/editors/space_view3d/view3d_walk.c b/source/blender/editors/space_view3d/view3d_walk.c
index 1d5c2a3a169..a5813528d75 100644
--- a/source/blender/editors/space_view3d/view3d_walk.c
+++ b/source/blender/editors/space_view3d/view3d_walk.c
@@ -52,6 +52,7 @@
#include "PIL_time.h" /* smoothview */
+#include "UI_interface.h"
#include "UI_resources.h"
#include "view3d_intern.h" /* own include */
@@ -345,27 +346,42 @@ static void drawWalkPixel(const struct bContext *UNUSED(C), ARegion *ar, void *a
glEnd();
}
-static void walk_update_header(bContext *C, WalkInfo *walk)
+static void walk_update_header(bContext *C, wmOperator *op, WalkInfo *walk)
{
- bool gravity = walk->navigation_mode == WALK_MODE_GRAVITY ||
- (walk->teleport.state == WALK_TELEPORT_STATE_ON &&
- walk->teleport.navigation_mode == WALK_MODE_GRAVITY);
-
-#define HEADER_LENGTH 256
- char header[HEADER_LENGTH];
-
- BLI_snprintf(header, HEADER_LENGTH, IFACE_("LMB/Return: confirm, Esc/RMB: cancel, "
- "Tab: gravity (%s), "
- "WASD: move around, "
- "Shift: fast, Alt: slow, "
- "QE: up and down, MMB/Space: teleport, V: jump, "
- "Pad +/Wheel Up: increase speed, Pad -/Wheel Down: decrease speed"),
- WM_bool_as_string(gravity));
+ const bool gravity = (walk->navigation_mode == WALK_MODE_GRAVITY) ||
+ ((walk->teleport.state == WALK_TELEPORT_STATE_ON) &&
+ (walk->teleport.navigation_mode == WALK_MODE_GRAVITY));
+ char header[UI_MAX_DRAW_STR];
+ char buf[UI_MAX_DRAW_STR];
+
+ char *p = buf;
+ int available_len = sizeof(buf);
+
+#define WM_MODALKEY(_id) \
+ WM_modalkeymap_operator_items_to_string_buf(op->type, (_id), true, UI_MAX_SHORTCUT_STR, &available_len, &p)
+
+ BLI_snprintf(header, sizeof(header), IFACE_("%s: confirm, %s: cancel, "
+ "%s: gravity (%s), "
+ "%s|%s|%s|%s: move around, "
+ "%s: fast, %s: slow, "
+ "%s|%s: up and down, "
+ "%s: teleport, %s: jump, "
+ "%s: increase speed, %s: decrease speed"),
+ WM_MODALKEY(WALK_MODAL_CONFIRM), WM_MODALKEY(WALK_MODAL_CANCEL),
+ WM_MODALKEY(WALK_MODAL_TOGGLE), WM_bool_as_string(gravity),
+ WM_MODALKEY(WALK_MODAL_DIR_FORWARD), WM_MODALKEY(WALK_MODAL_DIR_LEFT),
+ WM_MODALKEY(WALK_MODAL_DIR_BACKWARD), WM_MODALKEY(WALK_MODAL_DIR_RIGHT),
+ WM_MODALKEY(WALK_MODAL_FAST_ENABLE), WM_MODALKEY(WALK_MODAL_SLOW_ENABLE),
+ WM_MODALKEY(WALK_MODAL_DIR_UP), WM_MODALKEY(WALK_MODAL_DIR_DOWN),
+ WM_MODALKEY(WALK_MODAL_TELEPORT), WM_MODALKEY(WALK_MODAL_JUMP),
+ WM_MODALKEY(WALK_MODAL_ACCELERATE), WM_MODALKEY(WALK_MODAL_DECELERATE));
+
+#undef WM_MODALKEY
+
ED_area_headerprint(CTX_wm_area(C), header);
-#undef HEADER_LENGTH
}
-static void walk_navigation_mode_set(bContext *C, WalkInfo *walk, eWalkMethod mode)
+static void walk_navigation_mode_set(bContext *C, wmOperator *op, WalkInfo *walk, eWalkMethod mode)
{
if (mode == WALK_MODE_FREE) {
walk->navigation_mode = WALK_MODE_FREE;
@@ -376,7 +392,7 @@ static void walk_navigation_mode_set(bContext *C, WalkInfo *walk, eWalkMethod mo
walk->gravity_state = WALK_GRAVITY_STATE_START;
}
- walk_update_header(C, walk);
+ walk_update_header(C, op, walk);
}
/**
@@ -510,9 +526,9 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
walk->mouse_speed = U.walk_navigation.mouse_speed;
if ((U.walk_navigation.flag & USER_WALK_GRAVITY))
- walk_navigation_mode_set(C, walk, WALK_MODE_GRAVITY);
+ walk_navigation_mode_set(C, op, walk, WALK_MODE_GRAVITY);
else
- walk_navigation_mode_set(C, walk, WALK_MODE_FREE);
+ walk_navigation_mode_set(C, op, walk, WALK_MODE_FREE);
walk->view_height = U.walk_navigation.view_height;
walk->jump_height = U.walk_navigation.jump_height;
@@ -633,7 +649,7 @@ static bool wm_event_is_last_mousemove(const wmEvent *event)
return true;
}
-static void walkEvent(bContext *C, wmOperator *UNUSED(op), WalkInfo *walk, const wmEvent *event)
+static void walkEvent(bContext *C, wmOperator *op, WalkInfo *walk, const wmEvent *event)
{
if (event->type == TIMER && event->customdata == walk->timer) {
walk->redraw = true;
@@ -869,7 +885,7 @@ static void walkEvent(bContext *C, wmOperator *UNUSED(op), WalkInfo *walk, const
teleport->duration = U.walk_navigation.teleport_time;
teleport->navigation_mode = walk->navigation_mode;
- walk_navigation_mode_set(C, walk, WALK_MODE_FREE);
+ walk_navigation_mode_set(C, op, walk, WALK_MODE_FREE);
copy_v3_v3(teleport->origin, walk->rv3d->viewinv[3]);
@@ -892,10 +908,10 @@ static void walkEvent(bContext *C, wmOperator *UNUSED(op), WalkInfo *walk, const
case WALK_MODAL_TOGGLE:
if (walk->navigation_mode == WALK_MODE_GRAVITY) {
- walk_navigation_mode_set(C, walk, WALK_MODE_FREE);
+ walk_navigation_mode_set(C, op, walk, WALK_MODE_FREE);
}
else { /* WALK_MODE_FREE */
- walk_navigation_mode_set(C, walk, WALK_MODE_GRAVITY);
+ walk_navigation_mode_set(C, op, walk, WALK_MODE_GRAVITY);
}
break;
}
@@ -918,7 +934,7 @@ static float getVelocityZeroTime(const float gravity, const float velocity)
return velocity / gravity;
}
-static int walkApply(bContext *C, WalkInfo *walk)
+static int walkApply(bContext *C, wmOperator *op, WalkInfo *walk)
{
#define WALK_ROTATE_FAC 2.2f /* more is faster */
#define WALK_TOP_LIMIT DEG2RADF(85.0f)
@@ -1231,7 +1247,7 @@ static int walkApply(bContext *C, WalkInfo *walk)
if (t >= 1.0f) {
t = 1.0f;
walk->teleport.state = WALK_TELEPORT_STATE_OFF;
- walk_navigation_mode_set(C, walk, walk->teleport.navigation_mode);
+ walk_navigation_mode_set(C, op, walk, walk->teleport.navigation_mode);
}
mul_v3_v3fl(new_loc, walk->teleport.direction, t);
@@ -1348,7 +1364,7 @@ static int walk_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
}
else if (event->type == TIMER && event->customdata == walk->timer) {
- walkApply(C, walk);
+ walkApply(C, op, walk);
}
do_draw |= walk->redraw;