mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-13 11:19:58 +01:00
imgui code cleanup
This commit is contained in:
@@ -345,33 +345,34 @@ void ImGuiToolkit::ShowIconsWindow(bool* p_open)
|
|||||||
|
|
||||||
const ImGuiIO& io = ImGui::GetIO();
|
const ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
ImGui::Begin("Icons", p_open);
|
if ( ImGui::Begin("Icons", p_open) ) {
|
||||||
|
|
||||||
ImVec2 pos = ImGui::GetCursorScreenPos();
|
ImVec2 pos = ImGui::GetCursorScreenPos();
|
||||||
ImGui::Image((void*)(intptr_t)textureicons, ImVec2(640, 640));
|
ImGui::Image((void*)(intptr_t)textureicons, ImVec2(640, 640));
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
{
|
{
|
||||||
float my_tex_w = 640.0;
|
float my_tex_w = 640.0;
|
||||||
float my_tex_h = 640.0;
|
float my_tex_h = 640.0;
|
||||||
float zoom = 4.0f;
|
float zoom = 4.0f;
|
||||||
float region_sz = 32.0f; // 64 x 64 icons
|
float region_sz = 32.0f; // 64 x 64 icons
|
||||||
float region_x = io.MousePos.x - pos.x - region_sz * 0.5f;
|
float region_x = io.MousePos.x - pos.x - region_sz * 0.5f;
|
||||||
if (region_x < 0.0f) region_x = 0.0f; else if (region_x > my_tex_w - region_sz) region_x = my_tex_w - region_sz;
|
if (region_x < 0.0f) region_x = 0.0f; else if (region_x > my_tex_w - region_sz) region_x = my_tex_w - region_sz;
|
||||||
float region_y = io.MousePos.y - pos.y - region_sz * 0.5f;
|
float region_y = io.MousePos.y - pos.y - region_sz * 0.5f;
|
||||||
if (region_y < 0.0f) region_y = 0.0f; else if (region_y > my_tex_h - region_sz) region_y = my_tex_h - region_sz;
|
if (region_y < 0.0f) region_y = 0.0f; else if (region_y > my_tex_h - region_sz) region_y = my_tex_h - region_sz;
|
||||||
ImGui::BeginTooltip();
|
ImGui::BeginTooltip();
|
||||||
int i = (int) ( (region_x + region_sz * 0.5f) / region_sz);
|
int i = (int) ( (region_x + region_sz * 0.5f) / region_sz);
|
||||||
int j = (int) ( (region_y + region_sz * 0.5f)/ region_sz);
|
int j = (int) ( (region_y + region_sz * 0.5f)/ region_sz);
|
||||||
ImGuiToolkit::Icon(i, j);
|
ImGuiToolkit::Icon(i, j);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Text(" Icon (%d, %d)", i, j);
|
ImGui::Text(" Icon (%d, %d)", i, j);
|
||||||
ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
|
ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
|
||||||
ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
|
ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
|
||||||
ImGui::Image((void*)(intptr_t)textureicons, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImVec4(1.0f, 1.0f, 1.0f, 1.0f), ImVec4(1.0f, 1.0f, 1.0f, 0.5f));
|
ImGui::Image((void*)(intptr_t)textureicons, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, ImVec4(1.0f, 1.0f, 1.0f, 1.0f), ImVec4(1.0f, 1.0f, 1.0f, 0.5f));
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::End();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiToolkit::ToolTip(const char* desc, const char* shortcut)
|
void ImGuiToolkit::ToolTip(const char* desc, const char* shortcut)
|
||||||
|
|||||||
148
Log.cpp
148
Log.cpp
@@ -57,88 +57,86 @@ struct AppLog
|
|||||||
ImGui::SetNextWindowPos(ImVec2(430, 660), ImGuiCond_FirstUseEver);
|
ImGui::SetNextWindowPos(ImVec2(430, 660), ImGuiCond_FirstUseEver);
|
||||||
ImGui::SetNextWindowSize(ImVec2(1150, 220), ImGuiCond_FirstUseEver);
|
ImGui::SetNextWindowSize(ImVec2(1150, 220), ImGuiCond_FirstUseEver);
|
||||||
ImGui::SetNextWindowSizeConstraints(ImVec2(600, 180), ImVec2(FLT_MAX, FLT_MAX));
|
ImGui::SetNextWindowSizeConstraints(ImVec2(600, 180), ImVec2(FLT_MAX, FLT_MAX));
|
||||||
if (!ImGui::Begin(title, p_open))
|
if (ImGui::Begin(title, p_open))
|
||||||
{
|
{
|
||||||
ImGui::End();
|
// window
|
||||||
return;
|
ImGui::SameLine(0, 0);
|
||||||
}
|
static bool numbering = true;
|
||||||
|
ImGuiToolkit::ButtonToggle( ICON_FA_SORT_NUMERIC_DOWN, &numbering );
|
||||||
|
ImGui::SameLine();
|
||||||
|
bool clear = ImGui::Button( ICON_FA_BACKSPACE " Clear");
|
||||||
|
ImGui::SameLine();
|
||||||
|
bool copy = ImGui::Button( ICON_FA_COPY " Copy");
|
||||||
|
ImGui::SameLine();
|
||||||
|
Filter.Draw("Filter", -60.0f);
|
||||||
|
|
||||||
// window
|
ImGui::Separator();
|
||||||
ImGui::SameLine(0, 0);
|
if ( ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_AlwaysHorizontalScrollbar) )
|
||||||
static bool numbering = true;
|
|
||||||
ImGuiToolkit::ButtonToggle( ICON_FA_SORT_NUMERIC_DOWN, &numbering );
|
|
||||||
ImGui::SameLine();
|
|
||||||
bool clear = ImGui::Button( ICON_FA_BACKSPACE " Clear");
|
|
||||||
ImGui::SameLine();
|
|
||||||
bool copy = ImGui::Button( ICON_FA_COPY " Copy");
|
|
||||||
ImGui::SameLine();
|
|
||||||
Filter.Draw("Filter", -60.0f);
|
|
||||||
|
|
||||||
ImGui::Separator();
|
|
||||||
ImGui::BeginChild("scrolling", ImVec2(0,0), false, ImGuiWindowFlags_AlwaysHorizontalScrollbar);
|
|
||||||
|
|
||||||
if (clear)
|
|
||||||
Clear();
|
|
||||||
if (copy)
|
|
||||||
ImGui::LogToClipboard();
|
|
||||||
|
|
||||||
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO);
|
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
|
|
||||||
|
|
||||||
mtx.lock();
|
|
||||||
|
|
||||||
const char* buf = Buf.begin();
|
|
||||||
const char* buf_end = Buf.end();
|
|
||||||
if (Filter.IsActive())
|
|
||||||
{
|
|
||||||
// In this example we don't use the clipper when Filter is enabled.
|
|
||||||
// This is because we don't have a random access on the result on our filter.
|
|
||||||
// A real application processing logs with ten of thousands of entries may want to store the result of search/filter.
|
|
||||||
// especially if the filtering function is not trivial (e.g. reg-exp).
|
|
||||||
for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
|
|
||||||
{
|
{
|
||||||
const char* line_start = buf + LineOffsets[line_no];
|
if (clear)
|
||||||
const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
|
Clear();
|
||||||
if (Filter.PassFilter(line_start, line_end))
|
if (copy)
|
||||||
ImGui::TextUnformatted(line_start, line_end);
|
ImGui::LogToClipboard();
|
||||||
}
|
|
||||||
}
|
ImGuiToolkit::PushFont(ImGuiToolkit::FONT_MONO);
|
||||||
else
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
|
||||||
{
|
|
||||||
// The simplest and easy way to display the entire buffer:
|
mtx.lock();
|
||||||
// ImGui::TextUnformatted(buf_begin, buf_end);
|
|
||||||
// And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward to skip non-visible lines.
|
const char* buf = Buf.begin();
|
||||||
// Here we instead demonstrate using the clipper to only process lines that are within the visible area.
|
const char* buf_end = Buf.end();
|
||||||
// If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them on your side is recommended.
|
if (Filter.IsActive())
|
||||||
// Using ImGuiListClipper requires A) random access into your data, and B) items all being the same height,
|
|
||||||
// both of which we can handle since we an array pointing to the beginning of each line of text.
|
|
||||||
// When using the filter (in the block of code above) we don't have random access into the data to display anymore, which is why we don't use the clipper.
|
|
||||||
// Storing or skimming through the search result would make it possible (and would be recommended if you want to search through tens of thousands of entries)
|
|
||||||
ImGuiListClipper clipper;
|
|
||||||
clipper.Begin(LineOffsets.Size);
|
|
||||||
while (clipper.Step())
|
|
||||||
{
|
|
||||||
for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
|
|
||||||
{
|
{
|
||||||
const char* line_start = buf + LineOffsets[line_no] + (numbering?0:6);
|
// In this example we don't use the clipper when Filter is enabled.
|
||||||
const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
|
// This is because we don't have a random access on the result on our filter.
|
||||||
ImGui::TextUnformatted(line_start, line_end);
|
// A real application processing logs with ten of thousands of entries may want to store the result of search/filter.
|
||||||
|
// especially if the filtering function is not trivial (e.g. reg-exp).
|
||||||
|
for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
|
||||||
|
{
|
||||||
|
const char* line_start = buf + LineOffsets[line_no];
|
||||||
|
const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
|
||||||
|
if (Filter.PassFilter(line_start, line_end))
|
||||||
|
ImGui::TextUnformatted(line_start, line_end);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// The simplest and easy way to display the entire buffer:
|
||||||
|
// ImGui::TextUnformatted(buf_begin, buf_end);
|
||||||
|
// And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward to skip non-visible lines.
|
||||||
|
// Here we instead demonstrate using the clipper to only process lines that are within the visible area.
|
||||||
|
// If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them on your side is recommended.
|
||||||
|
// Using ImGuiListClipper requires A) random access into your data, and B) items all being the same height,
|
||||||
|
// both of which we can handle since we an array pointing to the beginning of each line of text.
|
||||||
|
// When using the filter (in the block of code above) we don't have random access into the data to display anymore, which is why we don't use the clipper.
|
||||||
|
// Storing or skimming through the search result would make it possible (and would be recommended if you want to search through tens of thousands of entries)
|
||||||
|
ImGuiListClipper clipper;
|
||||||
|
clipper.Begin(LineOffsets.Size);
|
||||||
|
while (clipper.Step())
|
||||||
|
{
|
||||||
|
for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
|
||||||
|
{
|
||||||
|
const char* line_start = buf + LineOffsets[line_no] + (numbering?0:6);
|
||||||
|
const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
|
||||||
|
ImGui::TextUnformatted(line_start, line_end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
clipper.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
mtx.unlock();
|
||||||
|
|
||||||
|
ImGui::PopStyleVar();
|
||||||
|
ImGui::PopFont();
|
||||||
|
|
||||||
|
// Auto scroll
|
||||||
|
if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
|
||||||
|
ImGui::SetScrollHereY(1.0f);
|
||||||
|
|
||||||
|
ImGui::EndChild();
|
||||||
}
|
}
|
||||||
clipper.End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
mtx.unlock();
|
|
||||||
|
|
||||||
ImGui::PopStyleVar();
|
|
||||||
ImGui::PopFont();
|
|
||||||
|
|
||||||
// Auto scroll
|
|
||||||
if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
|
|
||||||
ImGui::SetScrollHereY(1.0f);
|
|
||||||
|
|
||||||
ImGui::EndChild();
|
|
||||||
ImGui::End();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user