|
@@ -235,11 +235,11 @@
|
|
|
- Mouse:
|
|
|
- PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
|
|
|
- Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard.
|
|
|
- - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavMoveMouse flag.
|
|
|
- Enabling ImGuiConfigFlags_NavMoveMouse instructs dear imgui to move your mouse cursor along with navigation movements.
|
|
|
- When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantMoveMouse' to notify you that it wants the mouse cursor to be moved.
|
|
|
+ - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag.
|
|
|
+ Enabling ImGuiConfigFlags_NavEnableSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements.
|
|
|
+ When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved.
|
|
|
When that happens your back-end NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the binding in examples/ do that.
|
|
|
- (If you set the NavMoveMouse flag but don't honor 'io.WantMoveMouse' properly, imgui will misbehave as it will see your mouse as moving back and forth!)
|
|
|
+ (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse as moving back and forth!)
|
|
|
(In a setup when you may not have easy control over the mouse cursor, e.g. uSynergy.c doesn't expose moving remote mouse cursor, you may want
|
|
|
to set a boolean to ignore your other external mouse positions until the external source is moved again.)
|
|
|
|
|
@@ -251,6 +251,7 @@
|
|
|
Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
|
|
|
Also read releases logs https://github.com/ocornut/imgui/releases for more details.
|
|
|
|
|
|
+ - 2018/03/20 (1.60) - Renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, _not_ used by core and only honored by some binding ahead of merging the Nav branch).
|
|
|
- 2018/03/12 (1.60) - Removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered as the closing cross uses regular button colors now.
|
|
|
- 2018/03/08 (1.60) - Changed ImFont::DisplayOffset.y to default to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. If you were adding or subtracting to ImFont::DisplayOffset check if your fonts are correctly aligned vertically.
|
|
|
- 2018/03/03 (1.60) - Renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums.
|
|
@@ -2009,7 +2010,7 @@ static void SetNavID(ImGuiID id, int nav_layer)
|
|
|
g.NavWindow->NavLastIds[nav_layer] = id;
|
|
|
}
|
|
|
|
|
|
-static void SetNavIDAndMoveMouse(ImGuiID id, int nav_layer, const ImRect& rect_rel)
|
|
|
+static void SetNavIDWithRectRel(ImGuiID id, int nav_layer, const ImRect& rect_rel)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
SetNavID(id, nav_layer);
|
|
@@ -2309,7 +2310,7 @@ static void NavRestoreLayer(int layer)
|
|
|
if (layer == 0)
|
|
|
g.NavWindow = NavRestoreLastChildNavWindow(g.NavWindow);
|
|
|
if (layer == 0 && g.NavWindow->NavLastIds[0] != 0)
|
|
|
- SetNavIDAndMoveMouse(g.NavWindow->NavLastIds[0], layer, g.NavWindow->NavRectRel[0]);
|
|
|
+ SetNavIDWithRectRel(g.NavWindow->NavLastIds[0], layer, g.NavWindow->NavRectRel[0]);
|
|
|
else
|
|
|
ImGui::NavInitWindow(g.NavWindow, true);
|
|
|
}
|
|
@@ -2951,7 +2952,7 @@ static void NavScrollToBringItemIntoView(ImGuiWindow* window, ImRect& item_rect_
|
|
|
static void ImGui::NavUpdate()
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
- g.IO.WantMoveMouse = false;
|
|
|
+ g.IO.WantSetMousePos = false;
|
|
|
|
|
|
#if 0
|
|
|
if (g.NavScoringCount > 0) printf("[%05d] NavScoringCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.FrameCount, g.NavScoringCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
|
|
@@ -2988,7 +2989,7 @@ static void ImGui::NavUpdate()
|
|
|
// Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
|
|
|
IM_ASSERT(g.NavWindow);
|
|
|
if (g.NavInitRequestFromMove)
|
|
|
- SetNavIDAndMoveMouse(g.NavInitResultId, g.NavLayer, g.NavInitResultRectRel);
|
|
|
+ SetNavIDWithRectRel(g.NavInitResultId, g.NavLayer, g.NavInitResultRectRel);
|
|
|
else
|
|
|
SetNavID(g.NavInitResultId, g.NavLayer);
|
|
|
g.NavWindow->NavRectRel[g.NavLayer] = g.NavInitResultRectRel;
|
|
@@ -3016,7 +3017,7 @@ static void ImGui::NavUpdate()
|
|
|
// Apply result from previous frame navigation directional move request
|
|
|
ClearActiveID();
|
|
|
g.NavWindow = result->Window;
|
|
|
- SetNavIDAndMoveMouse(result->ID, g.NavLayer, result->RectRel);
|
|
|
+ SetNavIDWithRectRel(result->ID, g.NavLayer, result->RectRel);
|
|
|
g.NavJustMovedToId = result->ID;
|
|
|
g.NavMoveFromClampedRefRect = false;
|
|
|
}
|
|
@@ -3034,10 +3035,10 @@ static void ImGui::NavUpdate()
|
|
|
if (g.NavMousePosDirty && g.NavIdIsAlive)
|
|
|
{
|
|
|
// Set mouse position given our knowledge of the nav widget position from last frame
|
|
|
- if (g.IO.ConfigFlags & ImGuiConfigFlags_NavMoveMouse)
|
|
|
+ if (g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos)
|
|
|
{
|
|
|
g.IO.MousePos = g.IO.MousePosPrev = NavCalcPreferredMousePos();
|
|
|
- g.IO.WantMoveMouse = true;
|
|
|
+ g.IO.WantSetMousePos = true;
|
|
|
}
|
|
|
g.NavMousePosDirty = false;
|
|
|
}
|
|
@@ -5836,7 +5837,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
float sc = g.Style.MouseCursorScale;
|
|
|
ImVec2 ref_pos = (!g.NavDisableHighlight && g.NavDisableMouseHover) ? NavCalcPreferredMousePos() : g.IO.MousePos;
|
|
|
ImRect rect_to_avoid;
|
|
|
- if (!g.NavDisableHighlight && g.NavDisableMouseHover && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavMoveMouse))
|
|
|
+ if (!g.NavDisableHighlight && g.NavDisableMouseHover && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos))
|
|
|
rect_to_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 16, ref_pos.y + 8);
|
|
|
else
|
|
|
rect_to_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 24 * sc, ref_pos.y + 24 * sc); // FIXME: Hard-coded based on mouse cursor shape expectation. Exact dimension not very important.
|
|
@@ -11112,7 +11113,7 @@ void ImGui::EndMenuBar()
|
|
|
// This involve a one-frame delay which isn't very problematic in this situation. We could remove it by scoring in advance for multiple window (probably not worth the hassle/cost)
|
|
|
IM_ASSERT(window->DC.NavLayerActiveMaskNext & 0x02); // Sanity check
|
|
|
FocusWindow(window);
|
|
|
- SetNavIDAndMoveMouse(window->NavLastIds[1], 1, window->NavRectRel[1]);
|
|
|
+ SetNavIDWithRectRel(window->NavLastIds[1], 1, window->NavRectRel[1]);
|
|
|
g.NavLayer = 1;
|
|
|
g.NavDisableHighlight = true; // Hide highlight for the current frame so we don't see the intermediary selection.
|
|
|
g.NavMoveRequestForward = ImGuiNavForward_ForwardQueued;
|