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:
authorCampbell Barton <ideasman42@gmail.com>2018-09-06 07:19:15 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-09-06 07:19:15 +0300
commit26c17b0ab12d90ecbee8bc3a1188215ed3c30ddd (patch)
treec4f8aa9f61fefab9daee98fcd68ba30995eb513a /source/blender/windowmanager
parent59572cbbc454e6439c7a1fdcb4982697d24371e2 (diff)
UI: delay tool label tip display
Displaying the labels tip immediately feels too intrusive, make this work more like regular tooltips, displaying more quickly. Tooltips can now uses multiple passes, each pass with it's own delay for the next pass to show.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h7
-rw-r--r--source/blender/windowmanager/WM_types.h6
-rw-r--r--source/blender/windowmanager/gizmo/WM_gizmo_api.h2
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c2
-rw-r--r--source/blender/windowmanager/intern/wm_tooltip.c24
5 files changed, 32 insertions, 9 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 62afc4ab710..4a48aec2d68 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -624,11 +624,16 @@ bool WM_window_modal_keymap_status_draw(
struct uiLayout *layout);
/* wm_tooltip.c */
-typedef struct ARegion *(*wmTooltipInitFn)(struct bContext *, struct ARegion *, bool *);
+typedef struct ARegion *(*wmTooltipInitFn)(
+ struct bContext *C, struct ARegion *ar,
+ int *pass, double *r_pass_delay, bool *r_exit_on_event);
void WM_tooltip_immediate_init(
struct bContext *C, struct wmWindow *win, struct ARegion *ar,
wmTooltipInitFn init);
+void WM_tooltip_timer_init_ex(
+ struct bContext *C, struct wmWindow *win, struct ARegion *ar,
+ wmTooltipInitFn init, double delay);
void WM_tooltip_timer_init(
struct bContext *C, struct wmWindow *win, struct ARegion *ar,
wmTooltipInitFn init);
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 4882741680a..0036ae7834d 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -718,9 +718,13 @@ typedef struct wmTooltipState {
/** The tooltip region. */
struct ARegion *region;
/** Create the tooltip region (assign to 'region'). */
- struct ARegion *(*init)(struct bContext *, struct ARegion *, bool *r_exit_on_event);
+ struct ARegion *(*init)(
+ struct bContext *C, struct ARegion *ar,
+ int *pass, double *pass_delay, bool *r_exit_on_event);
/** Exit on any event, not needed for buttons since their highlight state is used. */
bool exit_on_event;
+ /** Pass, use when we want multiple tips, count down to zero. */
+ int pass;
} wmTooltipState;
/* *************** migrated stuff, clean later? ************** */
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
index b59bdd4cf63..b2a8719d5f0 100644
--- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h
+++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
@@ -267,7 +267,7 @@ bool WM_gizmomap_minmax(
float r_min[3], float r_max[3]);
struct ARegion *WM_gizmomap_tooltip_init(
- struct bContext *C, struct ARegion *ar, bool *r_exit_on_event);
+ struct bContext *C, struct ARegion *ar, int *pass, double *pass_delay, bool *r_exit_on_event);
/* -------------------------------------------------------------------- */
/* wmGizmoMapType */
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index 2c0d0ff34a7..6100905d5cf 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -1056,7 +1056,7 @@ void WM_gizmomap_message_subscribe(
* \{ */
struct ARegion *WM_gizmomap_tooltip_init(
- struct bContext *C, struct ARegion *ar, bool *r_exit_on_event)
+ struct bContext *C, struct ARegion *ar, int *UNUSED(r_pass), double *UNUSED(pass_delay), bool *r_exit_on_event)
{
wmGizmoMap *gzmap = ar->gizmo_map;
*r_exit_on_event = true;
diff --git a/source/blender/windowmanager/intern/wm_tooltip.c b/source/blender/windowmanager/intern/wm_tooltip.c
index 58c657bf116..dcf51c1d015 100644
--- a/source/blender/windowmanager/intern/wm_tooltip.c
+++ b/source/blender/windowmanager/intern/wm_tooltip.c
@@ -52,9 +52,9 @@ void WM_tooltip_immediate_init(
WM_tooltip_init(C, win);
}
-void WM_tooltip_timer_init(
+void WM_tooltip_timer_init_ex(
bContext *C, wmWindow *win, ARegion *ar,
- wmTooltipInitFn init)
+ wmTooltipInitFn init, double delay)
{
WM_tooltip_timer_clear(C, win);
@@ -64,11 +64,17 @@ void WM_tooltip_timer_init(
screen->tool_tip = MEM_callocN(sizeof(*screen->tool_tip), __func__);
}
screen->tool_tip->region_from = ar;
- screen->tool_tip->timer = WM_event_add_timer(
- wm, win, TIMER, UI_TOOLTIP_DELAY);
+ screen->tool_tip->timer = WM_event_add_timer(wm, win, TIMER, delay);
screen->tool_tip->init = init;
}
+void WM_tooltip_timer_init(
+ bContext *C, wmWindow *win, ARegion *ar,
+ wmTooltipInitFn init)
+{
+ WM_tooltip_timer_init_ex(C, win, ar, init, UI_TOOLTIP_DELAY);
+}
+
void WM_tooltip_timer_clear(bContext *C, wmWindow *win)
{
wmWindowManager *wm = CTX_wm_manager(C);
@@ -103,8 +109,16 @@ void WM_tooltip_init(bContext *C, wmWindow *win)
UI_tooltip_free(C, screen, screen->tool_tip->region);
screen->tool_tip->region = NULL;
}
+ const int pass_prev = screen->tool_tip->pass;
+ double pass_delay = 0.0;
screen->tool_tip->region = screen->tool_tip->init(
- C, screen->tool_tip->region_from, &screen->tool_tip->exit_on_event);
+ C, screen->tool_tip->region_from,
+ &screen->tool_tip->pass, &pass_delay, &screen->tool_tip->exit_on_event);
+ if (pass_prev != screen->tool_tip->pass) {
+ /* The pass changed, add timer for next pass. */
+ wmWindowManager *wm = CTX_wm_manager(C);
+ screen->tool_tip->timer = WM_event_add_timer(wm, win, TIMER, pass_delay);
+ }
if (screen->tool_tip->region == NULL) {
WM_tooltip_clear(C, win);
}