mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-18 06:06:35 +00:00
Merge branch 'master' into 2016-02-colorpicker
This commit is contained in:
commit
b6c0227add
37
imgui.cpp
37
imgui.cpp
@ -1860,7 +1860,7 @@ ImGuiWindow* ImGui::GetParentWindow()
|
|||||||
return g.CurrentWindowStack[(unsigned int)g.CurrentWindowStack.Size - 2];
|
return g.CurrentWindowStack[(unsigned int)g.CurrentWindowStack.Size - 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window = NULL)
|
void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
g.ActiveId = id;
|
g.ActiveId = id;
|
||||||
@ -1871,6 +1871,11 @@ void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window = NULL)
|
|||||||
g.ActiveIdWindow = window;
|
g.ActiveIdWindow = window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImGui::ClearActiveID()
|
||||||
|
{
|
||||||
|
SetActiveID(0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void ImGui::SetHoveredID(ImGuiID id)
|
void ImGui::SetHoveredID(ImGuiID id)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -2206,7 +2211,7 @@ void ImGui::NewFrame()
|
|||||||
g.HoveredId = 0;
|
g.HoveredId = 0;
|
||||||
g.HoveredIdAllowOverlap = false;
|
g.HoveredIdAllowOverlap = false;
|
||||||
if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
|
if (!g.ActiveIdIsAlive && g.ActiveIdPreviousFrame == g.ActiveId && g.ActiveId != 0)
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
g.ActiveIdPreviousFrame = g.ActiveId;
|
g.ActiveIdPreviousFrame = g.ActiveId;
|
||||||
g.ActiveIdIsAlive = false;
|
g.ActiveIdIsAlive = false;
|
||||||
g.ActiveIdIsJustActivated = false;
|
g.ActiveIdIsJustActivated = false;
|
||||||
@ -2229,7 +2234,7 @@ void ImGui::NewFrame()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
g.MovedWindow = NULL;
|
g.MovedWindow = NULL;
|
||||||
g.MovedWindowMoveId = 0;
|
g.MovedWindowMoveId = 0;
|
||||||
}
|
}
|
||||||
@ -4216,7 +4221,7 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us
|
|||||||
ApplySizeFullWithConstraint(window, size_auto_fit);
|
ApplySizeFullWithConstraint(window, size_auto_fit);
|
||||||
if (!(flags & ImGuiWindowFlags_NoSavedSettings))
|
if (!(flags & ImGuiWindowFlags_NoSavedSettings))
|
||||||
MarkIniSettingsDirty();
|
MarkIniSettingsDirty();
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
}
|
}
|
||||||
else if (held)
|
else if (held)
|
||||||
{
|
{
|
||||||
@ -4564,7 +4569,7 @@ void ImGui::FocusWindow(ImGuiWindow* window)
|
|||||||
// Steal focus on active widgets
|
// Steal focus on active widgets
|
||||||
if (window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement should be unnecessary. Need further testing before removing it..
|
if (window->Flags & ImGuiWindowFlags_Popup) // FIXME: This statement should be unnecessary. Need further testing before removing it..
|
||||||
if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != window)
|
if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != window)
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
|
|
||||||
// Bring to front
|
// Bring to front
|
||||||
if ((window->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus) || g.Windows.back() == window)
|
if ((window->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus) || g.Windows.back() == window)
|
||||||
@ -5537,7 +5542,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
|
|||||||
{
|
{
|
||||||
if (out_hovered) *out_hovered = false;
|
if (out_hovered) *out_hovered = false;
|
||||||
if (out_held) *out_held = false;
|
if (out_held) *out_held = false;
|
||||||
if (g.ActiveId == id) SetActiveID(0);
|
if (g.ActiveId == id) ClearActiveID();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5565,14 +5570,14 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
|
|||||||
if (((flags & ImGuiButtonFlags_PressedOnClick) && g.IO.MouseClicked[0]) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[0]))
|
if (((flags & ImGuiButtonFlags_PressedOnClick) && g.IO.MouseClicked[0]) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseDoubleClicked[0]))
|
||||||
{
|
{
|
||||||
pressed = true;
|
pressed = true;
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
FocusWindow(window);
|
FocusWindow(window);
|
||||||
}
|
}
|
||||||
if ((flags & ImGuiButtonFlags_PressedOnRelease) && g.IO.MouseReleased[0])
|
if ((flags & ImGuiButtonFlags_PressedOnRelease) && g.IO.MouseReleased[0])
|
||||||
{
|
{
|
||||||
if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps <on release>
|
if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps <on release>
|
||||||
pressed = true;
|
pressed = true;
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 'Repeat' mode acts when held regardless of _PressedOn flags (see table above).
|
// 'Repeat' mode acts when held regardless of _PressedOn flags (see table above).
|
||||||
@ -5594,7 +5599,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
|
|||||||
if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease))
|
if (hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease))
|
||||||
if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps <on release>
|
if (!((flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[0] >= g.IO.KeyRepeatDelay)) // Repeat mode trumps <on release>
|
||||||
pressed = true;
|
pressed = true;
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6559,7 +6564,7 @@ bool ImGui::SliderBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6875,7 +6880,7 @@ bool ImGui::DragBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_s
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7778,7 +7783,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|||||||
{
|
{
|
||||||
// Release focus when we click outside
|
// Release focus when we click outside
|
||||||
if (g.ActiveId == id)
|
if (g.ActiveId == id)
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool value_changed = false;
|
bool value_changed = false;
|
||||||
@ -7880,7 +7885,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|||||||
bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
|
bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
|
||||||
if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
|
if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
|
||||||
{
|
{
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
enter_pressed = true;
|
enter_pressed = true;
|
||||||
}
|
}
|
||||||
else if (is_editable)
|
else if (is_editable)
|
||||||
@ -7896,7 +7901,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|||||||
if (InputTextFilterCharacter(&c, flags, callback, user_data))
|
if (InputTextFilterCharacter(&c, flags, callback, user_data))
|
||||||
edit_state.OnKeyPressed((int)c);
|
edit_state.OnKeyPressed((int)c);
|
||||||
}
|
}
|
||||||
else if (IsKeyPressedMap(ImGuiKey_Escape)) { SetActiveID(0); cancel_edit = true; }
|
else if (IsKeyPressedMap(ImGuiKey_Escape)) { ClearActiveID(); cancel_edit = true; }
|
||||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); }
|
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Z) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); edit_state.ClearSelection(); }
|
||||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); }
|
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_Y) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); edit_state.ClearSelection(); }
|
||||||
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; }
|
else if (is_shortcut_key_only && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); edit_state.CursorFollow = true; }
|
||||||
@ -8491,7 +8496,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
|
|||||||
SetHoveredID(id);
|
SetHoveredID(id);
|
||||||
if (g.IO.MouseClicked[0])
|
if (g.IO.MouseClicked[0])
|
||||||
{
|
{
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
if (IsPopupOpen(id))
|
if (IsPopupOpen(id))
|
||||||
{
|
{
|
||||||
ClosePopup(id);
|
ClosePopup(id);
|
||||||
@ -8540,7 +8545,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
|
|||||||
item_text = "*Unknown item*";
|
item_text = "*Unknown item*";
|
||||||
if (Selectable(item_text, item_selected))
|
if (Selectable(item_text, item_selected))
|
||||||
{
|
{
|
||||||
SetActiveID(0);
|
ClearActiveID();
|
||||||
value_changed = true;
|
value_changed = true;
|
||||||
*current_item = i;
|
*current_item = i;
|
||||||
}
|
}
|
||||||
|
2
imgui.h
2
imgui.h
@ -373,7 +373,7 @@ namespace ImGui
|
|||||||
// Popups
|
// Popups
|
||||||
IMGUI_API void OpenPopup(const char* str_id); // mark popup as open. popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
|
IMGUI_API void OpenPopup(const char* str_id); // mark popup as open. popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
|
||||||
IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true!
|
IMGUI_API bool BeginPopup(const char* str_id); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returned true!
|
||||||
IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (can't close them by clicking outside)
|
IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags extra_flags = 0); // modal dialog (block interactions behind the modal window, can't close the modal window by clicking outside)
|
||||||
IMGUI_API bool BeginPopupContextItem(const char* str_id, int mouse_button = 1); // helper to open and begin popup when clicked on last item. read comments in .cpp!
|
IMGUI_API bool BeginPopupContextItem(const char* str_id, int mouse_button = 1); // helper to open and begin popup when clicked on last item. read comments in .cpp!
|
||||||
IMGUI_API bool BeginPopupContextWindow(bool also_over_items = true, const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on current window.
|
IMGUI_API bool BeginPopupContextWindow(bool also_over_items = true, const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked on current window.
|
||||||
IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (no window).
|
IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, int mouse_button = 1); // helper to open and begin popup when clicked in void (no window).
|
||||||
|
@ -362,7 +362,7 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
ImVec2 pos = ImGui::GetCursorScreenPos();
|
ImVec2 pos = ImGui::GetCursorScreenPos();
|
||||||
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
|
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
|
||||||
ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
|
ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
|
||||||
ImGui::Text("lazy dog. This paragraph is made to fit within %.0f pixels. The quick brown fox jumps over the lazy dog.", wrap_width);
|
ImGui::Text("The lazy dog is a good dog. This paragraph is made to fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width);
|
||||||
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
|
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
|
||||||
ImGui::PopTextWrapPos();
|
ImGui::PopTextWrapPos();
|
||||||
|
|
||||||
@ -370,7 +370,7 @@ void ImGui::ShowTestWindow(bool* p_open)
|
|||||||
pos = ImGui::GetCursorScreenPos();
|
pos = ImGui::GetCursorScreenPos();
|
||||||
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
|
ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(pos.x + wrap_width, pos.y), ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight()), IM_COL32(255,0,255,255));
|
||||||
ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
|
ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
|
||||||
ImGui::Text("aaaaaaaa bbbbbbbb, cccccccc,dddddddd. eeeeeeee ffffffff. gggggggg!hhhhhhhh");
|
ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh");
|
||||||
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
|
ImGui::GetWindowDrawList()->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255,255,0,255));
|
||||||
ImGui::PopTextWrapPos();
|
ImGui::PopTextWrapPos();
|
||||||
|
|
||||||
@ -2315,7 +2315,7 @@ struct ExampleAppConsole
|
|||||||
for (int i = 0; i < candidates.Size && all_candidates_matches; i++)
|
for (int i = 0; i < candidates.Size && all_candidates_matches; i++)
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
c = toupper(candidates[i][match_len]);
|
c = toupper(candidates[i][match_len]);
|
||||||
else if (c != toupper(candidates[i][match_len]))
|
else if (c == 0 || c != toupper(candidates[i][match_len]))
|
||||||
all_candidates_matches = false;
|
all_candidates_matches = false;
|
||||||
if (!all_candidates_matches)
|
if (!all_candidates_matches)
|
||||||
break;
|
break;
|
||||||
|
@ -1851,6 +1851,7 @@ const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const c
|
|||||||
{
|
{
|
||||||
line_width += blank_width;
|
line_width += blank_width;
|
||||||
blank_width = 0.0f;
|
blank_width = 0.0f;
|
||||||
|
word_end = s;
|
||||||
}
|
}
|
||||||
blank_width += char_width;
|
blank_width += char_width;
|
||||||
inside_word = false;
|
inside_word = false;
|
||||||
|
@ -709,6 +709,7 @@ namespace ImGui
|
|||||||
IMGUI_API void EndFrame(); // Ends the ImGui frame. Automatically called by Render()! you most likely don't need to ever call that yourself directly. If you don't need to render you can call EndFrame() but you'll have wasted CPU already. If you don't need to render, don't create any windows instead!
|
IMGUI_API void EndFrame(); // Ends the ImGui frame. Automatically called by Render()! you most likely don't need to ever call that yourself directly. If you don't need to render you can call EndFrame() but you'll have wasted CPU already. If you don't need to render, don't create any windows instead!
|
||||||
|
|
||||||
IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
|
IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
|
||||||
|
IMGUI_API void ClearActiveID();
|
||||||
IMGUI_API void SetHoveredID(ImGuiID id);
|
IMGUI_API void SetHoveredID(ImGuiID id);
|
||||||
IMGUI_API void KeepAliveID(ImGuiID id);
|
IMGUI_API void KeepAliveID(ImGuiID id);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user