mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 09:27:00 +00:00
Merge branch 'master' into navigation
This commit is contained in:
commit
fc25881207
13
imconfig.h
13
imconfig.h
@ -13,24 +13,27 @@
|
|||||||
//#define IMGUI_API __declspec( dllexport )
|
//#define IMGUI_API __declspec( dllexport )
|
||||||
//#define IMGUI_API __declspec( dllimport )
|
//#define IMGUI_API __declspec( dllimport )
|
||||||
|
|
||||||
|
//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names
|
||||||
|
//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
|
|
||||||
//---- Include imgui_user.h at the end of imgui.h
|
//---- Include imgui_user.h at the end of imgui.h
|
||||||
//#define IMGUI_INCLUDE_IMGUI_USER_H
|
//#define IMGUI_INCLUDE_IMGUI_USER_H
|
||||||
|
|
||||||
//---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions)
|
//---- Don't implement default 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_FUNCTIONS
|
||||||
//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS
|
//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
|
||||||
|
|
||||||
//---- Don't implement test window functionality (ShowTestWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty)
|
//---- Don't implement test window functionality (ShowTestWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty)
|
||||||
//---- It is very strongly recommended to NOT disable the test windows. Please read the comment at the top of imgui_demo.cpp to learn why.
|
//---- It is very strongly recommended to NOT disable the test windows. Please read the comment at the top of imgui_demo.cpp to learn why.
|
||||||
//#define IMGUI_DISABLE_TEST_WINDOWS
|
//#define IMGUI_DISABLE_TEST_WINDOWS
|
||||||
|
|
||||||
//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce like hood of using already obsolete function/names
|
//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself.
|
||||||
//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
|
||||||
|
|
||||||
//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends)
|
//---- Pack colors to BGRA instead of RGBA (remove need to post process vertex buffer in back ends)
|
||||||
//#define IMGUI_USE_BGRA_PACKED_COLOR
|
//#define IMGUI_USE_BGRA_PACKED_COLOR
|
||||||
|
|
||||||
//---- Implement STB libraries in a namespace to avoid conflicts
|
//---- Implement STB libraries in a namespace to avoid linkage conflicts
|
||||||
//#define IMGUI_STB_NAMESPACE ImGuiStb
|
//#define IMGUI_STB_NAMESPACE ImGuiStb
|
||||||
|
|
||||||
//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4.
|
//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4.
|
||||||
|
38
imgui.cpp
38
imgui.cpp
@ -252,6 +252,7 @@
|
|||||||
Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
|
Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code.
|
||||||
Also read releases logs https://github.com/ocornut/imgui/releases for more details.
|
Also read releases logs https://github.com/ocornut/imgui/releases for more details.
|
||||||
|
|
||||||
|
- 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency.
|
||||||
- 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
|
- 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
|
||||||
- 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
|
- 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
|
||||||
removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
|
removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
|
||||||
@ -1054,15 +1055,18 @@ static const char* ImAtoi(const char* src, int* output)
|
|||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
||||||
// MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
|
// A) MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
|
||||||
// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm.
|
// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm.
|
||||||
|
// B) When buf==NULL vsnprintf() will return the output size.
|
||||||
|
#ifndef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
|
||||||
int ImFormatString(char* buf, int buf_size, const char* fmt, ...)
|
int ImFormatString(char* buf, int buf_size, const char* fmt, ...)
|
||||||
{
|
{
|
||||||
IM_ASSERT(buf_size > 0);
|
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
int w = vsnprintf(buf, buf_size, fmt, args);
|
int w = vsnprintf(buf, buf_size, fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
if (buf == NULL)
|
||||||
|
return w;
|
||||||
if (w == -1 || w >= buf_size)
|
if (w == -1 || w >= buf_size)
|
||||||
w = buf_size - 1;
|
w = buf_size - 1;
|
||||||
buf[w] = 0;
|
buf[w] = 0;
|
||||||
@ -1071,13 +1075,15 @@ int ImFormatString(char* buf, int buf_size, const char* fmt, ...)
|
|||||||
|
|
||||||
int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args)
|
int ImFormatStringV(char* buf, int buf_size, const char* fmt, va_list args)
|
||||||
{
|
{
|
||||||
IM_ASSERT(buf_size > 0);
|
|
||||||
int w = vsnprintf(buf, buf_size, fmt, args);
|
int w = vsnprintf(buf, buf_size, fmt, args);
|
||||||
|
if (buf == NULL)
|
||||||
|
return w;
|
||||||
if (w == -1 || w >= buf_size)
|
if (w == -1 || w >= buf_size)
|
||||||
w = buf_size - 1;
|
w = buf_size - 1;
|
||||||
buf[w] = 0;
|
buf[w] = 0;
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
#endif // #ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
|
||||||
|
|
||||||
// Pass data_size==0 for zero-terminated strings
|
// Pass data_size==0 for zero-terminated strings
|
||||||
// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
|
// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
|
||||||
@ -1713,7 +1719,7 @@ void ImGuiTextBuffer::appendv(const char* fmt, va_list args)
|
|||||||
va_list args_copy;
|
va_list args_copy;
|
||||||
va_copy(args_copy, args);
|
va_copy(args_copy, args);
|
||||||
|
|
||||||
int len = vsnprintf(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
|
int len = ImFormatStringV(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1726,7 +1732,7 @@ void ImGuiTextBuffer::appendv(const char* fmt, va_list args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Buf.resize(needed_sz);
|
Buf.resize(needed_sz);
|
||||||
ImFormatStringV(&Buf[write_off] - 1, len+1, fmt, args_copy);
|
ImFormatStringV(&Buf[write_off - 1], len + 1, fmt, args_copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiTextBuffer::append(const char* fmt, ...)
|
void ImGuiTextBuffer::append(const char* fmt, ...)
|
||||||
@ -10691,16 +10697,16 @@ void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
|
|||||||
{
|
{
|
||||||
int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
|
int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
|
||||||
char buf[64];
|
char buf[64];
|
||||||
sprintf(buf, "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
|
||||||
if (Selectable(buf))
|
if (Selectable(buf))
|
||||||
SetClipboardText(buf);
|
SetClipboardText(buf);
|
||||||
sprintf(buf, "(%d,%d,%d,%d)", cr, cg, cb, ca);
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "(%d,%d,%d,%d)", cr, cg, cb, ca);
|
||||||
if (Selectable(buf))
|
if (Selectable(buf))
|
||||||
SetClipboardText(buf);
|
SetClipboardText(buf);
|
||||||
if (flags & ImGuiColorEditFlags_NoAlpha)
|
if (flags & ImGuiColorEditFlags_NoAlpha)
|
||||||
sprintf(buf, "0x%02X%02X%02X", cr, cg, cb);
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "0x%02X%02X%02X", cr, cg, cb);
|
||||||
else
|
else
|
||||||
sprintf(buf, "0x%02X%02X%02X%02X", cr, cg, cb, ca);
|
ImFormatString(buf, IM_ARRAYSIZE(buf), "0x%02X%02X%02X%02X", cr, cg, cb, ca);
|
||||||
if (Selectable(buf))
|
if (Selectable(buf))
|
||||||
SetClipboardText(buf);
|
SetClipboardText(buf);
|
||||||
EndPopup();
|
EndPopup();
|
||||||
@ -11816,14 +11822,14 @@ void ImGui::Value(const char* prefix, float v, const char* float_format)
|
|||||||
// PLATFORM DEPENDENT HELPERS
|
// PLATFORM DEPENDENT HELPERS
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS))
|
#if defined(_WIN32) && !defined(_WINDOWS_) && (!defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) || !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS))
|
||||||
#undef WIN32_LEAN_AND_MEAN
|
#undef WIN32_LEAN_AND_MEAN
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Win32 API clipboard implementation
|
// Win32 API clipboard implementation
|
||||||
#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS)
|
#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS)
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma comment(lib, "user32")
|
#pragma comment(lib, "user32")
|
||||||
@ -11859,7 +11865,10 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
|
|||||||
const int wbuf_length = ImTextCountCharsFromUtf8(text, NULL) + 1;
|
const int wbuf_length = ImTextCountCharsFromUtf8(text, NULL) + 1;
|
||||||
HGLOBAL wbuf_handle = GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(ImWchar));
|
HGLOBAL wbuf_handle = GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(ImWchar));
|
||||||
if (wbuf_handle == NULL)
|
if (wbuf_handle == NULL)
|
||||||
|
{
|
||||||
|
CloseClipboard();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
ImWchar* wbuf_global = (ImWchar*)GlobalLock(wbuf_handle);
|
ImWchar* wbuf_global = (ImWchar*)GlobalLock(wbuf_handle);
|
||||||
ImTextStrFromUtf8(wbuf_global, wbuf_length, text, NULL);
|
ImTextStrFromUtf8(wbuf_global, wbuf_length, text, NULL);
|
||||||
GlobalUnlock(wbuf_handle);
|
GlobalUnlock(wbuf_handle);
|
||||||
@ -11891,7 +11900,7 @@ static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Win32 API IME support (for Asian languages, etc.)
|
// Win32 API IME support (for Asian languages, etc.)
|
||||||
#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS)
|
#if defined(_WIN32) && !defined(__GNUC__) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
|
||||||
|
|
||||||
#include <imm.h>
|
#include <imm.h>
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@ -11979,13 +11988,14 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|||||||
while (clipper.Step())
|
while (clipper.Step())
|
||||||
for (int prim = clipper.DisplayStart, vtx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
|
for (int prim = clipper.DisplayStart, vtx_i = elem_offset + clipper.DisplayStart*3; prim < clipper.DisplayEnd; prim++)
|
||||||
{
|
{
|
||||||
char buf[300], *buf_p = buf;
|
char buf[300];
|
||||||
|
char *buf_p = buf, *buf_end = buf + IM_ARRAYSIZE(buf);
|
||||||
ImVec2 triangles_pos[3];
|
ImVec2 triangles_pos[3];
|
||||||
for (int n = 0; n < 3; n++, vtx_i++)
|
for (int n = 0; n < 3; n++, vtx_i++)
|
||||||
{
|
{
|
||||||
ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[vtx_i] : vtx_i];
|
ImDrawVert& v = draw_list->VtxBuffer[idx_buffer ? idx_buffer[vtx_i] : vtx_i];
|
||||||
triangles_pos[n] = v.pos;
|
triangles_pos[n] = v.pos;
|
||||||
buf_p += sprintf(buf_p, "%s %04d { pos = (%8.2f,%8.2f), uv = (%.6f,%.6f), col = %08X }\n", (n == 0) ? "vtx" : " ", vtx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
|
buf_p += ImFormatString(buf_p, (int)(buf_end - buf_p), "%s %04d { pos = (%8.2f,%8.2f), uv = (%.6f,%.6f), col = %08X }\n", (n == 0) ? "vtx" : " ", vtx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
|
||||||
}
|
}
|
||||||
ImGui::Selectable(buf, false);
|
ImGui::Selectable(buf, false);
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
|
@ -2397,6 +2397,7 @@ struct ExampleAppConsole
|
|||||||
|
|
||||||
void AddLog(const char* fmt, ...) IM_FMTARGS(2)
|
void AddLog(const char* fmt, ...) IM_FMTARGS(2)
|
||||||
{
|
{
|
||||||
|
// FIXME-OPT
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
@ -1475,8 +1475,11 @@ bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
|
|||||||
const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
|
const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
|
||||||
IM_ASSERT(font_offset >= 0);
|
IM_ASSERT(font_offset >= 0);
|
||||||
if (!stbtt_InitFont(&tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
|
if (!stbtt_InitFont(&tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
|
||||||
|
{
|
||||||
|
ImGui::MemFree(tmp_array);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
|
// Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
|
||||||
int buf_packedchars_n = 0, buf_rects_n = 0, buf_ranges_n = 0;
|
int buf_packedchars_n = 0, buf_rects_n = 0, buf_ranges_n = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user