浏览代码

Fixed repeating button behavior triggering twice, typically affect the +/- of InputInt/InputFloat and user repeating buttons (#656)

+ Took note of further work
Broken in 547f34cf22640526b63f02f50c73ef9409e8acab
ocornut 9 年之前
父节点
当前提交
e1e2752dcb
共有 1 个文件被更改,包括 5 次插入1 次删除
  1. 5 1
      imgui.cpp

+ 5 - 1
imgui.cpp

@@ -5357,7 +5357,11 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
                 pressed = true;
                 SetActiveID(0);
             }
-            if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && ImGui::IsMouseClicked(0, true))
+
+            // 'Repeat' mode acts when held regardless of _PressedOn flags
+            // FIXME: Need to clarify the repeat behavior with those differents flags. Currently the typical PressedOnClickRelease+Repeat will add an extra click on final release (hardly noticeable with repeat rate, but technically an issue)
+            // Relies on repeat behavior of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings.
+            if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && g.IO.MouseDownDuration[0] > 0.0f && ImGui::IsMouseClicked(0, true))
                 pressed = true;
         }
     }