mirror of
https://github.com/Drezil/imgui.git
synced 2025-07-15 01:09:53 +02:00
Compare commits
29 Commits
Author | SHA1 | Date | |
---|---|---|---|
ee3355fe8e | |||
1e30400f80 | |||
3a64c77826 | |||
e19f0d370a | |||
6c192f3221 | |||
78645a7dba | |||
74363c5a43 | |||
0b10cf4bd7 | |||
3d84858755 | |||
fad5e45d2c | |||
05a3a9b962 | |||
85eee4a4c5 | |||
4c4798546e | |||
f768579377 | |||
e6eafd6fa8 | |||
1037bacc4b | |||
89a412690c | |||
af37fb1ee7 | |||
9f05a2bb16 | |||
48a944813c | |||
1d9a4748de | |||
36212b9ad9 | |||
bebadb9012 | |||
530e746daa | |||
ce481ec702 | |||
f1ea630dd0 | |||
ffc8264e9d | |||
ec625b7c49 | |||
f86286548e |
@ -168,11 +168,9 @@ LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
io.AddInputCharacter((unsigned short)wParam);
|
io.AddInputCharacter((unsigned short)wParam);
|
||||||
return true;
|
return true;
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
{
|
Cleanup();
|
||||||
Cleanup();
|
PostQuitMessage(0);
|
||||||
PostQuitMessage(0);
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
@ -180,14 +178,14 @@ LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
// Notify OS Input Method Editor of text input position (e.g. when using Japanese/Chinese inputs, otherwise this isn't needed)
|
// Notify OS Input Method Editor of text input position (e.g. when using Japanese/Chinese inputs, otherwise this isn't needed)
|
||||||
static void ImImpl_ImeSetInputScreenPosFn(int x, int y)
|
static void ImImpl_ImeSetInputScreenPosFn(int x, int y)
|
||||||
{
|
{
|
||||||
if (HIMC himc = ImmGetContext(hWnd))
|
if (HIMC himc = ImmGetContext(hWnd))
|
||||||
{
|
{
|
||||||
COMPOSITIONFORM cf;
|
COMPOSITIONFORM cf;
|
||||||
cf.ptCurrentPos.x = x;
|
cf.ptCurrentPos.x = x;
|
||||||
cf.ptCurrentPos.y = y;
|
cf.ptCurrentPos.y = y;
|
||||||
cf.dwStyle = CFS_FORCE_POSITION;
|
cf.dwStyle = CFS_FORCE_POSITION;
|
||||||
ImmSetCompositionWindow(himc, &cf);
|
ImmSetCompositionWindow(himc, &cf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitImGui()
|
void InitImGui()
|
||||||
@ -218,7 +216,7 @@ void InitImGui()
|
|||||||
io.KeyMap[ImGuiKey_Z] = 'Z';
|
io.KeyMap[ImGuiKey_Z] = 'Z';
|
||||||
|
|
||||||
io.RenderDrawListsFn = ImImpl_RenderDrawLists;
|
io.RenderDrawListsFn = ImImpl_RenderDrawLists;
|
||||||
io.ImeSetInputScreenPosFn = ImImpl_ImeSetInputScreenPosFn;
|
io.ImeSetInputScreenPosFn = ImImpl_ImeSetInputScreenPosFn;
|
||||||
|
|
||||||
// Create the vertex buffer
|
// Create the vertex buffer
|
||||||
if (g_pd3dDevice->CreateVertexBuffer(10000 * sizeof(CUSTOMVERTEX), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) < 0)
|
if (g_pd3dDevice->CreateVertexBuffer(10000 * sizeof(CUSTOMVERTEX), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) < 0)
|
||||||
@ -310,36 +308,31 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, int)
|
|||||||
|
|
||||||
UpdateImGui();
|
UpdateImGui();
|
||||||
|
|
||||||
// Create a simple window
|
|
||||||
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
|
|
||||||
static bool show_test_window = true;
|
static bool show_test_window = true;
|
||||||
static bool show_another_window = false;
|
static bool show_another_window = false;
|
||||||
static float f;
|
|
||||||
ImGui::Text("Hello, world!");
|
|
||||||
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
|
|
||||||
show_test_window ^= ImGui::Button("Test Window");
|
|
||||||
show_another_window ^= ImGui::Button("Another Window");
|
|
||||||
|
|
||||||
// Calculate and show framerate
|
// 1. Show a simple window
|
||||||
static float ms_per_frame[120] = { 0 };
|
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
|
||||||
static int ms_per_frame_idx = 0;
|
|
||||||
static float ms_per_frame_accum = 0.0f;
|
|
||||||
ms_per_frame_accum -= ms_per_frame[ms_per_frame_idx];
|
|
||||||
ms_per_frame[ms_per_frame_idx] = ImGui::GetIO().DeltaTime * 1000.0f;
|
|
||||||
ms_per_frame_accum += ms_per_frame[ms_per_frame_idx];
|
|
||||||
ms_per_frame_idx = (ms_per_frame_idx + 1) % 120;
|
|
||||||
const float ms_per_frame_avg = ms_per_frame_accum / 120;
|
|
||||||
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", ms_per_frame_avg, 1000.0f / ms_per_frame_avg);
|
|
||||||
|
|
||||||
// Show the ImGui test window
|
|
||||||
// Most of user example code is in ImGui::ShowTestWindow()
|
|
||||||
if (show_test_window)
|
|
||||||
{
|
{
|
||||||
ImGui::SetNewWindowDefaultPos(ImVec2(650, 20)); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly!
|
static float f;
|
||||||
ImGui::ShowTestWindow(&show_test_window);
|
ImGui::Text("Hello, world!");
|
||||||
|
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
|
||||||
|
show_test_window ^= ImGui::Button("Test Window");
|
||||||
|
show_another_window ^= ImGui::Button("Another Window");
|
||||||
|
|
||||||
|
// Calculate and show framerate
|
||||||
|
static float ms_per_frame[120] = { 0 };
|
||||||
|
static int ms_per_frame_idx = 0;
|
||||||
|
static float ms_per_frame_accum = 0.0f;
|
||||||
|
ms_per_frame_accum -= ms_per_frame[ms_per_frame_idx];
|
||||||
|
ms_per_frame[ms_per_frame_idx] = ImGui::GetIO().DeltaTime * 1000.0f;
|
||||||
|
ms_per_frame_accum += ms_per_frame[ms_per_frame_idx];
|
||||||
|
ms_per_frame_idx = (ms_per_frame_idx + 1) % 120;
|
||||||
|
const float ms_per_frame_avg = ms_per_frame_accum / 120;
|
||||||
|
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", ms_per_frame_avg, 1000.0f / ms_per_frame_avg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show another simple window
|
// 2. Show another simple window, this time using an explicit Begin/End pair
|
||||||
if (show_another_window)
|
if (show_another_window)
|
||||||
{
|
{
|
||||||
ImGui::Begin("Another Window", &show_another_window, ImVec2(200,100));
|
ImGui::Begin("Another Window", &show_another_window, ImVec2(200,100));
|
||||||
@ -347,6 +340,13 @@ int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE, LPWSTR, int)
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow()
|
||||||
|
if (show_test_window)
|
||||||
|
{
|
||||||
|
ImGui::SetNewWindowDefaultPos(ImVec2(650, 20)); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly!
|
||||||
|
ImGui::ShowTestWindow(&show_test_window);
|
||||||
|
}
|
||||||
|
|
||||||
// Rendering
|
// Rendering
|
||||||
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);
|
g_pd3dDevice->SetRenderState(D3DRS_ZENABLE, false);
|
||||||
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
|
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
static GLFWwindow* window;
|
static GLFWwindow* window;
|
||||||
static GLuint fontTex;
|
static GLuint fontTex;
|
||||||
|
static bool mousePressed[2] = { false, false };
|
||||||
static ImVec2 mousePosScale(1.0f, 1.0f);
|
static ImVec2 mousePosScale(1.0f, 1.0f);
|
||||||
|
|
||||||
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
|
// This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure)
|
||||||
@ -94,15 +95,15 @@ static void ImImpl_SetClipboardTextFn(const char* text)
|
|||||||
// Notify OS Input Method Editor of text input position (e.g. when using Japanese/Chinese inputs, otherwise this isn't needed)
|
// Notify OS Input Method Editor of text input position (e.g. when using Japanese/Chinese inputs, otherwise this isn't needed)
|
||||||
static void ImImpl_ImeSetInputScreenPosFn(int x, int y)
|
static void ImImpl_ImeSetInputScreenPosFn(int x, int y)
|
||||||
{
|
{
|
||||||
HWND hwnd = glfwGetWin32Window(window);
|
HWND hwnd = glfwGetWin32Window(window);
|
||||||
if (HIMC himc = ImmGetContext(hwnd))
|
if (HIMC himc = ImmGetContext(hwnd))
|
||||||
{
|
{
|
||||||
COMPOSITIONFORM cf;
|
COMPOSITIONFORM cf;
|
||||||
cf.ptCurrentPos.x = x;
|
cf.ptCurrentPos.x = x;
|
||||||
cf.ptCurrentPos.y = y;
|
cf.ptCurrentPos.y = y;
|
||||||
cf.dwStyle = CFS_FORCE_POSITION;
|
cf.dwStyle = CFS_FORCE_POSITION;
|
||||||
ImmSetCompositionWindow(himc, &cf);
|
ImmSetCompositionWindow(himc, &cf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -112,6 +113,12 @@ static void glfw_error_callback(int error, const char* description)
|
|||||||
fputs(description, stderr);
|
fputs(description, stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void glfw_mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
|
||||||
|
{
|
||||||
|
if (action == GLFW_PRESS && button >= 0 && button < 2)
|
||||||
|
mousePressed[button] = true;
|
||||||
|
}
|
||||||
|
|
||||||
static void glfw_scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
|
static void glfw_scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
@ -147,6 +154,7 @@ void InitGL()
|
|||||||
window = glfwCreateWindow(1280, 720, "ImGui OpenGL example", NULL, NULL);
|
window = glfwCreateWindow(1280, 720, "ImGui OpenGL example", NULL, NULL);
|
||||||
glfwMakeContextCurrent(window);
|
glfwMakeContextCurrent(window);
|
||||||
glfwSetKeyCallback(window, glfw_key_callback);
|
glfwSetKeyCallback(window, glfw_key_callback);
|
||||||
|
glfwSetMouseButtonCallback(window, glfw_mouse_button_callback);
|
||||||
glfwSetScrollCallback(window, glfw_scroll_callback);
|
glfwSetScrollCallback(window, glfw_scroll_callback);
|
||||||
glfwSetCharCallback(window, glfw_char_callback);
|
glfwSetCharCallback(window, glfw_char_callback);
|
||||||
|
|
||||||
@ -188,7 +196,7 @@ void InitImGui()
|
|||||||
io.SetClipboardTextFn = ImImpl_SetClipboardTextFn;
|
io.SetClipboardTextFn = ImImpl_SetClipboardTextFn;
|
||||||
io.GetClipboardTextFn = ImImpl_GetClipboardTextFn;
|
io.GetClipboardTextFn = ImImpl_GetClipboardTextFn;
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
io.ImeSetInputScreenPosFn = ImImpl_ImeSetInputScreenPosFn;
|
io.ImeSetInputScreenPosFn = ImImpl_ImeSetInputScreenPosFn;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Load font texture
|
// Load font texture
|
||||||
@ -198,35 +206,35 @@ void InitImGui()
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
// Default font (embedded in code)
|
// Default font (embedded in code)
|
||||||
const void* png_data;
|
const void* png_data;
|
||||||
unsigned int png_size;
|
unsigned int png_size;
|
||||||
ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size);
|
ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size);
|
||||||
int tex_x, tex_y, tex_comp;
|
int tex_x, tex_y, tex_comp;
|
||||||
void* tex_data = stbi_load_from_memory((const unsigned char*)png_data, (int)png_size, &tex_x, &tex_y, &tex_comp, 0);
|
void* tex_data = stbi_load_from_memory((const unsigned char*)png_data, (int)png_size, &tex_x, &tex_y, &tex_comp, 0);
|
||||||
IM_ASSERT(tex_data != NULL);
|
IM_ASSERT(tex_data != NULL);
|
||||||
#else
|
#else
|
||||||
// Custom font from filesystem
|
// Custom font from filesystem
|
||||||
io.Font = new ImBitmapFont();
|
io.Font = new ImBitmapFont();
|
||||||
io.Font->LoadFromFile("../../extra_fonts/mplus-2m-medium_18.fnt");
|
io.Font->LoadFromFile("../../extra_fonts/mplus-2m-medium_18.fnt");
|
||||||
IM_ASSERT(io.Font->IsLoaded());
|
IM_ASSERT(io.Font->IsLoaded());
|
||||||
|
|
||||||
int tex_x, tex_y, tex_comp;
|
int tex_x, tex_y, tex_comp;
|
||||||
void* tex_data = stbi_load("../../extra_fonts/mplus-2m-medium_18.png", &tex_x, &tex_y, &tex_comp, 0);
|
void* tex_data = stbi_load("../../extra_fonts/mplus-2m-medium_18.png", &tex_x, &tex_y, &tex_comp, 0);
|
||||||
IM_ASSERT(tex_data != NULL);
|
IM_ASSERT(tex_data != NULL);
|
||||||
|
|
||||||
// Automatically find white pixel from the texture we just loaded
|
// Automatically find white pixel from the texture we just loaded
|
||||||
// (io.FontTexUvForWhite needs to contains UV coordinates pointing to a white pixel in order to render solid objects)
|
// (io.FontTexUvForWhite needs to contains UV coordinates pointing to a white pixel in order to render solid objects)
|
||||||
for (int tex_data_off = 0; tex_data_off < tex_x*tex_y; tex_data_off++)
|
for (int tex_data_off = 0; tex_data_off < tex_x*tex_y; tex_data_off++)
|
||||||
if (((unsigned int*)tex_data)[tex_data_off] == 0xffffffff)
|
if (((unsigned int*)tex_data)[tex_data_off] == 0xffffffff)
|
||||||
{
|
{
|
||||||
io.FontTexUvForWhite = ImVec2((float)(tex_data_off % tex_x)/(tex_x), (float)(tex_data_off / tex_x)/(tex_y));
|
io.FontTexUvForWhite = ImVec2((float)(tex_data_off % tex_x)/(tex_x), (float)(tex_data_off / tex_x)/(tex_y));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_x, tex_y, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex_data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_x, tex_y, 0, GL_RGBA, GL_UNSIGNED_BYTE, tex_data);
|
||||||
stbi_image_free(tex_data);
|
stbi_image_free(tex_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateImGui()
|
void UpdateImGui()
|
||||||
@ -243,9 +251,9 @@ void UpdateImGui()
|
|||||||
// (we already got mouse wheel, keyboard keys & characters from glfw callbacks polled in glfwPollEvents())
|
// (we already got mouse wheel, keyboard keys & characters from glfw callbacks polled in glfwPollEvents())
|
||||||
double mouse_x, mouse_y;
|
double mouse_x, mouse_y;
|
||||||
glfwGetCursorPos(window, &mouse_x, &mouse_y);
|
glfwGetCursorPos(window, &mouse_x, &mouse_y);
|
||||||
io.MousePos = ImVec2((float)mouse_x * mousePosScale.x, (float)mouse_y * mousePosScale.y); // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
|
io.MousePos = ImVec2((float)mouse_x * mousePosScale.x, (float)mouse_y * mousePosScale.y); // Mouse position, in pixels (set to -1,-1 if no mouse / on another screen, etc.)
|
||||||
io.MouseDown[0] = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) != 0;
|
io.MouseDown[0] = mousePressed[0] || glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) != 0; // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame.
|
||||||
io.MouseDown[1] = glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) != 0;
|
io.MouseDown[1] = mousePressed[1] || glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) != 0;
|
||||||
|
|
||||||
// Start the frame
|
// Start the frame
|
||||||
ImGui::NewFrame();
|
ImGui::NewFrame();
|
||||||
@ -260,40 +268,36 @@ int main(int argc, char** argv)
|
|||||||
while (!glfwWindowShouldClose(window))
|
while (!glfwWindowShouldClose(window))
|
||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
mousePressed[0] = mousePressed[1] = false;
|
||||||
io.MouseWheel = 0;
|
io.MouseWheel = 0;
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
UpdateImGui();
|
UpdateImGui();
|
||||||
|
|
||||||
// Create a simple window
|
|
||||||
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
|
|
||||||
static bool show_test_window = true;
|
static bool show_test_window = true;
|
||||||
static bool show_another_window = false;
|
static bool show_another_window = false;
|
||||||
static float f;
|
|
||||||
ImGui::Text("Hello, world!");
|
|
||||||
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
|
|
||||||
show_test_window ^= ImGui::Button("Test Window");
|
|
||||||
show_another_window ^= ImGui::Button("Another Window");
|
|
||||||
|
|
||||||
// Calculate and show framerate
|
// 1. Show a simple window
|
||||||
static float ms_per_frame[120] = { 0 };
|
// Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug"
|
||||||
static int ms_per_frame_idx = 0;
|
|
||||||
static float ms_per_frame_accum = 0.0f;
|
|
||||||
ms_per_frame_accum -= ms_per_frame[ms_per_frame_idx];
|
|
||||||
ms_per_frame[ms_per_frame_idx] = ImGui::GetIO().DeltaTime * 1000.0f;
|
|
||||||
ms_per_frame_accum += ms_per_frame[ms_per_frame_idx];
|
|
||||||
ms_per_frame_idx = (ms_per_frame_idx + 1) % 120;
|
|
||||||
const float ms_per_frame_avg = ms_per_frame_accum / 120;
|
|
||||||
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", ms_per_frame_avg, 1000.0f / ms_per_frame_avg);
|
|
||||||
|
|
||||||
// Show the ImGui test window
|
|
||||||
// Most of user example code is in ImGui::ShowTestWindow()
|
|
||||||
if (show_test_window)
|
|
||||||
{
|
{
|
||||||
ImGui::SetNewWindowDefaultPos(ImVec2(650, 20)); // Normally user code doesn't need/want to call it because positions are saved in .ini file anyway. Here we just want to make the demo initial state a bit more friendly!
|
static float f;
|
||||||
ImGui::ShowTestWindow(&show_test_window);
|
ImGui::Text("Hello, world!");
|
||||||
|
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
|
||||||
|
show_test_window ^= ImGui::Button("Test Window");
|
||||||
|
show_another_window ^= ImGui::Button("Another Window");
|
||||||
|
|
||||||
|
// Calculate and show framerate
|
||||||
|
static float ms_per_frame[120] = { 0 };
|
||||||
|
static int ms_per_frame_idx = 0;
|
||||||
|
static float ms_per_frame_accum = 0.0f;
|
||||||
|
ms_per_frame_accum -= ms_per_frame[ms_per_frame_idx];
|
||||||
|
ms_per_frame[ms_per_frame_idx] = ImGui::GetIO().DeltaTime * 1000.0f;
|
||||||
|
ms_per_frame_accum += ms_per_frame[ms_per_frame_idx];
|
||||||
|
ms_per_frame_idx = (ms_per_frame_idx + 1) % 120;
|
||||||
|
const float ms_per_frame_avg = ms_per_frame_accum / 120;
|
||||||
|
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", ms_per_frame_avg, 1000.0f / ms_per_frame_avg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show another simple window
|
// 2. Show another simple window, this time using an explicit Begin/End pair
|
||||||
if (show_another_window)
|
if (show_another_window)
|
||||||
{
|
{
|
||||||
ImGui::Begin("Another Window", &show_another_window, ImVec2(200,100));
|
ImGui::Begin("Another Window", &show_another_window, ImVec2(200,100));
|
||||||
@ -301,6 +305,13 @@ int main(int argc, char** argv)
|
|||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow()
|
||||||
|
if (show_test_window)
|
||||||
|
{
|
||||||
|
ImGui::SetNewWindowDefaultPos(ImVec2(650, 20)); // Normally user code doesn't need/want to call this, because positions are saved in .ini file. Here we just want to make the demo initial state a bit more friendly!
|
||||||
|
ImGui::ShowTestWindow(&show_test_window);
|
||||||
|
}
|
||||||
|
|
||||||
// Rendering
|
// Rendering
|
||||||
glViewport(0, 0, (int)io.DisplaySize.x, (int)io.DisplaySize.y);
|
glViewport(0, 0, (int)io.DisplaySize.x, (int)io.DisplaySize.y);
|
||||||
glClearColor(0.8f, 0.6f, 0.6f, 1.0f);
|
glClearColor(0.8f, 0.6f, 0.6f, 1.0f);
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
//---- Don't implement default clipboard handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions)
|
//---- Don't implement default clipboard handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions)
|
||||||
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS
|
//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS
|
||||||
|
|
||||||
//---- Include imgui_user.cpp at the end of imgui.cpp so you can include code that extends ImGui using its private data/functions.
|
//---- Include imgui_user.inl at the end of imgui.cpp so you can include code that extends ImGui using its private data/functions.
|
||||||
//#define IMGUI_INCLUDE_IMGUI_USER_CPP
|
//#define IMGUI_INCLUDE_IMGUI_USER_INL
|
||||||
|
|
||||||
//---- Define implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4.
|
//---- Define implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4.
|
||||||
/*
|
/*
|
||||||
@ -32,13 +32,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//---- Freely implement extra functions within the ImGui:: namespace.
|
//---- Freely implement extra functions within the ImGui:: namespace.
|
||||||
//---- Declare helpers or widgets implemented in imgui_user.cpp or elsewhere, so end-user doesn't need to include multiple files.
|
//---- Declare helpers or widgets implemented in imgui_user.inl or elsewhere, so end-user doesn't need to include multiple files.
|
||||||
//---- e.g. you can create variants of the ImGui::Value() helper for your low-level math types.
|
//---- e.g. you can create variants of the ImGui::Value() helper for your low-level math types.
|
||||||
/*
|
/*
|
||||||
namespace ImGui
|
namespace ImGui
|
||||||
{
|
{
|
||||||
void Value(const char* prefix, const MyVec2& v, const char* float_format = NULL);
|
void Value(const char* prefix, const MyVec2& v, const char* float_format = NULL);
|
||||||
void Value(const char* prefix, const MyVec4& v, const char* float_format = NULL);
|
void Value(const char* prefix, const MyVec4& v, const char* float_format = NULL);
|
||||||
};
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
400
imgui.h
400
imgui.h
@ -1,4 +1,4 @@
|
|||||||
// ImGui library v1.13
|
// ImGui library v1.15
|
||||||
// See .cpp file for commentary.
|
// See .cpp file for commentary.
|
||||||
// See ImGui::ShowTestWindow() for sample code.
|
// See ImGui::ShowTestWindow() for sample code.
|
||||||
// Read 'Programmer guide' in .cpp for notes on how to setup ImGui in your codebase.
|
// Read 'Programmer guide' in .cpp for notes on how to setup ImGui in your codebase.
|
||||||
@ -25,10 +25,15 @@ struct ImGuiWindow;
|
|||||||
#define IM_ASSERT(_EXPR) assert(_EXPR)
|
#define IM_ASSERT(_EXPR) assert(_EXPR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef IMGUI_API
|
||||||
|
#define IMGUI_API
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef unsigned int ImU32;
|
typedef unsigned int ImU32;
|
||||||
typedef unsigned short ImWchar;
|
typedef unsigned short ImWchar;
|
||||||
typedef ImU32 ImGuiID;
|
typedef ImU32 ImGuiID;
|
||||||
typedef int ImGuiCol; // enum ImGuiCol_
|
typedef int ImGuiCol; // enum ImGuiCol_
|
||||||
|
typedef int ImGuiStyleVar; // enum ImGuiStyleVar_
|
||||||
typedef int ImGuiKey; // enum ImGuiKey_
|
typedef int ImGuiKey; // enum ImGuiKey_
|
||||||
typedef int ImGuiColorEditMode; // enum ImGuiColorEditMode_
|
typedef int ImGuiColorEditMode; // enum ImGuiColorEditMode_
|
||||||
typedef int ImGuiWindowFlags; // enum ImGuiWindowFlags_
|
typedef int ImGuiWindowFlags; // enum ImGuiWindowFlags_
|
||||||
@ -60,10 +65,10 @@ struct ImVec4
|
|||||||
namespace ImGui
|
namespace ImGui
|
||||||
{
|
{
|
||||||
// Proxy functions to access the MemAllocFn/MemFreeFn/MemReallocFn pointers in ImGui::GetIO(). The only reason they exist here is to allow ImVector<> to compile inline.
|
// Proxy functions to access the MemAllocFn/MemFreeFn/MemReallocFn pointers in ImGui::GetIO(). The only reason they exist here is to allow ImVector<> to compile inline.
|
||||||
void* MemAlloc(size_t sz);
|
IMGUI_API void* MemAlloc(size_t sz);
|
||||||
void MemFree(void* ptr);
|
IMGUI_API void MemFree(void* ptr);
|
||||||
void* MemRealloc(void* ptr, size_t sz);
|
IMGUI_API void* MemRealloc(void* ptr, size_t sz);
|
||||||
};
|
}
|
||||||
|
|
||||||
// std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug).
|
// std::vector<> like class to avoid dragging dependencies (also: windows implementation of STL with debug enabled is absurdly slow, so let's bypass it so our code runs fast in debug).
|
||||||
// Use '#define ImVector std::vector' if you want to use the STL type or your own type.
|
// Use '#define ImVector std::vector' if you want to use the STL type or your own type.
|
||||||
@ -129,154 +134,170 @@ public:
|
|||||||
namespace ImGui
|
namespace ImGui
|
||||||
{
|
{
|
||||||
// Main
|
// Main
|
||||||
ImGuiIO& GetIO();
|
IMGUI_API ImGuiIO& GetIO();
|
||||||
ImGuiStyle& GetStyle();
|
IMGUI_API ImGuiStyle& GetStyle();
|
||||||
void NewFrame();
|
IMGUI_API void NewFrame();
|
||||||
void Render();
|
IMGUI_API void Render();
|
||||||
void Shutdown();
|
IMGUI_API void Shutdown();
|
||||||
void ShowUserGuide();
|
IMGUI_API void ShowUserGuide();
|
||||||
void ShowStyleEditor(ImGuiStyle* ref = NULL);
|
IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL);
|
||||||
void ShowTestWindow(bool* open = NULL);
|
IMGUI_API void ShowTestWindow(bool* open = NULL);
|
||||||
|
|
||||||
// Window
|
// Window
|
||||||
bool Begin(const char* name = "Debug", bool* open = NULL, ImVec2 size = ImVec2(0,0), float fill_alpha = -1.0f, ImGuiWindowFlags flags = 0);
|
IMGUI_API bool Begin(const char* name = "Debug", bool* open = NULL, ImVec2 size = ImVec2(0,0), float fill_alpha = -1.0f, ImGuiWindowFlags flags = 0); // return false when window is collapsed, so you can early out in your code.
|
||||||
void End();
|
IMGUI_API void End();
|
||||||
void BeginChild(const char* str_id, ImVec2 size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0);
|
IMGUI_API void BeginChild(const char* str_id, ImVec2 size = ImVec2(0,0), bool border = false, ImGuiWindowFlags extra_flags = 0); // size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). on each axis.
|
||||||
void EndChild();
|
IMGUI_API void EndChild();
|
||||||
bool GetWindowIsFocused();
|
IMGUI_API bool GetWindowIsFocused();
|
||||||
ImVec2 GetWindowSize();
|
IMGUI_API ImVec2 GetWindowSize();
|
||||||
float GetWindowWidth();
|
IMGUI_API float GetWindowWidth();
|
||||||
ImVec2 GetWindowPos(); // you should rarely need/care about the window position, but it can be useful if you want to use your own drawing.
|
IMGUI_API void SetWindowSize(const ImVec2& size); // set to ImVec2(0,0) to force an auto-fit
|
||||||
void SetWindowPos(const ImVec2& pos); // set current window pos.
|
IMGUI_API ImVec2 GetWindowPos(); // you should rarely need/care about the window position, but it can be useful if you want to use your own drawing.
|
||||||
ImVec2 GetWindowContentRegionMin();
|
IMGUI_API void SetWindowPos(const ImVec2& pos); // set current window pos.
|
||||||
ImVec2 GetWindowContentRegionMax();
|
IMGUI_API ImVec2 GetContentRegionMax(); // window or current column boundaries
|
||||||
ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives.
|
IMGUI_API ImVec2 GetWindowContentRegionMin(); // window boundaries
|
||||||
void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together.
|
IMGUI_API ImVec2 GetWindowContentRegionMax();
|
||||||
void SetScrollPosHere(); // adjust scrolling position to center into the current cursor position.
|
IMGUI_API ImDrawList* GetWindowDrawList(); // get rendering command-list if you want to append your own draw primitives.
|
||||||
void SetTreeStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it).
|
IMGUI_API ImFont GetWindowFont();
|
||||||
ImGuiStorage* GetTreeStateStorage();
|
IMGUI_API float GetWindowFontSize();
|
||||||
void PushItemWidth(float item_width);
|
IMGUI_API void SetWindowFontScale(float scale); // per-window font scale. Adjust IO.FontBaseScale if you want to scale all windows together.
|
||||||
void PopItemWidth();
|
IMGUI_API void SetScrollPosHere(); // adjust scrolling position to center into the current cursor position.
|
||||||
float GetItemWidth();
|
IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use 'offset' to access sub components of a multiple component widget.
|
||||||
void PushAllowKeyboardFocus(bool v);
|
IMGUI_API void SetTreeStateStorage(ImGuiStorage* tree); // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it).
|
||||||
void PopAllowKeyboardFocus();
|
IMGUI_API ImGuiStorage* GetTreeStateStorage();
|
||||||
void PushStyleColor(ImGuiCol idx, const ImVec4& col);
|
|
||||||
void PopStyleColor();
|
IMGUI_API void PushItemWidth(float item_width); // width of items for the common item+label case. default to ~2/3 of windows width.
|
||||||
|
IMGUI_API void PopItemWidth();
|
||||||
|
IMGUI_API float GetItemWidth();
|
||||||
|
IMGUI_API void PushAllowKeyboardFocus(bool v); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets.
|
||||||
|
IMGUI_API void PopAllowKeyboardFocus();
|
||||||
|
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
|
||||||
|
IMGUI_API void PopStyleColor();
|
||||||
|
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val);
|
||||||
|
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val);
|
||||||
|
IMGUI_API void PopStyleVar();
|
||||||
|
IMGUI_API void PushTextWrapPos(float wrap_pos_x); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space.
|
||||||
|
IMGUI_API void PopTextWrapPos();
|
||||||
|
|
||||||
// Tooltip
|
// Tooltip
|
||||||
void SetTooltip(const char* fmt, ...); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins.
|
IMGUI_API void SetTooltip(const char* fmt, ...); // set tooltip under mouse-cursor, typically use with ImGui::IsHovered(). last call wins.
|
||||||
void SetTooltipV(const char* fmt, va_list args);
|
IMGUI_API void SetTooltipV(const char* fmt, va_list args);
|
||||||
void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text.
|
IMGUI_API void BeginTooltip(); // use to create full-featured tooltip windows that aren't just text.
|
||||||
void EndTooltip();
|
IMGUI_API void EndTooltip();
|
||||||
|
|
||||||
// Layout
|
// Layout
|
||||||
void Separator(); // horizontal line
|
IMGUI_API void Separator(); // horizontal line
|
||||||
void SameLine(int column_x = 0, int spacing_w = -1); // call between widgets to layout them horizontally
|
IMGUI_API void SameLine(int column_x = 0, int spacing_w = -1); // call between widgets to layout them horizontally
|
||||||
void Spacing();
|
IMGUI_API void Spacing();
|
||||||
void Columns(int count = 1, const char* id = NULL, bool border=true); // setup number of columns
|
IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border=true); // setup number of columns
|
||||||
void NextColumn(); // next column
|
IMGUI_API void NextColumn(); // next column
|
||||||
float GetColumnOffset(int column_index = -1);
|
IMGUI_API float GetColumnOffset(int column_index = -1);
|
||||||
void SetColumnOffset(int column_index, float offset);
|
IMGUI_API void SetColumnOffset(int column_index, float offset);
|
||||||
float GetColumnWidth(int column_index = -1);
|
IMGUI_API float GetColumnWidth(int column_index = -1);
|
||||||
ImVec2 GetCursorPos(); // cursor position is relative to window position
|
IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position
|
||||||
void SetCursorPos(const ImVec2& pos); // "
|
IMGUI_API void SetCursorPos(const ImVec2& pos); // "
|
||||||
void SetCursorPosX(float x); // "
|
IMGUI_API void SetCursorPosX(float x); // "
|
||||||
void SetCursorPosY(float y); // "
|
IMGUI_API void SetCursorPosY(float y); // "
|
||||||
ImVec2 GetCursorScreenPos(); // cursor position in screen space
|
IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in screen space
|
||||||
void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets.
|
IMGUI_API void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets.
|
||||||
float GetTextLineSpacing();
|
IMGUI_API float GetTextLineSpacing();
|
||||||
float GetTextLineHeight();
|
IMGUI_API float GetTextLineHeight();
|
||||||
|
|
||||||
// ID scopes
|
// ID scopes
|
||||||
void PushID(const char* str_id);
|
IMGUI_API void PushID(const char* str_id);
|
||||||
void PushID(const void* ptr_id);
|
IMGUI_API void PushID(const void* ptr_id);
|
||||||
void PushID(const int int_id);
|
IMGUI_API void PushID(const int int_id);
|
||||||
void PopID();
|
IMGUI_API void PopID();
|
||||||
|
|
||||||
// Widgets
|
// Widgets
|
||||||
void Text(const char* fmt, ...);
|
IMGUI_API void Text(const char* fmt, ...);
|
||||||
void TextV(const char* fmt, va_list args);
|
IMGUI_API void TextV(const char* fmt, va_list args);
|
||||||
void TextColored(const ImVec4& col, const char* fmt, ...); // shortcut to doing PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
|
IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
|
||||||
void TextColoredV(const ImVec4& col, const char* fmt, va_list args);
|
IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args);
|
||||||
void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done to any bounded stack buffer, better for long chunks of text.
|
IMGUI_API void TextWrapped(const char* fmt, ...); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();
|
||||||
void LabelText(const char* label, const char* fmt, ...);
|
IMGUI_API void TextWrappedV(const char* fmt, va_list args);
|
||||||
void LabelTextV(const char* label, const char* fmt, va_list args);
|
IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done to any bounded stack buffer, recommended for long chunks of text.
|
||||||
void BulletText(const char* fmt, ...);
|
IMGUI_API void LabelText(const char* label, const char* fmt, ...); // display text+label aligned the same way as value+label widgets
|
||||||
void BulletTextV(const char* fmt, va_list args);
|
IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args);
|
||||||
bool Button(const char* label, ImVec2 size = ImVec2(0,0), bool repeat_when_held = false);
|
IMGUI_API void BulletText(const char* fmt, ...);
|
||||||
bool SmallButton(const char* label);
|
IMGUI_API void BulletTextV(const char* fmt, va_list args);
|
||||||
bool CollapsingHeader(const char* label, const char* str_id = NULL, const bool display_frame = true, const bool default_open = false);
|
IMGUI_API bool Button(const char* label, ImVec2 size = ImVec2(0,0), bool repeat_when_held = false);
|
||||||
bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix. Use power!=1.0 for logarithmic sliders.
|
IMGUI_API bool SmallButton(const char* label);
|
||||||
bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
IMGUI_API bool CollapsingHeader(const char* label, const char* str_id = NULL, const bool display_frame = true, const bool default_open = false);
|
||||||
bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f); // adjust display_format to decorate the value with a prefix or a suffix. Use power!=1.0 for logarithmic sliders.
|
||||||
bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
||||||
bool SliderAngle(const char* label, float* v, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); // *v in radians
|
IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
||||||
bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f");
|
IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* display_format = "%.3f", float power = 1.0f);
|
||||||
void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), size_t stride = sizeof(float));
|
IMGUI_API bool SliderAngle(const char* label, float* v, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f); // *v in radians
|
||||||
void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), size_t stride = sizeof(float));
|
IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* display_format = "%.0f");
|
||||||
bool Checkbox(const char* label, bool* v);
|
IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), size_t stride = sizeof(float));
|
||||||
bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
|
IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
|
||||||
bool RadioButton(const char* label, bool active);
|
IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), size_t stride = sizeof(float));
|
||||||
bool RadioButton(const char* label, int* v, int v_button);
|
IMGUI_API void PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0));
|
||||||
bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0);
|
IMGUI_API bool Checkbox(const char* label, bool* v);
|
||||||
bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
|
IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
|
||||||
bool InputFloat2(const char* label, float v[2], int decimal_precision = -1);
|
IMGUI_API bool RadioButton(const char* label, bool active);
|
||||||
bool InputFloat3(const char* label, float v[3], int decimal_precision = -1);
|
IMGUI_API bool RadioButton(const char* label, int* v, int v_button);
|
||||||
bool InputFloat4(const char* label, float v[4], int decimal_precision = -1);
|
IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0);
|
||||||
bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0);
|
IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, int decimal_precision = -1, ImGuiInputTextFlags extra_flags = 0);
|
||||||
bool Combo(const char* label, int* current_item, const char** items, int items_count, int popup_height_items = 7);
|
IMGUI_API bool InputFloat2(const char* label, float v[2], int decimal_precision = -1);
|
||||||
bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_height_items = 7); // Separate items with \0, end item-list with \0\0
|
IMGUI_API bool InputFloat3(const char* label, float v[3], int decimal_precision = -1);
|
||||||
bool Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_height_items = 7);
|
IMGUI_API bool InputFloat4(const char* label, float v[4], int decimal_precision = -1);
|
||||||
bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true);
|
IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags extra_flags = 0);
|
||||||
bool ColorEdit3(const char* label, float col[3]);
|
IMGUI_API bool Combo(const char* label, int* current_item, const char** items, int items_count, int popup_height_items = 7);
|
||||||
bool ColorEdit4(const char* label, float col[4], bool show_alpha = true);
|
IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_height_items = 7); // separate items with \0, end item-list with \0\0
|
||||||
void ColorEditMode(ImGuiColorEditMode mode);
|
IMGUI_API bool Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_height_items = 7);
|
||||||
bool TreeNode(const char* str_label_id); // if returning 'true' the node is open and the user is responsible for calling TreePop
|
IMGUI_API bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true);
|
||||||
bool TreeNode(const char* str_id, const char* fmt, ...); // "
|
IMGUI_API bool ColorEdit3(const char* label, float col[3]);
|
||||||
bool TreeNode(const void* ptr_id, const char* fmt, ...); // "
|
IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true);
|
||||||
bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // "
|
IMGUI_API void ColorEditMode(ImGuiColorEditMode mode);
|
||||||
bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // "
|
IMGUI_API bool TreeNode(const char* str_label_id); // if returning 'true' the node is open and the user is responsible for calling TreePop
|
||||||
void TreePush(const char* str_id = NULL); // already called by TreeNode(), but you can call Push/Pop yourself for layouting purpose
|
IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...); // "
|
||||||
void TreePush(const void* ptr_id = NULL); // "
|
IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...); // "
|
||||||
void TreePop();
|
IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args); // "
|
||||||
void OpenNextNode(bool open); // force open/close the next TreeNode or CollapsingHeader
|
IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args); // "
|
||||||
|
IMGUI_API void TreePush(const char* str_id = NULL); // already called by TreeNode(), but you can call Push/Pop yourself for layouting purpose
|
||||||
|
IMGUI_API void TreePush(const void* ptr_id = NULL); // "
|
||||||
|
IMGUI_API void TreePop();
|
||||||
|
IMGUI_API void OpenNextNode(bool open); // force open/close the next TreeNode or CollapsingHeader
|
||||||
|
|
||||||
// Value helper output "name: value"
|
// Value helper output "name: value"
|
||||||
// Freely declare your own in the ImGui namespace.
|
// Freely declare your own in the ImGui namespace.
|
||||||
void Value(const char* prefix, bool b);
|
IMGUI_API void Value(const char* prefix, bool b);
|
||||||
void Value(const char* prefix, int v);
|
IMGUI_API void Value(const char* prefix, int v);
|
||||||
void Value(const char* prefix, unsigned int v);
|
IMGUI_API void Value(const char* prefix, unsigned int v);
|
||||||
void Value(const char* prefix, float v, const char* float_format = NULL);
|
IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
|
||||||
void Color(const char* prefix, const ImVec4& v);
|
IMGUI_API void Color(const char* prefix, const ImVec4& v);
|
||||||
void Color(const char* prefix, unsigned int v);
|
IMGUI_API void Color(const char* prefix, unsigned int v);
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
void LogButtons();
|
IMGUI_API void LogButtons();
|
||||||
void LogToTTY(int max_depth = -1);
|
IMGUI_API void LogToTTY(int max_depth = -1);
|
||||||
void LogToFile(int max_depth = -1, const char* filename = NULL);
|
IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL);
|
||||||
void LogToClipboard(int max_depth = -1);
|
IMGUI_API void LogToClipboard(int max_depth = -1);
|
||||||
|
|
||||||
// Utilities
|
// Utilities
|
||||||
void SetNewWindowDefaultPos(const ImVec2& pos); // set position of window that do
|
IMGUI_API void SetNewWindowDefaultPos(const ImVec2& pos); // set position of window that do
|
||||||
bool IsHovered(); // was the last item active area hovered by mouse?
|
IMGUI_API bool IsItemHovered(); // was the last item active area hovered by mouse?
|
||||||
ImVec2 GetItemBoxMin(); // get bounding box of last item
|
IMGUI_API bool IsItemFocused(); // was the last item focused for keyboard input?
|
||||||
ImVec2 GetItemBoxMax(); // get bounding box of last item
|
IMGUI_API ImVec2 GetItemBoxMin(); // get bounding box of last item
|
||||||
bool IsClipped(const ImVec2& item_size); // to perform coarse clipping on user's side (as an optimisation)
|
IMGUI_API ImVec2 GetItemBoxMax(); // get bounding box of last item
|
||||||
bool IsKeyPressed(int key_index, bool repeat = true); // key_index into the keys_down[512] array, imgui doesn't know the semantic of each entry
|
IMGUI_API bool IsClipped(const ImVec2& item_size); // to perform coarse clipping on user's side (as an optimization)
|
||||||
bool IsMouseClicked(int button, bool repeat = false);
|
IMGUI_API bool IsKeyPressed(int key_index, bool repeat = true); // key_index into the keys_down[512] array, imgui doesn't know the semantic of each entry
|
||||||
bool IsMouseDoubleClicked(int button);
|
IMGUI_API bool IsMouseClicked(int button, bool repeat = false);
|
||||||
bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window)
|
IMGUI_API bool IsMouseDoubleClicked(int button);
|
||||||
bool IsMouseHoveringAnyWindow(); // is mouse hovering any active imgui window
|
IMGUI_API bool IsMouseHoveringWindow(); // is mouse hovering current window ("window" in API names always refer to current window)
|
||||||
bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max); // is mouse hovering given bounding box
|
IMGUI_API bool IsMouseHoveringAnyWindow(); // is mouse hovering any active imgui window
|
||||||
bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window
|
IMGUI_API bool IsMouseHoveringBox(const ImVec2& box_min, const ImVec2& box_max); // is mouse hovering given bounding box
|
||||||
ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
|
IMGUI_API bool IsPosHoveringAnyWindow(const ImVec2& pos); // is given position hovering any active imgui window
|
||||||
float GetTime();
|
IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
|
||||||
int GetFrameCount();
|
IMGUI_API float GetTime();
|
||||||
const char* GetStyleColorName(ImGuiCol idx);
|
IMGUI_API int GetFrameCount();
|
||||||
void GetDefaultFontData(const void** fnt_data, unsigned int* fnt_size, const void** png_data, unsigned int* png_size);
|
IMGUI_API const char* GetStyleColorName(ImGuiCol idx);
|
||||||
ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, const bool hide_text_after_hash = true);
|
IMGUI_API void GetDefaultFontData(const void** fnt_data, unsigned int* fnt_size, const void** png_data, unsigned int* png_size);
|
||||||
|
IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_hash = true, float wrap_width = -1.0f);
|
||||||
|
|
||||||
}; // namespace ImGui
|
} // namespace ImGui
|
||||||
|
|
||||||
// Flags for ImGui::Begin()
|
// Flags for ImGui::Begin()
|
||||||
enum ImGuiWindowFlags_
|
enum ImGuiWindowFlags_
|
||||||
@ -328,6 +349,7 @@ enum ImGuiKey_
|
|||||||
ImGuiKey_COUNT,
|
ImGuiKey_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Enumeration for PushStyleColor() / PopStyleColor()
|
||||||
enum ImGuiCol_
|
enum ImGuiCol_
|
||||||
{
|
{
|
||||||
ImGuiCol_Text,
|
ImGuiCol_Text,
|
||||||
@ -370,6 +392,19 @@ enum ImGuiCol_
|
|||||||
ImGuiCol_COUNT,
|
ImGuiCol_COUNT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Enumeration for PushStyleVar() / PopStyleVar()
|
||||||
|
// NB: the enum only refers to fields of ImGuiStyle() which makes sense to be pushed/poped in UI code. Feel free to add others.
|
||||||
|
enum ImGuiStyleVar_
|
||||||
|
{
|
||||||
|
ImGuiStyleVar_Alpha, // float
|
||||||
|
ImGuiStyleVar_WindowPadding, // ImVec2
|
||||||
|
ImGuiStyleVar_FramePadding, // ImVec2
|
||||||
|
ImGuiStyleVar_ItemSpacing, // ImVec2
|
||||||
|
ImGuiStyleVar_ItemInnerSpacing, // ImVec2
|
||||||
|
ImGuiStyleVar_TreeNodeSpacing, // float
|
||||||
|
ImGuiStyleVar_ColumnsMinSpacing, // float
|
||||||
|
};
|
||||||
|
|
||||||
enum ImGuiColorEditMode_
|
enum ImGuiColorEditMode_
|
||||||
{
|
{
|
||||||
ImGuiColorEditMode_UserSelect = -1,
|
ImGuiColorEditMode_UserSelect = -1,
|
||||||
@ -395,7 +430,7 @@ struct ImGuiStyle
|
|||||||
float ScrollBarWidth; // Width of the vertical scroll bar
|
float ScrollBarWidth; // Width of the vertical scroll bar
|
||||||
ImVec4 Colors[ImGuiCol_COUNT];
|
ImVec4 Colors[ImGuiCol_COUNT];
|
||||||
|
|
||||||
ImGuiStyle();
|
IMGUI_API ImGuiStyle();
|
||||||
};
|
};
|
||||||
|
|
||||||
// This is where your app communicate with ImGui. Call ImGui::GetIO() to access.
|
// This is where your app communicate with ImGui. Call ImGui::GetIO() to access.
|
||||||
@ -419,9 +454,11 @@ struct ImGuiIO
|
|||||||
ImVec2 FontTexUvForWhite; // = (0.0f,0.0f) // Font texture must have a white pixel at this UV coordinate. Adjust if you are using custom texture.
|
ImVec2 FontTexUvForWhite; // = (0.0f,0.0f) // Font texture must have a white pixel at this UV coordinate. Adjust if you are using custom texture.
|
||||||
float FontBaseScale; // = 1.0f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale()
|
float FontBaseScale; // = 1.0f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale()
|
||||||
bool FontAllowUserScaling; // = false // Set to allow scaling text with CTRL+Wheel.
|
bool FontAllowUserScaling; // = false // Set to allow scaling text with CTRL+Wheel.
|
||||||
ImWchar FontFallbackGlyph; // = '?' // Replacement glyph is one isn't found.
|
ImWchar FontFallbackGlyph; // = '?' // Replacement glyph is one isn't found.
|
||||||
float PixelCenterOffset; // = 0.0f // Try to set to 0.5f or 0.375f if rendering is blurry
|
float PixelCenterOffset; // = 0.0f // Try to set to 0.5f or 0.375f if rendering is blurry
|
||||||
|
|
||||||
|
void* UserData; // = NULL // Store your own data for retrieval by callbacks.
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// User Functions
|
// User Functions
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
@ -453,10 +490,10 @@ struct ImGuiIO
|
|||||||
bool KeyCtrl; // Keyboard modifier pressed: Control
|
bool KeyCtrl; // Keyboard modifier pressed: Control
|
||||||
bool KeyShift; // Keyboard modifier pressed: Shift
|
bool KeyShift; // Keyboard modifier pressed: Shift
|
||||||
bool KeysDown[512]; // Keyboard keys that are pressed (in whatever order user naturally has access to keyboard data)
|
bool KeysDown[512]; // Keyboard keys that are pressed (in whatever order user naturally has access to keyboard data)
|
||||||
ImWchar InputCharacters[16]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper.
|
ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper.
|
||||||
|
|
||||||
// Function
|
// Function
|
||||||
void AddInputCharacter(ImWchar); // Helper to add a new character into InputCharacters[]
|
IMGUI_API void AddInputCharacter(ImWchar c); // Helper to add a new character into InputCharacters[]
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// Output - Retrieve after calling NewFrame(), you can use them to discard inputs or hide them from the rest of your application
|
// Output - Retrieve after calling NewFrame(), you can use them to discard inputs or hide them from the rest of your application
|
||||||
@ -478,7 +515,7 @@ struct ImGuiIO
|
|||||||
float MouseDownTime[5];
|
float MouseDownTime[5];
|
||||||
float KeysDownTime[512];
|
float KeysDownTime[512];
|
||||||
|
|
||||||
ImGuiIO();
|
IMGUI_API ImGuiIO();
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -513,7 +550,7 @@ struct ImGuiTextFilter
|
|||||||
char front() const { return *b; }
|
char front() const { return *b; }
|
||||||
static bool isblank(char c) { return c == ' ' || c == '\t'; }
|
static bool isblank(char c) { return c == ' ' || c == '\t'; }
|
||||||
void trim_blanks() { while (b < e && isblank(*b)) b++; while (e > b && isblank(*(e-1))) e--; }
|
void trim_blanks() { while (b < e && isblank(*b)) b++; while (e > b && isblank(*(e-1))) e--; }
|
||||||
void split(char separator, ImVector<TextRange>& out);
|
IMGUI_API void split(char separator, ImVector<TextRange>& out);
|
||||||
};
|
};
|
||||||
|
|
||||||
char InputBuf[256];
|
char InputBuf[256];
|
||||||
@ -525,7 +562,7 @@ struct ImGuiTextFilter
|
|||||||
void Draw(const char* label = "Filter (inc,-exc)", float width = -1.0f); // Helper calling InputText+Build
|
void Draw(const char* label = "Filter (inc,-exc)", float width = -1.0f); // Helper calling InputText+Build
|
||||||
bool PassFilter(const char* val) const;
|
bool PassFilter(const char* val) const;
|
||||||
bool IsActive() const { return !Filters.empty(); }
|
bool IsActive() const { return !Filters.empty(); }
|
||||||
void Build();
|
IMGUI_API void Build();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper: Text buffer for logging/accumulating text
|
// Helper: Text buffer for logging/accumulating text
|
||||||
@ -534,12 +571,13 @@ struct ImGuiTextBuffer
|
|||||||
ImVector<char> Buf;
|
ImVector<char> Buf;
|
||||||
|
|
||||||
ImGuiTextBuffer() { Buf.push_back(0); }
|
ImGuiTextBuffer() { Buf.push_back(0); }
|
||||||
|
~ImGuiTextBuffer() { clear(); }
|
||||||
const char* begin() const { return Buf.begin(); }
|
const char* begin() const { return Buf.begin(); }
|
||||||
const char* end() const { return Buf.end()-1; }
|
const char* end() const { return Buf.end()-1; }
|
||||||
size_t size() const { return Buf.size()-1; }
|
size_t size() const { return Buf.size()-1; }
|
||||||
bool empty() { return Buf.empty(); }
|
bool empty() { return Buf.empty(); }
|
||||||
void clear() { Buf.clear(); Buf.push_back(0); }
|
void clear() { Buf.clear(); Buf.push_back(0); }
|
||||||
void append(const char* fmt, ...);
|
IMGUI_API void append(const char* fmt, ...);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper: Key->value storage
|
// Helper: Key->value storage
|
||||||
@ -552,13 +590,13 @@ struct ImGuiStorage
|
|||||||
struct Pair { ImU32 key; int val; };
|
struct Pair { ImU32 key; int val; };
|
||||||
ImVector<Pair> Data;
|
ImVector<Pair> Data;
|
||||||
|
|
||||||
void Clear();
|
IMGUI_API void Clear();
|
||||||
int GetInt(ImU32 key, int default_val = 0);
|
IMGUI_API int GetInt(ImU32 key, int default_val = 0);
|
||||||
void SetInt(ImU32 key, int val);
|
IMGUI_API void SetInt(ImU32 key, int val);
|
||||||
void SetAllInt(int val);
|
IMGUI_API void SetAllInt(int val);
|
||||||
|
|
||||||
int* Find(ImU32 key);
|
IMGUI_API int* Find(ImU32 key);
|
||||||
void Insert(ImU32 key, int val);
|
IMGUI_API void Insert(ImU32 key, int val);
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -572,7 +610,6 @@ struct ImDrawCmd
|
|||||||
ImVec4 clip_rect;
|
ImVec4 clip_rect;
|
||||||
};
|
};
|
||||||
|
|
||||||
// sizeof() == 20
|
|
||||||
struct ImDrawVert
|
struct ImDrawVert
|
||||||
{
|
{
|
||||||
ImVec2 pos;
|
ImVec2 pos;
|
||||||
@ -581,7 +618,11 @@ struct ImDrawVert
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Draw command list
|
// Draw command list
|
||||||
// User is responsible for providing a renderer for this in ImGuiIO::RenderDrawListFn
|
// This is the low-level list of polygon that ImGui:: functions are filling. At the end of the frame, all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
|
||||||
|
// Each ImGui window contains its own ImDrawList.
|
||||||
|
// If you want to add custom rendering within a window, you can use ImGui::GetWindowDrawList() to access the current draw list and add your own primitives.
|
||||||
|
// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
|
||||||
|
// Note that this only gives you access to rendering polygons. If your intent is to create custom widgets and the publicly exposed functions/data aren't sufficient, you can add code in imgui_user.inl
|
||||||
struct ImDrawList
|
struct ImDrawList
|
||||||
{
|
{
|
||||||
// This is what you have to render
|
// This is what you have to render
|
||||||
@ -594,22 +635,22 @@ struct ImDrawList
|
|||||||
|
|
||||||
ImDrawList() { Clear(); }
|
ImDrawList() { Clear(); }
|
||||||
|
|
||||||
void Clear();
|
IMGUI_API void Clear();
|
||||||
void PushClipRect(const ImVec4& clip_rect);
|
IMGUI_API void PushClipRect(const ImVec4& clip_rect);
|
||||||
void PopClipRect();
|
IMGUI_API void PopClipRect();
|
||||||
void ReserveVertices(unsigned int vtx_count);
|
IMGUI_API void ReserveVertices(unsigned int vtx_count);
|
||||||
void AddVtx(const ImVec2& pos, ImU32 col);
|
IMGUI_API void AddVtx(const ImVec2& pos, ImU32 col);
|
||||||
void AddVtxLine(const ImVec2& a, const ImVec2& b, ImU32 col);
|
IMGUI_API void AddVtxLine(const ImVec2& a, const ImVec2& b, ImU32 col);
|
||||||
|
|
||||||
// Primitives
|
// Primitives
|
||||||
void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col);
|
IMGUI_API void AddLine(const ImVec2& a, const ImVec2& b, ImU32 col);
|
||||||
void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F);
|
IMGUI_API void AddRect(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F);
|
||||||
void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F);
|
IMGUI_API void AddRectFilled(const ImVec2& a, const ImVec2& b, ImU32 col, float rounding = 0.0f, int rounding_corners=0x0F);
|
||||||
void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col);
|
IMGUI_API void AddTriangleFilled(const ImVec2& a, const ImVec2& b, const ImVec2& c, ImU32 col);
|
||||||
void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
|
IMGUI_API void AddCircle(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
|
||||||
void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
|
IMGUI_API void AddCircleFilled(const ImVec2& centre, float radius, ImU32 col, int num_segments = 12);
|
||||||
void AddArc(const ImVec2& center, float rad, ImU32 col, int a_min, int a_max, bool tris=false, const ImVec2& third_point_offset = ImVec2(0,0));
|
IMGUI_API void AddArc(const ImVec2& center, float rad, ImU32 col, int a_min, int a_max, bool tris = false, const ImVec2& third_point_offset = ImVec2(0,0));
|
||||||
void AddText(ImFont font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end);
|
IMGUI_API void AddText(ImFont font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width = 0.0f);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Optional bitmap font data loader & renderer into vertices
|
// Optional bitmap font data loader & renderer into vertices
|
||||||
@ -678,18 +719,23 @@ struct ImBitmapFont
|
|||||||
ImVector<const char*> Filenames; // (point into raw data)
|
ImVector<const char*> Filenames; // (point into raw data)
|
||||||
ImVector<int> IndexLookup; // (built)
|
ImVector<int> IndexLookup; // (built)
|
||||||
|
|
||||||
ImBitmapFont();
|
IMGUI_API ImBitmapFont();
|
||||||
~ImBitmapFont() { Clear(); }
|
IMGUI_API ~ImBitmapFont() { Clear(); }
|
||||||
|
|
||||||
bool LoadFromMemory(const void* data, size_t data_size);
|
IMGUI_API bool LoadFromMemory(const void* data, size_t data_size);
|
||||||
bool LoadFromFile(const char* filename);
|
IMGUI_API bool LoadFromFile(const char* filename);
|
||||||
void Clear();
|
IMGUI_API void Clear();
|
||||||
void BuildLookupTable();
|
IMGUI_API void BuildLookupTable();
|
||||||
const FntGlyph * FindGlyph(unsigned short c) const;
|
IMGUI_API const FntGlyph * FindGlyph(unsigned short c, const FntGlyph* fallback = NULL) const;
|
||||||
float GetFontSize() const { return (float)Info->FontSize; }
|
IMGUI_API float GetFontSize() const { return (float)Info->FontSize; }
|
||||||
bool IsLoaded() const { return Info != NULL && Common != NULL && Glyphs != NULL; }
|
IMGUI_API bool IsLoaded() const { return Info != NULL && Common != NULL && Glyphs != NULL; }
|
||||||
|
|
||||||
ImVec2 CalcTextSizeA(float size, float max_width, const char* text_begin, const char* text_end, const char** remaining = NULL) const; // utf8
|
// 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
|
||||||
ImVec2 CalcTextSizeW(float size, float max_width, const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL) const; // wchar
|
// 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
|
||||||
void RenderText(float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, ImDrawVert*& out_vertices) const;
|
IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining = NULL) const; // utf8
|
||||||
|
IMGUI_API ImVec2 CalcTextSizeW(float size, float max_width, const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL) const; // wchar
|
||||||
|
IMGUI_API void RenderText(float size, ImVec2 pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, ImDrawVert*& out_vertices, float wrap_width = 0.0f) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width, const FntGlyph* fallback_glyph) const;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user