mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-21 07:16:34 +00:00
Merge branch 'master' into viewport
# Conflicts: # imgui.cpp
This commit is contained in:
commit
33b88a0339
@ -49,11 +49,16 @@ Other Changes:
|
|||||||
erroneously wrapped the value to one of the min/max edge. (#2024, #708, #320, #2075).
|
erroneously wrapped the value to one of the min/max edge. (#2024, #708, #320, #2075).
|
||||||
- DragFloat: Disabled using power curve when one edge is FLT_MAX (broken in 1.61). (#2024)
|
- DragFloat: Disabled using power curve when one edge is FLT_MAX (broken in 1.61). (#2024)
|
||||||
- DragFloat: Disabled setting a default drag speed when one edge is FLT_MAX. (#2024)
|
- DragFloat: Disabled setting a default drag speed when one edge is FLT_MAX. (#2024)
|
||||||
|
- Window: Resizing from edges (with io.ConfigResizeWindowsFromEdges Beta flag) extends the hit region
|
||||||
|
of root floating windows outside the window, making it easier to resize windows. Resize grips are also
|
||||||
|
extended accordingly so there are no discontinuity when hovering between borders and corners. (#1495, #822)
|
||||||
|
- Window, Inputs: Fixed resizing from edges when io.MousePos is not pixel-rounded by rounding mouse position input. (#2110)
|
||||||
- BeginChild(): Fixed BeginChild(const char*, ...) variation erroneously not applying the ID stack
|
- BeginChild(): Fixed BeginChild(const char*, ...) variation erroneously not applying the ID stack
|
||||||
to the provided string to uniquely identify the child window. This was undoing an intentional change
|
to the provided string to uniquely identify the child window. This was undoing an intentional change
|
||||||
introduced in 1.50 and broken in 1.60. (#1698, #894, #713).
|
introduced in 1.50 and broken in 1.60. (#1698, #894, #713).
|
||||||
- BeginMenu(): Fixed menu popup horizontal offset being off the item in the menu bar when WindowPadding=0.0f.
|
- BeginMenu(): Fixed menu popup horizontal offset being off the item in the menu bar when WindowPadding=0.0f.
|
||||||
- ArrowButton(): Fixed arrow shape being horizontally misaligned by (FramePadding.y-FramePadding.x) if they are different.
|
- ArrowButton(): Fixed arrow shape being horizontally misaligned by (FramePadding.y-FramePadding.x) if they are different.
|
||||||
|
- Drag and Drop: Added GetDragDropPayload() to peek directly into the payload (if any) from anywhere. (#143)
|
||||||
- ImDrawList: Fixed AddConvexPolyFilled() undefined behavior when passing points_count smaller than 3,
|
- ImDrawList: Fixed AddConvexPolyFilled() undefined behavior when passing points_count smaller than 3,
|
||||||
in particular, points_count==0 could lead to a memory stomp if the draw list was previously empty.
|
in particular, points_count==0 could lead to a memory stomp if the draw list was previously empty.
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ Dear ImGui is self-contained within a few files that you can easily copy and com
|
|||||||
- imgui_widgets.cpp
|
- imgui_widgets.cpp
|
||||||
- imgui_internal.h
|
- imgui_internal.h
|
||||||
- imconfig.h (empty by default, user-editable)
|
- imconfig.h (empty by default, user-editable)
|
||||||
- imstb_rect_pack.h
|
- imstb_rectpack.h
|
||||||
- imstb_textedit.h
|
- imstb_textedit.h
|
||||||
- imstb_truetype.h
|
- imstb_truetype.h
|
||||||
|
|
||||||
|
83
imgui.cpp
83
imgui.cpp
@ -901,8 +901,12 @@ CODE
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
|
// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
|
||||||
static const float NAV_WINDOWING_HIGHLIGHT_DELAY = 0.20f; // Time before the highlight and screen dimming starts fading in
|
static const float NAV_WINDOWING_HIGHLIGHT_DELAY = 0.20f; // Time before the highlight and screen dimming starts fading in
|
||||||
static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear
|
static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear
|
||||||
|
|
||||||
|
// Window resizing from edges (when io.ConfigResizeWindowsFromEdges = true)
|
||||||
|
static const float RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS = 4.0f; // Extend outside and inside windows. Affect FindHoveredWindow().
|
||||||
|
static const float RESIZE_WINDOWS_FROM_EDGES_FEEDBACK_TIMER = 0.04f; // Reduce visual noise by only highlighting the border after a certain time.
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// [SECTION] FORWARD DECLARATIONS
|
// [SECTION] FORWARD DECLARATIONS
|
||||||
@ -3021,6 +3025,10 @@ static void ImGui::UpdateMouseInputs()
|
|||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
|
|
||||||
|
// Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well)
|
||||||
|
if (IsMousePosValid(&g.IO.MousePos))
|
||||||
|
g.IO.MousePos = ImFloor(g.IO.MousePos);
|
||||||
|
|
||||||
// If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta
|
// If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta
|
||||||
if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev))
|
if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MousePosPrev))
|
||||||
g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev;
|
g.IO.MouseDelta = g.IO.MousePos - g.IO.MousePosPrev;
|
||||||
@ -3895,6 +3903,8 @@ static void FindHoveredWindow()
|
|||||||
if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoInputs))
|
if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoInputs))
|
||||||
hovered_window = g.MovingWindow;
|
hovered_window = g.MovingWindow;
|
||||||
|
|
||||||
|
ImVec2 padding_regular = g.Style.TouchExtraPadding;
|
||||||
|
ImVec2 padding_for_resize_from_edges = g.IO.ConfigResizeWindowsFromEdges ? ImMax(g.Style.TouchExtraPadding, ImVec2(RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS, RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS)) : padding_regular;
|
||||||
for (int i = g.Windows.Size - 1; i >= 0; i--)
|
for (int i = g.Windows.Size - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = g.Windows[i];
|
ImGuiWindow* window = g.Windows[i];
|
||||||
@ -3907,16 +3917,20 @@ static void FindHoveredWindow()
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Using the clipped AABB, a child window will typically be clipped by its parent (not always)
|
// Using the clipped AABB, a child window will typically be clipped by its parent (not always)
|
||||||
ImRect bb(window->OuterRectClipped.Min - g.Style.TouchExtraPadding, window->OuterRectClipped.Max + g.Style.TouchExtraPadding);
|
ImRect bb(window->OuterRectClipped);
|
||||||
if (bb.Contains(g.IO.MousePos))
|
if ((window->Flags & ImGuiWindowFlags_ChildWindow) || (window->Flags & ImGuiWindowFlags_NoResize))
|
||||||
{
|
bb.Expand(padding_regular);
|
||||||
if (hovered_window == NULL)
|
else
|
||||||
hovered_window = window;
|
bb.Expand(padding_for_resize_from_edges);
|
||||||
if (hovered_window_ignoring_moving_window == NULL && (!g.MovingWindow || window->RootWindow != g.MovingWindow->RootWindow))
|
if (!bb.Contains(g.IO.MousePos))
|
||||||
hovered_window_ignoring_moving_window = window;
|
continue;
|
||||||
if (hovered_window && hovered_window_ignoring_moving_window)
|
|
||||||
break;
|
if (hovered_window == NULL)
|
||||||
}
|
hovered_window = window;
|
||||||
|
if (hovered_window_ignoring_moving_window == NULL && (!g.MovingWindow || window->RootWindow != g.MovingWindow->RootWindow))
|
||||||
|
hovered_window_ignoring_moving_window = window;
|
||||||
|
if (hovered_window && hovered_window_ignoring_moving_window)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
g.HoveredWindow = hovered_window;
|
g.HoveredWindow = hovered_window;
|
||||||
@ -4586,10 +4600,10 @@ static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_
|
|||||||
{
|
{
|
||||||
ImRect rect = window->Rect();
|
ImRect rect = window->Rect();
|
||||||
if (thickness == 0.0f) rect.Max -= ImVec2(1,1);
|
if (thickness == 0.0f) rect.Max -= ImVec2(1,1);
|
||||||
if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y, rect.Max.x - perp_padding, rect.Min.y + thickness);
|
if (border_n == 0) return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness, rect.Max.x - perp_padding, rect.Min.y + thickness);
|
||||||
if (border_n == 1) return ImRect(rect.Max.x - thickness, rect.Min.y + perp_padding, rect.Max.x, rect.Max.y - perp_padding);
|
if (border_n == 1) return ImRect(rect.Max.x - thickness, rect.Min.y + perp_padding, rect.Max.x + thickness, rect.Max.y - perp_padding);
|
||||||
if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness, rect.Max.x - perp_padding, rect.Max.y);
|
if (border_n == 2) return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness, rect.Max.x - perp_padding, rect.Max.y + thickness);
|
||||||
if (border_n == 3) return ImRect(rect.Min.x, rect.Min.y + perp_padding, rect.Min.x + thickness, rect.Max.y - perp_padding);
|
if (border_n == 3) return ImRect(rect.Min.x - thickness, rect.Min.y + perp_padding, rect.Min.x + thickness, rect.Max.y - perp_padding);
|
||||||
IM_ASSERT(0);
|
IM_ASSERT(0);
|
||||||
return ImRect();
|
return ImRect();
|
||||||
}
|
}
|
||||||
@ -4601,10 +4615,13 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
|
|||||||
ImGuiWindowFlags flags = window->Flags;
|
ImGuiWindowFlags flags = window->Flags;
|
||||||
if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
|
if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
|
||||||
return;
|
return;
|
||||||
|
if (window->WasActive == false) // Early out to avoid running this code for e.g. an hidden implicit Debug window.
|
||||||
|
return;
|
||||||
|
|
||||||
const int resize_border_count = g.IO.ConfigResizeWindowsFromEdges ? 4 : 0;
|
const int resize_border_count = g.IO.ConfigResizeWindowsFromEdges ? 4 : 0;
|
||||||
const float grip_draw_size = (float)(int)ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f);
|
const float grip_draw_size = (float)(int)ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f);
|
||||||
const float grip_hover_size = (float)(int)(grip_draw_size * 0.75f);
|
const float grip_hover_inner_size = (float)(int)(grip_draw_size * 0.75f);
|
||||||
|
const float grip_hover_outer_size = g.IO.ConfigResizeWindowsFromEdges ? RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS : 0.0f;
|
||||||
|
|
||||||
ImVec2 pos_target(FLT_MAX, FLT_MAX);
|
ImVec2 pos_target(FLT_MAX, FLT_MAX);
|
||||||
ImVec2 size_target(FLT_MAX, FLT_MAX);
|
ImVec2 size_target(FLT_MAX, FLT_MAX);
|
||||||
@ -4617,11 +4634,12 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
|
|||||||
const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPos);
|
const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPos);
|
||||||
|
|
||||||
// Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
|
// Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
|
||||||
ImRect resize_rect(corner, corner + grip.InnerDir * grip_hover_size);
|
ImRect resize_rect(corner - grip.InnerDir * grip_hover_outer_size, corner + grip.InnerDir * grip_hover_inner_size);
|
||||||
if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x);
|
if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x);
|
||||||
if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y);
|
if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y);
|
||||||
bool hovered, held;
|
bool hovered, held;
|
||||||
ButtonBehavior(resize_rect, window->GetID((void*)(intptr_t)resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
|
ButtonBehavior(resize_rect, window->GetID((void*)(intptr_t)resize_grip_n), &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
|
||||||
|
//GetOverlayDrawList()->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255));
|
||||||
if (hovered || held)
|
if (hovered || held)
|
||||||
g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;
|
g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;
|
||||||
|
|
||||||
@ -4635,7 +4653,7 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
|
|||||||
{
|
{
|
||||||
// Resize from any of the four corners
|
// Resize from any of the four corners
|
||||||
// We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
|
// We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
|
||||||
ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + resize_rect.GetSize() * grip.CornerPos; // Corner of the window corresponding to our corner grip
|
ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(grip.InnerDir * grip_hover_outer_size, grip.InnerDir * -grip_hover_inner_size, grip.CornerPos); // Corner of the window corresponding to our corner grip
|
||||||
CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPos, &pos_target, &size_target);
|
CalcResizePosSizeFromAnyCorner(window, corner_target, grip.CornerPos, &pos_target, &size_target);
|
||||||
}
|
}
|
||||||
if (resize_grip_n == 0 || held || hovered)
|
if (resize_grip_n == 0 || held || hovered)
|
||||||
@ -4643,12 +4661,11 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
|
|||||||
}
|
}
|
||||||
for (int border_n = 0; border_n < resize_border_count; border_n++)
|
for (int border_n = 0; border_n < resize_border_count; border_n++)
|
||||||
{
|
{
|
||||||
const float BORDER_SIZE = 5.0f; // FIXME: Only works _inside_ window because of HoveredWindow check.
|
|
||||||
const float BORDER_APPEAR_TIMER = 0.05f; // Reduce visual noise
|
|
||||||
bool hovered, held;
|
bool hovered, held;
|
||||||
ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_size, BORDER_SIZE);
|
ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS);
|
||||||
ButtonBehavior(border_rect, window->GetID((void*)(intptr_t)(border_n + 4)), &hovered, &held, ImGuiButtonFlags_FlattenChildren);
|
ButtonBehavior(border_rect, window->GetID((void*)(intptr_t)(border_n + 4)), &hovered, &held, ImGuiButtonFlags_FlattenChildren);
|
||||||
if ((hovered && g.HoveredIdTimer > BORDER_APPEAR_TIMER) || held)
|
//GetOverlayDrawList()->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255));
|
||||||
|
if ((hovered && g.HoveredIdTimer > RESIZE_WINDOWS_FROM_EDGES_FEEDBACK_TIMER) || held)
|
||||||
{
|
{
|
||||||
g.MouseCursor = (border_n & 1) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS;
|
g.MouseCursor = (border_n & 1) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS;
|
||||||
if (held) *border_held = border_n;
|
if (held) *border_held = border_n;
|
||||||
@ -4657,10 +4674,10 @@ static void ImGui::UpdateManualResize(ImGuiWindow* window, const ImVec2& size_au
|
|||||||
{
|
{
|
||||||
ImVec2 border_target = window->Pos;
|
ImVec2 border_target = window->Pos;
|
||||||
ImVec2 border_posn;
|
ImVec2 border_posn;
|
||||||
if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y); }
|
if (border_n == 0) { border_posn = ImVec2(0, 0); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
|
||||||
if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + BORDER_SIZE); }
|
if (border_n == 1) { border_posn = ImVec2(1, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
|
||||||
if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + BORDER_SIZE); }
|
if (border_n == 2) { border_posn = ImVec2(0, 1); border_target.y = (g.IO.MousePos.y - g.ActiveIdClickOffset.y + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
|
||||||
if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x); }
|
if (border_n == 3) { border_posn = ImVec2(0, 0); border_target.x = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + RESIZE_WINDOWS_FROM_EDGES_HALF_THICKNESS); }
|
||||||
CalcResizePosSizeFromAnyCorner(window, border_target, border_posn, &pos_target, &size_target);
|
CalcResizePosSizeFromAnyCorner(window, border_target, border_posn, &pos_target, &size_target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9283,6 +9300,12 @@ const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGuiDragDrop
|
|||||||
return &payload;
|
return &payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ImGuiPayload* ImGui::GetDragDropPayload()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
return g.DragDropActive ? &g.DragDropPayload : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// We don't really use/need this now, but added it for the sake of consistency and because we might need it later.
|
// We don't really use/need this now, but added it for the sake of consistency and because we might need it later.
|
||||||
void ImGui::EndDragDropTarget()
|
void ImGui::EndDragDropTarget()
|
||||||
{
|
{
|
||||||
@ -9491,7 +9514,7 @@ void ImGui::MarkIniSettingsDirty(ImGuiWindow* window)
|
|||||||
g.SettingsDirtyTimer = g.IO.IniSavingRate;
|
g.SettingsDirtyTimer = g.IO.IniSavingRate;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ImGuiWindowSettings* CreateNewWindowSettings(const char* name)
|
ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
g.SettingsWindows.push_back(ImGuiWindowSettings());
|
||||||
@ -9629,7 +9652,7 @@ static void* SettingsHandlerWindow_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*
|
|||||||
{
|
{
|
||||||
ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHash(name, 0));
|
ImGuiWindowSettings* settings = ImGui::FindWindowSettings(ImHash(name, 0));
|
||||||
if (!settings)
|
if (!settings)
|
||||||
settings = CreateNewWindowSettings(name);
|
settings = ImGui::CreateNewWindowSettings(name);
|
||||||
return (void*)settings;
|
return (void*)settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9660,7 +9683,7 @@ static void SettingsHandlerWindow_WriteAll(ImGuiContext* imgui_ctx, ImGuiSetting
|
|||||||
ImGuiWindowSettings* settings = (window->SettingsIdx != -1) ? &g.SettingsWindows[window->SettingsIdx] : ImGui::FindWindowSettings(window->ID);
|
ImGuiWindowSettings* settings = (window->SettingsIdx != -1) ? &g.SettingsWindows[window->SettingsIdx] : ImGui::FindWindowSettings(window->ID);
|
||||||
if (!settings)
|
if (!settings)
|
||||||
{
|
{
|
||||||
settings = CreateNewWindowSettings(window->Name);
|
settings = ImGui::CreateNewWindowSettings(window->Name);
|
||||||
window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
|
window->SettingsIdx = g.SettingsWindows.index_from_pointer(settings);
|
||||||
}
|
}
|
||||||
IM_ASSERT(settings->ID == window->ID);
|
IM_ASSERT(settings->ID == window->ID);
|
||||||
|
9
imgui.h
9
imgui.h
@ -521,9 +521,10 @@ namespace ImGui
|
|||||||
IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource()
|
IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource()
|
||||||
IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
|
IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t size, ImGuiCond cond = 0);// type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui.
|
||||||
IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true!
|
IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true!
|
||||||
IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
|
IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
|
||||||
IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
|
IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
|
||||||
IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
|
IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
|
||||||
|
IMGUI_API const ImGuiPayload* GetDragDropPayload(); // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
|
||||||
|
|
||||||
// Clipping
|
// Clipping
|
||||||
IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
|
IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
|
||||||
@ -1480,7 +1481,7 @@ struct ImGuiInputTextCallbackData
|
|||||||
|
|
||||||
// Helper functions for text manipulation.
|
// Helper functions for text manipulation.
|
||||||
// Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection.
|
// Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection.
|
||||||
ImGuiInputTextCallbackData();
|
IMGUI_API ImGuiInputTextCallbackData();
|
||||||
IMGUI_API void DeleteChars(int pos, int bytes_count);
|
IMGUI_API void DeleteChars(int pos, int bytes_count);
|
||||||
IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
|
IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
|
||||||
bool HasSelection() const { return SelectionStart != SelectionEnd; }
|
bool HasSelection() const { return SelectionStart != SelectionEnd; }
|
||||||
|
Loading…
Reference in New Issue
Block a user