Browse Source

Minor tidying & comments

pull/18/merge
ocornut 10 years ago
parent
commit
ec4b510775
  1. 87
      imgui.cpp

87
imgui.cpp

@ -698,7 +698,7 @@ struct ImGuiTextEditState
bool HasSelection() const { return StbState.select_start != StbState.select_end; }
void SelectAll() { StbState.select_start = 0; StbState.select_end = (int)ImStrlenW(Text); StbState.cursor = StbState.select_end; StbState.has_preferred_x = false; }
void OnKeyboardPressed(int key);
void OnKeyPressed(int key);
void UpdateScrollOffset();
ImVec2 CalcDisplayOffsetFromCharIdx(int i) const;
@ -3563,7 +3563,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
if (!display_format)
display_format = "%.3f";
// Dodgily parse display precision back from the display format
// Parse display precision back from the display format string
int decimal_precision = 3;
if (const char* p = strchr(display_format, '%'))
{
@ -3604,7 +3604,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
const float slider_effective_x1 = slider_bb.Min.x + grab_size_in_pixels*0.5f;
const float slider_effective_x2 = slider_bb.Max.x - grab_size_in_pixels*0.5f;
// For logarithmic sliders that cross over sign boundary we want the exponential increase to be symetric around 0.0f
// For logarithmic sliders that cross over sign boundary we want the exponential increase to be symmetric around 0.0f
float linear_zero_pos = 0.0f; // 0.0->1.0f
if (!is_unbound)
{
@ -3648,7 +3648,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
g.ActiveId = g.SliderAsInputTextId;
g.HoveredId = 0;
window->FocusItemUnregister(); // Our replacement slider will override the focus ID (that we needed to declare previously to allow for a TAB focus to happen before we got selected)
window->FocusItemUnregister(); // Our replacement slider will override the focus ID (registered previously to allow for a TAB focus to happen)
value_changed = ImGui::InputText(label, text_buf, IM_ARRAYSIZE(text_buf), ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_AutoSelectAll);
if (g.SliderAsInputTextId == 0)
{
@ -3675,6 +3675,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
ItemSize(bb);
RenderFrame(frame_bb.Min, frame_bb.Max, window->Color(ImGuiCol_FrameBg));
// Process clicking on the slider
if (g.ActiveId == id)
{
if (g.IO.MouseDown[0])
@ -3708,10 +3709,7 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
}
// Round past decimal precision
// 0: 1
// 1: 0.1
// 2: 0.01
// etc..
// 0->1, 1->0.1, 2->0.01, etc.
// So when our value is 1.99999 with a precision of 0.001 we'll end up rounding to 2.0
const float min_step = 1.0f / powf(10.0f, (float)decimal_precision);
const float remainder = fmodf(new_value, min_step);
@ -3771,9 +3769,9 @@ bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, c
bool ImGui::SliderAngle(const char* label, float* v, float v_degrees_min, float v_degrees_max)
{
float v_deg = *v * 360.0f / (2*PI);
bool changed = ImGui::SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, "%.0f deg", 1.0f);
bool value_changed = ImGui::SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, "%.0f deg", 1.0f);
*v = v_deg * (2*PI) / 360.0f;
return changed;
return value_changed;
}
bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format)
@ -3781,11 +3779,12 @@ bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const cha
if (!display_format)
display_format = "%.0f";
float v_f = (float)*v;
bool changed = ImGui::SliderFloat(label, &v_f, (float)v_min, (float)v_max, display_format, 1.0f);
bool value_changed = ImGui::SliderFloat(label, &v_f, (float)v_min, (float)v_max, display_format, 1.0f);
*v = (int)v_f;
return changed;
return value_changed;
}
// Add multiple sliders on 1 line for compact edition of multiple components
static bool SliderFloatN(const char* label, float v[3], int components, float v_min, float v_max, const char* display_format, float power)
{
ImGuiState& g = GImGui;
@ -3836,7 +3835,6 @@ bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max
return SliderFloatN(label, v, 4, v_min, v_max, display_format, power);
}
// Enum for ImGui::Plot()
enum ImGuiPlotType
{
ImGuiPlotType_Lines,
@ -3866,7 +3864,7 @@ static void Plot(ImGuiPlotType plot_type, const char* label, float (*values_gett
if (ClipAdvance(bb))
return;
// Determine scale if not specified
// Determine scale from values if not specified
if (scale_min == FLT_MAX || scale_max == FLT_MAX)
{
float v_min = FLT_MAX;
@ -4152,7 +4150,7 @@ enum
#define STB_TEXTEDIT_IMPLEMENTATION
#include "stb_textedit.h"
void ImGuiTextEditState::OnKeyboardPressed(int key)
void ImGuiTextEditState::OnKeyPressed(int key)
{
stb_textedit_key(this, &StbState, key);
CursorAnimReset();
@ -4282,9 +4280,6 @@ bool ImGui::InputFloat(const char* label, float *v, float step, float step_fast,
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + g.Style.FramePadding.y), label);
//ImGui::SameLine(0, (int)g.Style.ItemInnerSpacing.x);
//ImGui::TextUnformatted(label, FindTextDisplayEnd(label));
return value_changed;
}
@ -4296,8 +4291,8 @@ bool ImGui::InputInt(const char* label, int *v, int step, int step_fast, ImGuiIn
return value_changed;
}
// Public API to manipulate text
// They manipulate UTF-8 chars, which is what is exposed to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar)
// Public API to manipulate UTF-8 text
// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar)
void ImGuiTextEditCallbackData::DeleteChars(size_t pos, size_t bytes_count)
{
char* dst = Buf + pos;
@ -4335,6 +4330,7 @@ void ImGuiTextEditCallbackData::InsertChars(size_t pos, const char* new_text, co
SelectionStart = SelectionEnd = CursorPos;
}
// Edit a string of text
bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, void (*callback)(ImGuiTextEditCallbackData*), void* user_data)
{
ImGuiState& g = GImGui;
@ -4356,7 +4352,7 @@ bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputT
if (ClipAdvance(frame_bb))
return false;
// NB: we can only read/write to 'edit_state' if we are the active widget!
// NB: we are only allowed to access it if we are the active widget.
ImGuiTextEditState& edit_state = g.InputTextState;
const bool is_ctrl_down = io.KeyCtrl;
@ -4409,7 +4405,7 @@ bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputT
edit_state.FontSize = window->FontSize();
const float mx = g.IO.MousePos.x - frame_bb.Min.x - style.FramePadding.x;
const float my = window->FontSize()*0.5f; // Better for single line
const float my = window->FontSize()*0.5f; // Flatten mouse because we are doing a single-line edit
edit_state.UpdateScrollOffset();
if (select_all || (hovered && io.MouseDoubleClicked[0]))
@ -4432,19 +4428,17 @@ bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputT
edit_state.SelectedAllMouseLock = false;
const int k_mask = (is_shift_down ? STB_TEXTEDIT_K_SHIFT : 0);
if (IsKeyPressedMap(ImGuiKey_LeftArrow)) edit_state.OnKeyboardPressed(is_ctrl_down ? STB_TEXTEDIT_K_WORDLEFT | k_mask : STB_TEXTEDIT_K_LEFT | k_mask);
else if (IsKeyPressedMap(ImGuiKey_RightArrow)) edit_state.OnKeyboardPressed(is_ctrl_down ? STB_TEXTEDIT_K_WORDRIGHT | k_mask : STB_TEXTEDIT_K_RIGHT | k_mask);
//else if (IsKeyPressedMap(ImGuiKey_UpArrow)) edit_state.OnKeyboardPressed(STB_TEXTEDIT_K_UP | k_mask);
//else if (IsKeyPressedMap(ImGuiKey_DownArrow)) edit_state.OnKeyboardPressed(STB_TEXTEDIT_K_DOWN | k_mask);
else if (IsKeyPressedMap(ImGuiKey_Home)) edit_state.OnKeyboardPressed(is_ctrl_down ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask);
else if (IsKeyPressedMap(ImGuiKey_End)) edit_state.OnKeyboardPressed(is_ctrl_down ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask);
else if (IsKeyPressedMap(ImGuiKey_Delete)) edit_state.OnKeyboardPressed(STB_TEXTEDIT_K_DELETE | k_mask);
else if (IsKeyPressedMap(ImGuiKey_Backspace)) edit_state.OnKeyboardPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
if (IsKeyPressedMap(ImGuiKey_LeftArrow)) { edit_state.OnKeyPressed(is_ctrl_down ? STB_TEXTEDIT_K_WORDLEFT | k_mask : STB_TEXTEDIT_K_LEFT | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_RightArrow)) { edit_state.OnKeyPressed(is_ctrl_down ? STB_TEXTEDIT_K_WORDRIGHT | k_mask : STB_TEXTEDIT_K_RIGHT | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_Home)) { edit_state.OnKeyPressed(is_ctrl_down ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_End)) { edit_state.OnKeyPressed(is_ctrl_down ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_Delete)) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_Backspace)) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); }
else if (IsKeyPressedMap(ImGuiKey_Enter)) { g.ActiveId = 0; enter_pressed = true; }
else if (IsKeyPressedMap(ImGuiKey_Escape)) { g.ActiveId = 0; cancel_edit = true; }
else if (is_ctrl_down && IsKeyPressedMap(ImGuiKey_Z)) edit_state.OnKeyboardPressed(STB_TEXTEDIT_K_UNDO); // I don't want to use shortcuts but we should probably have an Input-catch stack
else if (is_ctrl_down && IsKeyPressedMap(ImGuiKey_Y)) edit_state.OnKeyboardPressed(STB_TEXTEDIT_K_REDO);
else if (is_ctrl_down && IsKeyPressedMap(ImGuiKey_A)) edit_state.SelectAll();
else if (is_ctrl_down && IsKeyPressedMap(ImGuiKey_Z)) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_UNDO); }
else if (is_ctrl_down && IsKeyPressedMap(ImGuiKey_Y)) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_REDO); }
else if (is_ctrl_down && IsKeyPressedMap(ImGuiKey_A)) { edit_state.SelectAll(); }
else if (is_ctrl_down && (IsKeyPressedMap(ImGuiKey_X) || IsKeyPressedMap(ImGuiKey_C)))
{
// Cut, Copy
@ -4512,7 +4506,7 @@ bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputT
continue;
// Insert character!
edit_state.OnKeyboardPressed(c);
edit_state.OnKeyPressed(c);
}
}
}
@ -4700,7 +4694,7 @@ bool ImGui::Combo(const char* label, int* current_item, const char** items, int
static bool Combo_StringListGetter(void* data, int idx, const char** out_text)
{
// FIXME-OPT: we could precompute the indices but let's not bother now.
// FIXME-OPT: we could precompute the indices to fasten this. But only 1 active combo means the waste is limited.
const char* items_separated_by_zeros = (const char*)data;
int items_count = 0;
const char* p = items_separated_by_zeros;
@ -4797,6 +4791,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
bool combo_item_active = false;
combo_item_active |= (g.ActiveId == child_window->GetID("#SCROLLY"));
// Display items
for (int item_idx = 0; item_idx < items_count; item_idx++)
{
const float item_h = child_window->FontSize();
@ -4807,7 +4802,7 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
bool item_hovered, item_held;
bool item_pressed = ButtonBehaviour(item_aabb, item_id, &item_hovered, &item_held, true);
bool item_selected = item_idx == *current_item;
bool item_selected = (item_idx == *current_item);
if (item_hovered || item_selected)
{
@ -4893,7 +4888,7 @@ bool ImGui::ColorEdit3(const char* label, float col[3])
return value_changed;
}
// Edit colours components color in 0..1 range
// Edit colors components (each component in 0.0f..1.0f range
// Use CTRL-Click to input value and TAB to go to next item.
bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
{
@ -4998,7 +4993,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
const char* button_titles[3] = { "RGB", "HSV", "HEX" };
if (ImGui::Button(button_titles[edit_mode]))
{
// Don't set 'edit_mode' right away!
// Don't set local copy of 'edit_mode' right away!
g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3);
}
}
@ -5034,7 +5029,7 @@ void ImGui::ColorEditMode(ImGuiColorEditMode mode)
window->DC.ColorEditMode = mode;
}
// Horizontal separator.
// Horizontal separating line.
void ImGui::Separator()
{
ImGuiWindow* window = GetCurrentWindow();
@ -5070,7 +5065,7 @@ void ImGui::Spacing()
ItemSize(ImVec2(0,0));
}
// Advance
// Advance cursor given item size.
static void ItemSize(ImVec2 size, ImVec2* adjust_start_offset)
{
ImGuiState& g = GImGui;
@ -5457,7 +5452,7 @@ void ImDrawList::AddVtxLine(const ImVec2& a, const ImVec2& b, ImU32 col)
const ImVec2 hp0 = ImVec2(offset + hn.y, offset - hn.x); // half perpendiculars + user offset
const ImVec2 hp1 = ImVec2(offset - hn.y, offset + hn.x);
// Two triangles makes up one line. Using triangles allows us to make draw calls.
// Two triangles makes up one line. Using triangles allows us to reduce amount of draw calls.
AddVtx(a + hp0, col);
AddVtx(b + hp0, col);
AddVtx(a + hp1, col);
@ -5516,7 +5511,6 @@ void ImDrawList::AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float roun
if ((col >> 24) == 0)
return;
//const float r = ImMin(rounding, ImMin(fabsf(b.x-a.x), fabsf(b.y-a.y))*0.5f);
float r = rounding;
r = ImMin(r, fabsf(b.x-a.x) * ( ((rounding_corners&(1|2))==(1|2)) || ((rounding_corners&(4|8))==(4|8)) ? 0.5f : 1.0f ));
r = ImMin(r, fabsf(b.y-a.y) * ( ((rounding_corners&(1|8))==(1|8)) || ((rounding_corners&(2|4))==(2|4)) ? 0.5f : 1.0f ));
@ -5549,7 +5543,6 @@ void ImDrawList::AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, floa
if ((col >> 24) == 0)
return;
//const float r = ImMin(rounding, ImMin(fabsf(b.x-a.x), fabsf(b.y-a.y))*0.5f);
float r = rounding;
r = ImMin(r, fabsf(b.x-a.x) * ( ((rounding_corners&(1|2))==(1|2)) || ((rounding_corners&(4|8))==(4|8)) ? 0.5f : 1.0f ));
r = ImMin(r, fabsf(b.y-a.y) * ( ((rounding_corners&(1|8))==(1|8)) || ((rounding_corners&(2|4))==(2|4)) ? 0.5f : 1.0f ));
@ -6578,8 +6571,6 @@ void ImGui::ShowTestWindow(bool* open)
if (ImGui::CollapsingHeader("Widgets"))
{
//ImGui::PushItemWidth(ImGui::GetWindowWidth() - 220);
static bool a=false;
if (ImGui::Button("Button")) { printf("Clicked\n"); a ^= 1; }
if (a)
@ -6738,8 +6729,6 @@ void ImGui::ShowTestWindow(bool* open)
static float col2[4] = { 0.4f,0.7f,0.0f,0.5f };
ImGui::ColorEdit3("color 1", col1);
ImGui::ColorEdit4("color 2", col2);
//ImGui::PopItemWidth();
}
if (ImGui::CollapsingHeader("Graphs widgets"))
@ -6752,7 +6741,7 @@ void ImGui::ShowTestWindow(bool* open)
static size_t values_offset = 0;
if (!pause)
{
// create dummy data at 60 hz
// create dummy data at fixed 60 hz rate
static float refresh_time = -1.0f;
if (ImGui::GetTime() > refresh_time + 1.0f/60.0f)
{
@ -6892,7 +6881,7 @@ void ImGui::ShowTestWindow(bool* open)
ImGui::Columns(3, "mixed");
// Filling all contents of a column
// Create multiple items in a same cell because switching to next column
static int e = 0;
ImGui::Text("Hello");
ImGui::Button("Banana");

Loading…
Cancel
Save