diff --git a/imgui.cpp b/imgui.cpp index f48eaa91..6db14ae6 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -2149,7 +2149,7 @@ static bool NavScoreItem(ImRect cand) // FIXME-NAVIGATION: Introducing biases for vertical navigation, needs to be removed. float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x); float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items - if (dby && dbx) + if (dby != 0.0f && dbx != 0.0f) dbx = (dbx/1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f); float dist_box = fabsf(dbx) + fabsf(dby); @@ -2161,7 +2161,7 @@ static bool NavScoreItem(ImRect cand) // Determine which quadrant of 'curr' our candidate item 'cand' lies in based on distance ImGuiDir quadrant; float dax = 0.0f, day = 0.0f, dist_axial = 0.0f; - if (dbx || dby) + if (dbx != 0.0f || dby != 0.0f) { // For non-overlapping boxes, use distance between boxes dax = dbx; @@ -2169,7 +2169,7 @@ static bool NavScoreItem(ImRect cand) dist_axial = dist_box; quadrant = NavScoreItemGetQuadrant(dbx, dby); } - else if (dcx || dcy) + else if (dcx != 0.0f || dcy != 0.0f) { // For overlapping boxes with different centers, use distance between centers dax = dcx; @@ -2232,7 +2232,10 @@ static bool NavScoreItem(ImRect cand) if (g.NavMoveResultDistBox == FLT_MAX && dist_axial < g.NavMoveResultDistAxial) // Check axial match if (g.NavLayer == 1 && !(g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu)) if ((g.NavMoveDir == ImGuiDir_Left && dax < 0.0f) || (g.NavMoveDir == ImGuiDir_Right && dax > 0.0f) || (g.NavMoveDir == ImGuiDir_Up && day < 0.0f) || (g.NavMoveDir == ImGuiDir_Down && day > 0.0f)) - g.NavMoveResultDistAxial = dist_axial, new_best = true; + { + g.NavMoveResultDistAxial = dist_axial; + new_best = true; + } return new_best; } @@ -8329,7 +8332,8 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v else if (g.ActiveIdSource == ImGuiInputSource_Nav && g.NavActivateDownId == id) { const ImVec2 delta2 = GetNavInputAmount2d(0, ImGuiNavReadMode_RepeatFast, 0.0f, 0.0f); - if (float delta = is_horizontal ? delta2.x : -delta2.y) + float delta = is_horizontal ? delta2.x : -delta2.y; + if (delta != 0.0f) { clicked_t = SliderBehaviorCalcRatioFromValue(*v, v_min, v_max, power, linear_zero_pos); if (decimal_precision == 0 && !is_non_linear)