mirror of
https://github.com/ocornut/imgui.git
synced 2025-02-02 12:37:20 +01:00
parent
d17e9fc107
commit
fdca6c08ad
@ -51,6 +51,12 @@ Other changes:
|
|||||||
snapped to pixels. Effectively it would only be noticeable when hinting
|
snapped to pixels. Effectively it would only be noticeable when hinting
|
||||||
is disabled with ImGuiFreeTypeBuilderFlags_NoHinting, as hinting itself
|
is disabled with ImGuiFreeTypeBuilderFlags_NoHinting, as hinting itself
|
||||||
snaps glyph advances.
|
snaps glyph advances.
|
||||||
|
- Inputs: added IsMouseReleasedWithDelay() helper. (#8337, #8320)
|
||||||
|
Use if you absolutely need to distinguish single-click from double-clicks
|
||||||
|
by introducing a delay. This is a very rarely used UI idiom, but some apps
|
||||||
|
use this: e.g. MS Explorer single-click on an icon triggers a rename.
|
||||||
|
Generally use with 'delay >= io.MouseDoubleClickTime' + combine with a
|
||||||
|
'io.MouseClickedLastCount == 1' check.
|
||||||
- Windows: legacy SetWindowFontScale() is properly inherited by nested child
|
- Windows: legacy SetWindowFontScale() is properly inherited by nested child
|
||||||
windows. Note that an upcoming major release should make this obsolete,
|
windows. Note that an upcoming major release should make this obsolete,
|
||||||
but in the meanwhile it works better now. (#2701, #8138, #1018)
|
but in the meanwhile it works better now. (#2701, #8138, #1018)
|
||||||
|
13
imgui.cpp
13
imgui.cpp
@ -9210,6 +9210,17 @@ bool ImGui::IsMouseReleased(ImGuiMouseButton button, ImGuiID owner_id)
|
|||||||
return g.IO.MouseReleased[button] && TestKeyOwner(MouseButtonToKey(button), owner_id); // Should be same as IsKeyReleased(MouseButtonToKey(button), owner_id)
|
return g.IO.MouseReleased[button] && TestKeyOwner(MouseButtonToKey(button), owner_id); // Should be same as IsKeyReleased(MouseButtonToKey(button), owner_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use if you absolutely need to distinguish single-click from double-click by introducing a delay.
|
||||||
|
// Generally use with 'delay >= io.MouseDoubleClickTime' + combined with a 'io.MouseClickedLastCount == 1' test.
|
||||||
|
// This is a very rarely used UI idiom, but some apps use this: e.g. MS Explorer single click on an icon to rename.
|
||||||
|
bool ImGui::IsMouseReleasedWithDelay(ImGuiMouseButton button, float delay)
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
|
||||||
|
const float time_since_release = (float)(g.Time - g.IO.MouseReleasedTime[button]);
|
||||||
|
return !IsMouseDown(button) && (time_since_release - g.IO.DeltaTime < delay) && (time_since_release >= delay);
|
||||||
|
}
|
||||||
|
|
||||||
bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button)
|
bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -9483,6 +9494,8 @@ static void ImGui::UpdateMouseInputs()
|
|||||||
io.MouseClicked[i] = io.MouseDown[i] && io.MouseDownDuration[i] < 0.0f;
|
io.MouseClicked[i] = io.MouseDown[i] && io.MouseDownDuration[i] < 0.0f;
|
||||||
io.MouseClickedCount[i] = 0; // Will be filled below
|
io.MouseClickedCount[i] = 0; // Will be filled below
|
||||||
io.MouseReleased[i] = !io.MouseDown[i] && io.MouseDownDuration[i] >= 0.0f;
|
io.MouseReleased[i] = !io.MouseDown[i] && io.MouseDownDuration[i] >= 0.0f;
|
||||||
|
if (io.MouseReleased[i])
|
||||||
|
io.MouseReleasedTime[i] = g.Time;
|
||||||
io.MouseDownDurationPrev[i] = io.MouseDownDuration[i];
|
io.MouseDownDurationPrev[i] = io.MouseDownDuration[i];
|
||||||
io.MouseDownDuration[i] = io.MouseDown[i] ? (io.MouseDownDuration[i] < 0.0f ? 0.0f : io.MouseDownDuration[i] + io.DeltaTime) : -1.0f;
|
io.MouseDownDuration[i] = io.MouseDown[i] ? (io.MouseDownDuration[i] < 0.0f ? 0.0f : io.MouseDownDuration[i] + io.DeltaTime) : -1.0f;
|
||||||
if (io.MouseClicked[i])
|
if (io.MouseClicked[i])
|
||||||
|
2
imgui.h
2
imgui.h
@ -1011,6 +1011,7 @@ namespace ImGui
|
|||||||
IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down). Same as GetMouseClickedCount() == 1.
|
IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down). Same as GetMouseClickedCount() == 1.
|
||||||
IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse button released? (went from Down to !Down)
|
IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse button released? (went from Down to !Down)
|
||||||
IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? Same as GetMouseClickedCount() == 2. (note that a double-click will also report IsMouseClicked() == true)
|
IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? Same as GetMouseClickedCount() == 2. (note that a double-click will also report IsMouseClicked() == true)
|
||||||
|
IMGUI_API bool IsMouseReleasedWithDelay(ImGuiMouseButton button, float delay); // delayed mouse release (use very sparingly!). Generally used with 'delay >= io.MouseDoubleClickTime' + combined with a 'io.MouseClickedLastCount==1' test. This is a very rarely used UI idiom, but some apps use this: e.g. MS Explorer single click on an icon to rename.
|
||||||
IMGUI_API int GetMouseClickedCount(ImGuiMouseButton button); // return the number of successive mouse-clicks at the time where a click happen (otherwise 0).
|
IMGUI_API int GetMouseClickedCount(ImGuiMouseButton button); // return the number of successive mouse-clicks at the time where a click happen (otherwise 0).
|
||||||
IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
|
IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
|
||||||
IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available
|
IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available
|
||||||
@ -2405,6 +2406,7 @@ struct ImGuiIO
|
|||||||
ImU16 MouseClickedCount[5]; // == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down
|
ImU16 MouseClickedCount[5]; // == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down
|
||||||
ImU16 MouseClickedLastCount[5]; // Count successive number of clicks. Stays valid after mouse release. Reset after another click is done.
|
ImU16 MouseClickedLastCount[5]; // Count successive number of clicks. Stays valid after mouse release. Reset after another click is done.
|
||||||
bool MouseReleased[5]; // Mouse button went from Down to !Down
|
bool MouseReleased[5]; // Mouse button went from Down to !Down
|
||||||
|
double MouseReleasedTime[5]; // Time of last released (rarely used! but useful to handle delayed single-click when trying to disambiguate them from double-click).
|
||||||
bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
|
bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
|
||||||
bool MouseDownOwnedUnlessPopupClose[5]; // Track if button was clicked inside a dear imgui window.
|
bool MouseDownOwnedUnlessPopupClose[5]; // Track if button was clicked inside a dear imgui window.
|
||||||
bool MouseWheelRequestAxisSwap; // On a non-Mac system, holding SHIFT requests WheelY to perform the equivalent of a WheelX event. On a Mac system this is already enforced by the system.
|
bool MouseWheelRequestAxisSwap; // On a non-Mac system, holding SHIFT requests WheelY to perform the equivalent of a WheelX event. On a Mac system this is already enforced by the system.
|
||||||
|
@ -7407,6 +7407,8 @@ static void ShowDemoWindowInputs()
|
|||||||
ImGui::Text("Mouse down:");
|
ImGui::Text("Mouse down:");
|
||||||
for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDown(i)) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
|
for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (ImGui::IsMouseDown(i)) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
|
||||||
ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
|
ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
|
||||||
|
ImGui::Text("Mouse clicked count:");
|
||||||
|
for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) if (io.MouseClickedCount[i] > 0) { ImGui::SameLine(); ImGui::Text("b%d: %d", i, io.MouseClickedCount[i]); }
|
||||||
|
|
||||||
// We iterate both legacy native range and named ImGuiKey ranges. This is a little unusual/odd but this allows
|
// We iterate both legacy native range and named ImGuiKey ranges. This is a little unusual/odd but this allows
|
||||||
// displaying the data for old/new backends.
|
// displaying the data for old/new backends.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user