mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	(Now expecting something to fail somewhere..)
This commit is contained in:
		
							
								
								
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -529,13 +529,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "imgui.h"
 | 
					#include "imgui.h"
 | 
				
			||||||
#define IMGUI_DEFINE_MATH_OPERATORS
 | 
					#define IMGUI_DEFINE_MATH_OPERATORS
 | 
				
			||||||
 | 
					#define IMGUI_DEFINE_PLACEMENT_NEW
 | 
				
			||||||
#include "imgui_internal.h"
 | 
					#include "imgui_internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <ctype.h>      // toupper, isprint
 | 
					#include <ctype.h>      // toupper, isprint
 | 
				
			||||||
#include <math.h>       // sqrtf, fabsf, fmodf, powf, cosf, sinf, floorf, ceilf
 | 
					#include <math.h>       // sqrtf, fabsf, fmodf, powf, cosf, sinf, floorf, ceilf
 | 
				
			||||||
#include <stdlib.h>     // NULL, malloc, free, qsort, atoi
 | 
					#include <stdlib.h>     // NULL, malloc, free, qsort, atoi
 | 
				
			||||||
#include <stdio.h>      // vsnprintf, sscanf, printf
 | 
					#include <stdio.h>      // vsnprintf, sscanf, printf
 | 
				
			||||||
#include <new>          // new (ptr)
 | 
					 | 
				
			||||||
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
 | 
					#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
 | 
				
			||||||
#include <stddef.h>     // intptr_t
 | 
					#include <stddef.h>     // intptr_t
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -1555,7 +1555,7 @@ ImGuiWindow::ImGuiWindow(const char* name)
 | 
				
			|||||||
    FontWindowScale = 1.0f;
 | 
					    FontWindowScale = 1.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DrawList = (ImDrawList*)ImGui::MemAlloc(sizeof(ImDrawList));
 | 
					    DrawList = (ImDrawList*)ImGui::MemAlloc(sizeof(ImDrawList));
 | 
				
			||||||
    new(DrawList) ImDrawList();
 | 
					    IM_PLACEMENT_NEW(DrawList) ImDrawList();
 | 
				
			||||||
    DrawList->_OwnerName = Name;
 | 
					    DrawList->_OwnerName = Name;
 | 
				
			||||||
    RootWindow = NULL;
 | 
					    RootWindow = NULL;
 | 
				
			||||||
    RootNonPopupWindow = NULL;
 | 
					    RootNonPopupWindow = NULL;
 | 
				
			||||||
@@ -1829,7 +1829,7 @@ size_t ImGui::GetInternalStateSize()
 | 
				
			|||||||
void ImGui::SetInternalState(void* state, bool construct)
 | 
					void ImGui::SetInternalState(void* state, bool construct)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (construct)
 | 
					    if (construct)
 | 
				
			||||||
        new (state) ImGuiState();
 | 
					        IM_PLACEMENT_NEW(state) ImGuiState();
 | 
				
			||||||
    GImGui = (ImGuiState*)state;
 | 
					    GImGui = (ImGuiState*)state;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1874,7 +1874,7 @@ void ImGui::NewFrame()
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        // Initialize on first frame
 | 
					        // Initialize on first frame
 | 
				
			||||||
        g.LogClipboard = (ImGuiTextBuffer*)ImGui::MemAlloc(sizeof(ImGuiTextBuffer));
 | 
					        g.LogClipboard = (ImGuiTextBuffer*)ImGui::MemAlloc(sizeof(ImGuiTextBuffer));
 | 
				
			||||||
        new(g.LogClipboard) ImGuiTextBuffer();
 | 
					        IM_PLACEMENT_NEW(g.LogClipboard) ImGuiTextBuffer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IM_ASSERT(g.Settings.empty());
 | 
					        IM_ASSERT(g.Settings.empty());
 | 
				
			||||||
        LoadSettings();
 | 
					        LoadSettings();
 | 
				
			||||||
@@ -3461,7 +3461,7 @@ static ImGuiWindow* CreateNewWindow(const char* name, ImVec2 size, ImGuiWindowFl
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Create window the first time
 | 
					    // Create window the first time
 | 
				
			||||||
    ImGuiWindow* window = (ImGuiWindow*)ImGui::MemAlloc(sizeof(ImGuiWindow));
 | 
					    ImGuiWindow* window = (ImGuiWindow*)ImGui::MemAlloc(sizeof(ImGuiWindow));
 | 
				
			||||||
    new(window) ImGuiWindow(name);
 | 
					    IM_PLACEMENT_NEW(window) ImGuiWindow(name);
 | 
				
			||||||
    window->Flags = flags;
 | 
					    window->Flags = flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (flags & ImGuiWindowFlags_NoSavedSettings)
 | 
					    if (flags & ImGuiWindowFlags_NoSavedSettings)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,10 +14,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "imgui.h"
 | 
					#include "imgui.h"
 | 
				
			||||||
#define IMGUI_DEFINE_MATH_OPERATORS
 | 
					#define IMGUI_DEFINE_MATH_OPERATORS
 | 
				
			||||||
 | 
					#define IMGUI_DEFINE_PLACEMENT_NEW
 | 
				
			||||||
#include "imgui_internal.h"
 | 
					#include "imgui_internal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdio.h>      // vsnprintf, sscanf, printf
 | 
					#include <stdio.h>      // vsnprintf, sscanf, printf
 | 
				
			||||||
#include <new>          // new (ptr)
 | 
					 | 
				
			||||||
#if !defined(alloca) && !defined(__FreeBSD__)
 | 
					#if !defined(alloca) && !defined(__FreeBSD__)
 | 
				
			||||||
#ifdef _WIN32
 | 
					#ifdef _WIN32
 | 
				
			||||||
#include <malloc.h>     // alloca
 | 
					#include <malloc.h>     // alloca
 | 
				
			||||||
@@ -266,7 +266,7 @@ void ImDrawList::ChannelsSplit(int channels_count)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        if (i >= old_channels_count)
 | 
					        if (i >= old_channels_count)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            new(&_Channels[i]) ImDrawChannel();
 | 
					            IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -1097,7 +1097,7 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
 | 
				
			|||||||
    if (!font_cfg->MergeMode)
 | 
					    if (!font_cfg->MergeMode)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        ImFont* font = (ImFont*)ImGui::MemAlloc(sizeof(ImFont));
 | 
					        ImFont* font = (ImFont*)ImGui::MemAlloc(sizeof(ImFont));
 | 
				
			||||||
        new (font) ImFont();
 | 
					        IM_PLACEMENT_NEW(font) ImFont();
 | 
				
			||||||
        Fonts.push_back(font);
 | 
					        Fonts.push_back(font);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,6 +137,15 @@ static inline float  ImLengthSqr(const ImVec4& lhs)
 | 
				
			|||||||
static inline float  ImInvLength(const ImVec2& lhs, float fail_value)           { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / sqrtf(d); return fail_value; }
 | 
					static inline float  ImInvLength(const ImVec2& lhs, float fail_value)           { float d = lhs.x*lhs.x + lhs.y*lhs.y; if (d > 0.0f) return 1.0f / sqrtf(d); return fail_value; }
 | 
				
			||||||
static inline ImVec2 ImRound(ImVec2 v)                                          { return ImVec2((float)(int)v.x, (float)(int)v.y); }
 | 
					static inline ImVec2 ImRound(ImVec2 v)                                          { return ImVec2((float)(int)v.x, (float)(int)v.y); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
 | 
				
			||||||
 | 
					// Defining a custom placement new() with a dummy parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
 | 
				
			||||||
 | 
					#ifdef IMGUI_DEFINE_PLACEMENT_NEW
 | 
				
			||||||
 | 
					struct ImPlacementNewDummy {};
 | 
				
			||||||
 | 
					static inline void* operator new(size_t, ImPlacementNewDummy, void* ptr) { return ptr; }
 | 
				
			||||||
 | 
					static inline void operator delete(void*, ImPlacementNewDummy, void*) {}
 | 
				
			||||||
 | 
					#define IM_PLACEMENT_NEW(_PTR)  new(ImPlacementNewDummy() ,_PTR)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
// Types
 | 
					// Types
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user