mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-21 19:37:01 +00:00
Amend daf49e9d8
This commit is contained in:
parent
d15e4100b8
commit
9dfa2397de
@ -59,6 +59,8 @@ Other changes:
|
|||||||
a wrong viewport if none was initially set.
|
a wrong viewport if none was initially set.
|
||||||
- Backends: DirectX9: Using RGBA format when allowed by the driver to avoid CPU side
|
- Backends: DirectX9: Using RGBA format when allowed by the driver to avoid CPU side
|
||||||
conversion. (#6575) [@Demonese]
|
conversion. (#6575) [@Demonese]
|
||||||
|
- Internals: Fixed ImFileOpen not working before context is created, preventing creation
|
||||||
|
of a font atlas before main context creation. (#7314, #7315) [@PathogenDavid, @ocornut]
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
18
imgui.cpp
18
imgui.cpp
@ -2063,12 +2063,18 @@ ImFileHandle ImFileOpen(const char* filename, const char* mode)
|
|||||||
// Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
|
// Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
|
||||||
const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
|
const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
|
||||||
const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
|
const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
|
||||||
ImGuiContext& g = *GImGui;
|
|
||||||
g.TempBuffer.reserve((filename_wsize + mode_wsize) * sizeof(wchar_t));
|
// Use stack buffer if possible, otherwise heap buffer. Sizes include zero terminator.
|
||||||
wchar_t* buf = (wchar_t*)(void*)g.TempBuffer.Data;
|
// We don't rely on current ImGuiContext as this is implied to be a helper function which doesn't depend on it (see #7314).
|
||||||
::MultiByteToWideChar(CP_UTF8, 0, filename, -1, (wchar_t*)&buf[0], filename_wsize);
|
wchar_t local_temp_stack[FILENAME_MAX];
|
||||||
::MultiByteToWideChar(CP_UTF8, 0, mode, -1, (wchar_t*)&buf[filename_wsize], mode_wsize);
|
ImVector<wchar_t> local_temp_heap;
|
||||||
return ::_wfopen((const wchar_t*)&buf[0], (const wchar_t*)&buf[filename_wsize]);
|
if (filename_wsize + mode_wsize > IM_ARRAYSIZE(local_temp_stack))
|
||||||
|
local_temp_heap.resize(filename_wsize + mode_wsize);
|
||||||
|
wchar_t* filename_wbuf = local_temp_heap.Data ? local_temp_heap.Data : local_temp_stack;
|
||||||
|
wchar_t* mode_wbuf = filename_wbuf + filename_wsize;
|
||||||
|
::MultiByteToWideChar(CP_UTF8, 0, filename, -1, filename_wbuf, filename_wsize);
|
||||||
|
::MultiByteToWideChar(CP_UTF8, 0, mode, -1, mode_wbuf, mode_wsize);
|
||||||
|
return ::_wfopen(filename_wbuf, mode_wbuf);
|
||||||
#else
|
#else
|
||||||
return fopen(filename, mode);
|
return fopen(filename, mode);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user