mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Merge branch 'master' into navigation
This commit is contained in:
		
							
								
								
									
										225
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										225
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -5,7 +5,7 @@
 | 
			
		||||
// ** Grep for FIXME-NAVIGATION
 | 
			
		||||
 | 
			
		||||
// See ImGui::ShowTestWindow() in imgui_demo.cpp for demo code.
 | 
			
		||||
// Newcomers, read 'Programmer guide' below for notes on how to setup ImGui in your codebase.
 | 
			
		||||
// Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase.
 | 
			
		||||
// Get latest version at https://github.com/ocornut/imgui
 | 
			
		||||
// Releases change-log at https://github.com/ocornut/imgui/releases
 | 
			
		||||
// Gallery (please post your screenshots/video there!): https://github.com/ocornut/imgui/issues/1269
 | 
			
		||||
@@ -20,23 +20,23 @@
 | 
			
		||||
 - END-USER GUIDE
 | 
			
		||||
 - PROGRAMMER GUIDE (read me!)
 | 
			
		||||
   - Read first
 | 
			
		||||
   - How to update to a newer version of ImGui
 | 
			
		||||
   - Getting started with integrating ImGui in your code/engine
 | 
			
		||||
   - How to update to a newer version of Dear ImGui
 | 
			
		||||
   - Getting started with integrating Dear ImGui in your code/engine
 | 
			
		||||
   - Using gamepad/keyboard navigation [BETA]
 | 
			
		||||
 - API BREAKING CHANGES (read me when you update!)
 | 
			
		||||
 - ISSUES & TODO LIST
 | 
			
		||||
 - FREQUENTLY ASKED QUESTIONS (FAQ), TIPS
 | 
			
		||||
   - How can I help?
 | 
			
		||||
   - What is ImTextureID and how do I display an image?
 | 
			
		||||
   - I integrated ImGui in my engine and the text or lines are blurry..
 | 
			
		||||
   - I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around..
 | 
			
		||||
   - I integrated Dear ImGui in my engine and the text or lines are blurry..
 | 
			
		||||
   - I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
 | 
			
		||||
   - How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on labels/IDs.
 | 
			
		||||
   - How can I tell when ImGui wants my mouse/keyboard inputs VS when I can pass them to my application?
 | 
			
		||||
   - How can I tell when Dear ImGui wants my mouse/keyboard inputs VS when I can pass them to my application?
 | 
			
		||||
   - How can I load a different font than the default?
 | 
			
		||||
   - How can I easily use icons in my application?
 | 
			
		||||
   - How can I load multiple fonts?
 | 
			
		||||
   - How can I display and input non-latin characters such as Chinese, Japanese, Korean, Cyrillic?
 | 
			
		||||
   - How can I preserve my ImGui context across reloading a DLL? (loss of the global/static variables)
 | 
			
		||||
   - How can I preserve my Dear ImGui context across reloading a DLL? (loss of the global/static variables)
 | 
			
		||||
   - How can I use the drawing facilities without an ImGui window? (using ImDrawList API)
 | 
			
		||||
 - ISSUES & TODO-LIST
 | 
			
		||||
 - CODE
 | 
			
		||||
@@ -94,7 +94,7 @@
 | 
			
		||||
 - Call and read ImGui::ShowTestWindow() for demo code demonstrating most features.
 | 
			
		||||
 - You can learn about immediate-mode gui principles at http://www.johno.se/book/imgui.html or watch http://mollyrocket.com/861
 | 
			
		||||
 | 
			
		||||
 HOW TO UPDATE TO A NEWER VERSION OF IMGUI
 | 
			
		||||
 HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
 | 
			
		||||
 | 
			
		||||
 - Overwrite all the sources files except for imconfig.h (if you have made modification to your copy of imconfig.h)
 | 
			
		||||
 - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes. 
 | 
			
		||||
@@ -103,26 +103,26 @@
 | 
			
		||||
   Please report any issue to the GitHub page!
 | 
			
		||||
 - Try to keep your copy of dear imgui reasonably up to date.
 | 
			
		||||
 | 
			
		||||
 GETTING STARTED WITH INTEGRATING IMGUI IN YOUR CODE/ENGINE
 | 
			
		||||
 GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
 | 
			
		||||
 | 
			
		||||
 - Add the ImGui source files to your projects, using your preferred build system. It is recommended you build the .cpp files as part of your project and not as a library.
 | 
			
		||||
 - Add the Dear ImGui source files to your projects, using your preferred build system. It is recommended you build the .cpp files as part of your project and not as a library.
 | 
			
		||||
 - You can later customize the imconfig.h file to tweak some compilation time behavior, such as integrating imgui types with your own maths types.
 | 
			
		||||
 - See examples/ folder for standalone sample applications. To understand the integration process, you can read examples/opengl2_example/ because it is short, 
 | 
			
		||||
   then switch to the one more appropriate to your use case.
 | 
			
		||||
 - You may be able to grab and copy a ready made imgui_impl_*** file from the examples/.
 | 
			
		||||
 - When using ImGui, your programming IDE if your friend: follow the declaration of variables, functions and types to find comments about them.
 | 
			
		||||
 - When using Dear ImGui, your programming IDE if your friend: follow the declaration of variables, functions and types to find comments about them.
 | 
			
		||||
 | 
			
		||||
 - Init: retrieve the ImGuiIO structure with ImGui::GetIO() and fill the fields marked 'Settings': at minimum you need to set io.DisplaySize (application resolution).
 | 
			
		||||
   Later on you will fill your keyboard mapping, clipboard handlers, and other advanced features but for a basic integration you don't need to worry about it all.
 | 
			
		||||
 - Init: call io.Fonts->GetTexDataAsRGBA32(...), it will build the font atlas texture, then load the texture pixels into graphics memory.
 | 
			
		||||
 - Every frame:
 | 
			
		||||
    - In your main loop as early a possible, fill the IO fields marked 'Input' (e.g. mouse position, buttons, keyboard info, etc.)
 | 
			
		||||
    - Call ImGui::NewFrame() to begin the imgui frame
 | 
			
		||||
    - Call ImGui::NewFrame() to begin the frame
 | 
			
		||||
    - You can use any ImGui function you want between NewFrame() and Render()
 | 
			
		||||
    - Call ImGui::Render() as late as you can to end the frame and finalize render data. it will call your io.RenderDrawListFn handler.
 | 
			
		||||
       (if you don't need to render, you still need to call Render() and ignore the callback, or call EndFrame() instead. if you call neither some aspects of windows focusing/moving will appear broken.)
 | 
			
		||||
 - All rendering information are stored into command-lists until ImGui::Render() is called.
 | 
			
		||||
 - ImGui never touches or knows about your GPU state. the only function that knows about GPU is the RenderDrawListFn handler that you provide.
 | 
			
		||||
 - Dear ImGui never touches or knows about your GPU state. the only function that knows about GPU is the RenderDrawListFn handler that you provide.
 | 
			
		||||
 - Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render" phases of your own application.
 | 
			
		||||
 - Refer to the examples applications in the examples/ folder for instruction on how to setup your code.
 | 
			
		||||
 - A minimal application skeleton may be:
 | 
			
		||||
@@ -374,33 +374,33 @@
 | 
			
		||||
 ======================================
 | 
			
		||||
 | 
			
		||||
 Q: How can I help?
 | 
			
		||||
 A: - If you are experienced enough with ImGui and with C/C++, look at the todo list and see how you want/can help!
 | 
			
		||||
 A: - If you are experienced enough with Dear ImGui and with C/C++, look at the todo list and see how you want/can help!
 | 
			
		||||
    - Become a Patron/donate! Convince your company to become a Patron or provide serious funding for development time! See http://www.patreon.com/imgui
 | 
			
		||||
 | 
			
		||||
 Q: What is ImTextureID and how do I display an image?
 | 
			
		||||
 A: ImTextureID is a void* used to pass renderer-agnostic texture references around until it hits your render function.
 | 
			
		||||
    ImGui knows nothing about what those bits represent, it just passes them around. It is up to you to decide what you want the void* to carry!
 | 
			
		||||
    Dear ImGui knows nothing about what those bits represent, it just passes them around. It is up to you to decide what you want the void* to carry!
 | 
			
		||||
    It could be an identifier to your OpenGL texture (cast GLuint to void*), a pointer to your custom engine material (cast MyMaterial* to void*), etc.
 | 
			
		||||
    At the end of the chain, your renderer takes this void* to cast it back into whatever it needs to select a current texture to render.
 | 
			
		||||
    Refer to examples applications, where each renderer (in a imgui_impl_xxxx.cpp file) is treating ImTextureID as a different thing.
 | 
			
		||||
    (c++ tip: OpenGL uses integers to identify textures. You can safely store an integer into a void*, just cast it to void*, don't take it's address!)
 | 
			
		||||
    To display a custom image/texture within an ImGui window, you may use ImGui::Image(), ImGui::ImageButton(), ImDrawList::AddImage() functions.
 | 
			
		||||
    ImGui will generate the geometry and draw calls using the ImTextureID that you passed and which your renderer can use.
 | 
			
		||||
    Dear ImGui will generate the geometry and draw calls using the ImTextureID that you passed and which your renderer can use.
 | 
			
		||||
    It is your responsibility to get textures uploaded to your GPU.
 | 
			
		||||
 | 
			
		||||
 Q: I integrated ImGui in my engine and the text or lines are blurry..
 | 
			
		||||
 Q: I integrated Dear ImGui in my engine and the text or lines are blurry..
 | 
			
		||||
 A: In your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f).
 | 
			
		||||
    Also make sure your orthographic projection matrix and io.DisplaySize matches your actual framebuffer dimension.
 | 
			
		||||
 | 
			
		||||
 Q: I integrated ImGui in my engine and some elements are clipping or disappearing when I move windows around..
 | 
			
		||||
 Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around..
 | 
			
		||||
 A: Most likely you are mishandling the clipping rectangles in your render function. Rectangles provided by ImGui are defined as (x1=left,y1=top,x2=right,y2=bottom) and NOT as (x1,y1,width,height).
 | 
			
		||||
 | 
			
		||||
 Q: Can I have multiple widgets with the same label? Can I have widget without a label?
 | 
			
		||||
 A: Yes. A primer on the use of labels/IDs in ImGui..
 | 
			
		||||
 A: Yes. A primer on the use of labels/IDs in Dear ImGui..
 | 
			
		||||
 | 
			
		||||
   - Elements that are not clickable, such as Text() items don't need an ID.
 | 
			
		||||
 | 
			
		||||
   - Interactive widgets require state to be carried over multiple frames (most typically ImGui often needs to remember what is the "active" widget).
 | 
			
		||||
   - Interactive widgets require state to be carried over multiple frames (most typically Dear ImGui often needs to remember what is the "active" widget).
 | 
			
		||||
     to do so they need a unique ID. unique ID are typically derived from a string label, an integer index or a pointer.
 | 
			
		||||
 | 
			
		||||
       Button("OK");        // Label = "OK",     ID = hash of "OK"
 | 
			
		||||
@@ -488,15 +488,15 @@
 | 
			
		||||
      e.g. when displaying a single object that may change over time (1-1 relationship), using a static string as ID will preserve your node open/closed state when the targeted object change.
 | 
			
		||||
      e.g. when displaying a list of objects, using indices or pointers as ID will preserve the node open/closed state differently. experiment and see what makes more sense!
 | 
			
		||||
 | 
			
		||||
 Q: How can I tell when ImGui wants my mouse/keyboard inputs VS when I can pass them to my application?
 | 
			
		||||
 Q: How can I tell when Dear ImGui wants my mouse/keyboard inputs VS when I can pass them to my application?
 | 
			
		||||
 A: You can read the 'io.WantCaptureMouse'/'io.WantCaptureKeyboard'/'ioWantTextInput' flags from the ImGuiIO structure. 
 | 
			
		||||
    - When 'io.WantCaptureMouse' or 'io.WantCaptureKeyboard' flags are set you may want to discard/hide the inputs from the rest of your application.
 | 
			
		||||
    - When 'io.WantTextInput' is set to may want to notify your OS to popup an on-screen keyboard, if available (e.g. on a mobile phone, or console without a keyboard).
 | 
			
		||||
    Preferably read the flags after calling ImGui::NewFrame() to avoid them lagging by one frame. But reading those flags before calling NewFrame() is also generally ok, 
 | 
			
		||||
    as the bool toggles fairly rarely and you don't generally expect to interact with either ImGui or your application during the same frame when that transition occurs.
 | 
			
		||||
    ImGui is tracking dragging and widget activity that may occur outside the boundary of a window, so 'io.WantCaptureMouse' is more accurate and correct than checking if a window is hovered.
 | 
			
		||||
    as the bool toggles fairly rarely and you don't generally expect to interact with either Dear ImGui or your application during the same frame when that transition occurs.
 | 
			
		||||
    Dear ImGui is tracking dragging and widget activity that may occur outside the boundary of a window, so 'io.WantCaptureMouse' is more accurate and correct than checking if a window is hovered.
 | 
			
		||||
    (Advanced note: text input releases focus on Return 'KeyDown', so the following Return 'KeyUp' event that your application receive will typically have 'io.WantCaptureKeyboard=false'. 
 | 
			
		||||
     Depending on your application logic it may or not be inconvenient. You might want to track which key-downs were for ImGui (e.g. with an array of bool) and filter out the corresponding key-ups.)
 | 
			
		||||
     Depending on your application logic it may or not be inconvenient. You might want to track which key-downs were for Dear ImGui (e.g. with an array of bool) and filter out the corresponding key-ups.)
 | 
			
		||||
 | 
			
		||||
 Q: How can I load a different font than the default? (default is an embedded version of ProggyClean.ttf, rendered at size 13)
 | 
			
		||||
 A: Use the font atlas to load the TTF/OTF file you want:
 | 
			
		||||
@@ -559,7 +559,7 @@
 | 
			
		||||
    Text input: it is up to your application to pass the right character code to io.AddInputCharacter(). The applications in examples/ are doing that.
 | 
			
		||||
    For languages using IME, on Windows you can copy the Hwnd of your application to io.ImeWindowHandle. The default implementation of io.ImeSetInputScreenPosFn() on Windows will set your IME position correctly.
 | 
			
		||||
 | 
			
		||||
 Q: How can I preserve my ImGui context across reloading a DLL? (loss of the global/static variables)
 | 
			
		||||
 Q: How can I preserve my Dear ImGui context across reloading a DLL? (loss of the global/static variables)
 | 
			
		||||
 A: Create your own context 'ctx = CreateContext()' + 'SetCurrentContext(ctx)' and your own font atlas 'ctx->GetIO().Fonts = new ImFontAtlas()' so you don't rely on the default globals.
 | 
			
		||||
 | 
			
		||||
 Q: How can I use the drawing facilities without an ImGui window? (using ImDrawList API)
 | 
			
		||||
@@ -732,51 +732,59 @@ ImGuiStyle::ImGuiStyle()
 | 
			
		||||
    AntiAliasedShapes       = true;             // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.)
 | 
			
		||||
    CurveTessellationTol    = 1.25f;            // Tessellation tolerance. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
 | 
			
		||||
 | 
			
		||||
    Colors[ImGuiCol_Text]                   = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_TextDisabled]           = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_WindowBg]               = ImVec4(0.00f, 0.00f, 0.00f, 0.70f);
 | 
			
		||||
    Colors[ImGuiCol_ChildWindowBg]          = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
 | 
			
		||||
    Colors[ImGuiCol_PopupBg]                = ImVec4(0.05f, 0.05f, 0.10f, 0.90f);
 | 
			
		||||
    Colors[ImGuiCol_Border]                 = ImVec4(0.70f, 0.70f, 0.70f, 0.40f);
 | 
			
		||||
    Colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
 | 
			
		||||
    Colors[ImGuiCol_FrameBg]                = ImVec4(0.80f, 0.80f, 0.80f, 0.30f);   // Background of checkbox, radio button, plot, slider, text input
 | 
			
		||||
    Colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.90f, 0.80f, 0.80f, 0.40f);
 | 
			
		||||
    Colors[ImGuiCol_FrameBgActive]          = ImVec4(0.90f, 0.65f, 0.65f, 0.45f);
 | 
			
		||||
    Colors[ImGuiCol_TitleBg]                = ImVec4(0.24f, 0.24f, 0.50f, 0.83f);
 | 
			
		||||
    Colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
 | 
			
		||||
    Colors[ImGuiCol_TitleBgActive]          = ImVec4(0.33f, 0.33f, 0.65f, 0.87f);
 | 
			
		||||
    Colors[ImGuiCol_MenuBarBg]              = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
 | 
			
		||||
    Colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
 | 
			
		||||
    Colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
 | 
			
		||||
    Colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
 | 
			
		||||
    Colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.80f, 0.50f, 0.50f, 0.40f);
 | 
			
		||||
    Colors[ImGuiCol_ComboBg]                = ImVec4(0.20f, 0.20f, 0.20f, 0.99f);
 | 
			
		||||
    Colors[ImGuiCol_CheckMark]              = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
 | 
			
		||||
    Colors[ImGuiCol_SliderGrab]             = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
 | 
			
		||||
    Colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.80f, 0.50f, 0.50f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_Button]                 = ImVec4(0.67f, 0.40f, 0.40f, 0.60f);
 | 
			
		||||
    Colors[ImGuiCol_ButtonHovered]          = ImVec4(0.67f, 0.40f, 0.40f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_ButtonActive]           = ImVec4(0.80f, 0.50f, 0.50f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_Header]                 = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
 | 
			
		||||
    Colors[ImGuiCol_HeaderHovered]          = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
 | 
			
		||||
    Colors[ImGuiCol_HeaderActive]           = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
 | 
			
		||||
    Colors[ImGuiCol_Separator]              = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_SeparatorActive]        = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_ResizeGrip]             = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
 | 
			
		||||
    Colors[ImGuiCol_ResizeGripHovered]      = ImVec4(1.00f, 1.00f, 1.00f, 0.60f);
 | 
			
		||||
    Colors[ImGuiCol_ResizeGripActive]       = ImVec4(1.00f, 1.00f, 1.00f, 0.90f);
 | 
			
		||||
    Colors[ImGuiCol_CloseButton]            = ImVec4(0.50f, 0.50f, 0.90f, 0.50f);
 | 
			
		||||
    Colors[ImGuiCol_CloseButtonHovered]     = ImVec4(0.70f, 0.70f, 0.90f, 0.60f);
 | 
			
		||||
    Colors[ImGuiCol_CloseButtonActive]      = ImVec4(0.70f, 0.70f, 0.70f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_PlotLines]              = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_PlotLinesHovered]       = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
 | 
			
		||||
    Colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
 | 
			
		||||
    Colors[ImGuiCol_ModalWindowDarkening]   = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
 | 
			
		||||
    Colors[ImGuiCol_NavHighlight]           = Colors[ImGuiCol_HeaderHovered];
 | 
			
		||||
    Colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(1.00f, 1.00f, 1.00f, 0.12f);
 | 
			
		||||
    ImGui::StyleColorsClassic(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::StyleColorsClassic(ImGuiStyle* dst)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
 | 
			
		||||
    ImVec4* colors = style->Colors;
 | 
			
		||||
 | 
			
		||||
    colors[ImGuiCol_Text]                   = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_TextDisabled]           = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_WindowBg]               = ImVec4(0.00f, 0.00f, 0.00f, 0.70f);
 | 
			
		||||
    colors[ImGuiCol_ChildWindowBg]          = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
 | 
			
		||||
    colors[ImGuiCol_PopupBg]                = ImVec4(0.05f, 0.05f, 0.10f, 0.90f);
 | 
			
		||||
    colors[ImGuiCol_Border]                 = ImVec4(0.70f, 0.70f, 0.70f, 0.40f);
 | 
			
		||||
    colors[ImGuiCol_BorderShadow]           = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
 | 
			
		||||
    colors[ImGuiCol_FrameBg]                = ImVec4(0.80f, 0.80f, 0.80f, 0.30f);   // Background of checkbox, radio button, plot, slider, text input
 | 
			
		||||
    colors[ImGuiCol_FrameBgHovered]         = ImVec4(0.90f, 0.80f, 0.80f, 0.40f);
 | 
			
		||||
    colors[ImGuiCol_FrameBgActive]          = ImVec4(0.90f, 0.65f, 0.65f, 0.45f);
 | 
			
		||||
    colors[ImGuiCol_TitleBg]                = ImVec4(0.24f, 0.24f, 0.50f, 0.83f);
 | 
			
		||||
    colors[ImGuiCol_TitleBgCollapsed]       = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
 | 
			
		||||
    colors[ImGuiCol_TitleBgActive]          = ImVec4(0.33f, 0.33f, 0.65f, 0.87f);
 | 
			
		||||
    colors[ImGuiCol_MenuBarBg]              = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
 | 
			
		||||
    colors[ImGuiCol_ScrollbarBg]            = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
 | 
			
		||||
    colors[ImGuiCol_ScrollbarGrab]          = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
 | 
			
		||||
    colors[ImGuiCol_ScrollbarGrabHovered]   = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
 | 
			
		||||
    colors[ImGuiCol_ScrollbarGrabActive]    = ImVec4(0.80f, 0.50f, 0.50f, 0.40f);
 | 
			
		||||
    colors[ImGuiCol_ComboBg]                = ImVec4(0.20f, 0.20f, 0.20f, 0.99f);
 | 
			
		||||
    colors[ImGuiCol_CheckMark]              = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
 | 
			
		||||
    colors[ImGuiCol_SliderGrab]             = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
 | 
			
		||||
    colors[ImGuiCol_SliderGrabActive]       = ImVec4(0.80f, 0.50f, 0.50f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_Button]                 = ImVec4(0.67f, 0.40f, 0.40f, 0.60f);
 | 
			
		||||
    colors[ImGuiCol_ButtonHovered]          = ImVec4(0.67f, 0.40f, 0.40f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_ButtonActive]           = ImVec4(0.80f, 0.50f, 0.50f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_Header]                 = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
 | 
			
		||||
    colors[ImGuiCol_HeaderHovered]          = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
 | 
			
		||||
    colors[ImGuiCol_HeaderActive]           = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
 | 
			
		||||
    colors[ImGuiCol_Separator]              = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_SeparatorHovered]       = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_SeparatorActive]        = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_ResizeGrip]             = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
 | 
			
		||||
    colors[ImGuiCol_ResizeGripHovered]      = ImVec4(1.00f, 1.00f, 1.00f, 0.60f);
 | 
			
		||||
    colors[ImGuiCol_ResizeGripActive]       = ImVec4(1.00f, 1.00f, 1.00f, 0.90f);
 | 
			
		||||
    colors[ImGuiCol_CloseButton]            = ImVec4(0.50f, 0.50f, 0.90f, 0.50f);
 | 
			
		||||
    colors[ImGuiCol_CloseButtonHovered]     = ImVec4(0.70f, 0.70f, 0.90f, 0.60f);
 | 
			
		||||
    colors[ImGuiCol_CloseButtonActive]      = ImVec4(0.70f, 0.70f, 0.70f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_PlotLines]              = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_PlotLinesHovered]       = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_PlotHistogram]          = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_PlotHistogramHovered]   = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
 | 
			
		||||
    colors[ImGuiCol_TextSelectedBg]         = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
 | 
			
		||||
    colors[ImGuiCol_ModalWindowDarkening]   = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
 | 
			
		||||
    colors[ImGuiCol_NavHighlight]           = colors[ImGuiCol_HeaderHovered];
 | 
			
		||||
    colors[ImGuiCol_NavWindowingHighlight]  = ImVec4(1.00f, 1.00f, 1.00f, 0.12f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ImGuiIO::ImGuiIO()
 | 
			
		||||
@@ -3033,8 +3041,9 @@ void ImGui::NewFrame()
 | 
			
		||||
    CloseInactivePopups();
 | 
			
		||||
 | 
			
		||||
    // Create implicit window - we will only render it if the user has added something to it.
 | 
			
		||||
    // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
 | 
			
		||||
    ImGui::SetNextWindowSize(ImVec2(400,400), ImGuiCond_FirstUseEver);
 | 
			
		||||
    ImGui::Begin("Debug");
 | 
			
		||||
    ImGui::Begin("Debug##Default");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::Initialize()
 | 
			
		||||
@@ -5633,7 +5642,7 @@ struct ImGuiStyleVarInfo
 | 
			
		||||
{
 | 
			
		||||
    ImGuiDataType   Type;
 | 
			
		||||
    ImU32           Offset;
 | 
			
		||||
    void*           GetVarPtr() const { return (void*)((unsigned char*)&GImGui->Style + Offset); }
 | 
			
		||||
    void*           GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const ImGuiStyleVarInfo GStyleVarInfo[ImGuiStyleVar_Count_] =
 | 
			
		||||
@@ -5663,8 +5672,9 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
 | 
			
		||||
    const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
 | 
			
		||||
    if (var_info->Type == ImGuiDataType_Float)
 | 
			
		||||
    {
 | 
			
		||||
        float* pvar = (float*)var_info->GetVarPtr();
 | 
			
		||||
        GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
 | 
			
		||||
        ImGuiContext& g = *GImGui;
 | 
			
		||||
        float* pvar = (float*)var_info->GetVarPtr(&g.Style);
 | 
			
		||||
        g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
 | 
			
		||||
        *pvar = val;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -5676,8 +5686,9 @@ void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
 | 
			
		||||
    const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
 | 
			
		||||
    if (var_info->Type == ImGuiDataType_Float2)
 | 
			
		||||
    {
 | 
			
		||||
        ImVec2* pvar = (ImVec2*)var_info->GetVarPtr();
 | 
			
		||||
        GImGui->StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
 | 
			
		||||
        ImGuiContext& g = *GImGui;
 | 
			
		||||
        ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
 | 
			
		||||
        g.StyleModifiers.push_back(ImGuiStyleMod(idx, *pvar));
 | 
			
		||||
        *pvar = val;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -5691,9 +5702,9 @@ void ImGui::PopStyleVar(int count)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiStyleMod& backup = g.StyleModifiers.back();
 | 
			
		||||
        const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
 | 
			
		||||
        if (info->Type == ImGuiDataType_Float)          (*(float*)info->GetVarPtr()) = backup.BackupFloat[0];
 | 
			
		||||
        else if (info->Type == ImGuiDataType_Float2)    (*(ImVec2*)info->GetVarPtr()) = ImVec2(backup.BackupFloat[0], backup.BackupFloat[1]);
 | 
			
		||||
        else if (info->Type == ImGuiDataType_Int)       (*(int*)info->GetVarPtr()) = backup.BackupInt[0];
 | 
			
		||||
        if (info->Type == ImGuiDataType_Float)          (*(float*)info->GetVarPtr(&g.Style)) = backup.BackupFloat[0];
 | 
			
		||||
        else if (info->Type == ImGuiDataType_Float2)    (*(ImVec2*)info->GetVarPtr(&g.Style)) = ImVec2(backup.BackupFloat[0], backup.BackupFloat[1]);
 | 
			
		||||
        else if (info->Type == ImGuiDataType_Int)       (*(int*)info->GetVarPtr(&g.Style)) = backup.BackupInt[0];
 | 
			
		||||
        g.StyleModifiers.pop_back();
 | 
			
		||||
        count--;
 | 
			
		||||
    }
 | 
			
		||||
@@ -5715,8 +5726,8 @@ const char* ImGui::GetStyleColorName(ImGuiCol idx)
 | 
			
		||||
    case ImGuiCol_FrameBgHovered: return "FrameBgHovered";
 | 
			
		||||
    case ImGuiCol_FrameBgActive: return "FrameBgActive";
 | 
			
		||||
    case ImGuiCol_TitleBg: return "TitleBg";
 | 
			
		||||
    case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
 | 
			
		||||
    case ImGuiCol_TitleBgActive: return "TitleBgActive";
 | 
			
		||||
    case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
 | 
			
		||||
    case ImGuiCol_MenuBarBg: return "MenuBarBg";
 | 
			
		||||
    case ImGuiCol_ScrollbarBg: return "ScrollbarBg";
 | 
			
		||||
    case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab";
 | 
			
		||||
@@ -9271,6 +9282,12 @@ bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, co
 | 
			
		||||
    return InputTextEx(label, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline float SmallSquareSize()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    return g.FontSize + g.Style.FramePadding.y * 2.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NB: scalar_format here must be a simple "%xx" format string with no prefix/suffix (unlike the Drag/Slider functions "display_format" argument)
 | 
			
		||||
bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data_ptr, void* step_ptr, void* step_fast_ptr, const char* scalar_format, ImGuiInputTextFlags extra_flags)
 | 
			
		||||
{
 | 
			
		||||
@@ -9284,7 +9301,7 @@ bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data
 | 
			
		||||
 | 
			
		||||
    BeginGroup();
 | 
			
		||||
    PushID(label);
 | 
			
		||||
    const ImVec2 button_sz = ImVec2(g.FontSize, g.FontSize) + style.FramePadding*2.0f;
 | 
			
		||||
    const ImVec2 button_sz = ImVec2(SmallSquareSize(), SmallSquareSize());
 | 
			
		||||
    if (step_ptr)
 | 
			
		||||
        PushItemWidth(ImMax(1.0f, CalcItemWidth() - (button_sz.x + style.ItemInnerSpacing.x)*2));
 | 
			
		||||
 | 
			
		||||
@@ -9498,7 +9515,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, float popup
 | 
			
		||||
    if (!ItemAdd(total_bb, &id, &frame_bb))
 | 
			
		||||
        return false;
 | 
			
		||||
 | 
			
		||||
    const float arrow_size = (g.FontSize + style.FramePadding.x * 2.0f);
 | 
			
		||||
    const float arrow_size = SmallSquareSize();
 | 
			
		||||
    const bool hovered = IsHovered(frame_bb, id);
 | 
			
		||||
    const bool navigated = g.NavId == id;
 | 
			
		||||
    bool popup_open = IsPopupOpen(id);
 | 
			
		||||
@@ -9507,7 +9524,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, float popup
 | 
			
		||||
    RenderNavHighlight(frame_bb, id);
 | 
			
		||||
    RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
 | 
			
		||||
    RenderFrame(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y), frame_bb.Max, GetColorU32(popup_open || hovered || navigated ? ImGuiCol_ButtonHovered : ImGuiCol_Button), true, style.FrameRounding); // FIXME-ROUNDING
 | 
			
		||||
    RenderCollapseTriangle(ImVec2(frame_bb.Max.x-arrow_size, frame_bb.Min.y) + style.FramePadding, true);
 | 
			
		||||
    RenderCollapseTriangle(ImVec2(frame_bb.Max.x - arrow_size + style.FramePadding.y, frame_bb.Min.y + style.FramePadding.y), true);
 | 
			
		||||
 | 
			
		||||
    if (preview_value != NULL)
 | 
			
		||||
        RenderTextClipped(frame_bb.Min + style.FramePadding, value_bb.Max, preview_value, NULL, NULL, ImVec2(0.0f,0.0f));
 | 
			
		||||
@@ -10071,12 +10088,6 @@ void ImGui::ColorTooltip(const char* text, const float col[4], ImGuiColorEditFla
 | 
			
		||||
    EndTooltip();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline float ColorSquareSize()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    return g.FontSize + g.Style.FramePadding.y * 2.0f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline ImU32 ImAlphaBlendColor(ImU32 col_a, ImU32 col_b)
 | 
			
		||||
{
 | 
			
		||||
    float t = ((col_b >> IM_COL32_A_SHIFT) & 0xFF) / 255.f;
 | 
			
		||||
@@ -10148,7 +10159,7 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
 | 
			
		||||
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    const ImGuiID id = window->GetID(desc_id);
 | 
			
		||||
    float default_size = ColorSquareSize();
 | 
			
		||||
    float default_size = SmallSquareSize();
 | 
			
		||||
    if (size.x == 0.0f)
 | 
			
		||||
        size.x = default_size;
 | 
			
		||||
    if (size.y == 0.0f)
 | 
			
		||||
@@ -10194,7 +10205,7 @@ bool ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flag
 | 
			
		||||
    return ColorEdit4(label, col, flags | ImGuiColorEditFlags_NoAlpha);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ColorEditOptionsPopup(ImGuiColorEditFlags flags)
 | 
			
		||||
static void ColorEditOptionsPopup(ImGuiColorEditFlags flags, float* col)
 | 
			
		||||
{
 | 
			
		||||
    bool allow_opt_inputs = !(flags & ImGuiColorEditFlags__InputsMask);
 | 
			
		||||
    bool allow_opt_datatype = !(flags & ImGuiColorEditFlags__DataTypeMask);
 | 
			
		||||
@@ -10214,6 +10225,26 @@ static void ColorEditOptionsPopup(ImGuiColorEditFlags flags)
 | 
			
		||||
        if (ImGui::RadioButton("0..255",     (opts & ImGuiColorEditFlags_Uint8) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Uint8;
 | 
			
		||||
        if (ImGui::RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) ? 1 : 0)) opts = (opts & ~ImGuiColorEditFlags__DataTypeMask) | ImGuiColorEditFlags_Float;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (allow_opt_inputs || allow_opt_datatype) ImGui::Separator();
 | 
			
		||||
    if (ImGui::Button("Copy as..", ImVec2(-1,0)))
 | 
			
		||||
        ImGui::OpenPopup("Copy");
 | 
			
		||||
    if (ImGui::BeginPopup("Copy"))
 | 
			
		||||
    {
 | 
			
		||||
        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];
 | 
			
		||||
        sprintf(buf, "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
 | 
			
		||||
        if (ImGui::Selectable(buf))
 | 
			
		||||
            ImGui::SetClipboardText(buf);
 | 
			
		||||
        sprintf(buf, "(%d,%d,%d,%d)", cr, cg, cb, ca);
 | 
			
		||||
        if (ImGui::Selectable(buf))
 | 
			
		||||
            ImGui::SetClipboardText(buf);
 | 
			
		||||
        sprintf(buf, (flags & ImGuiColorEditFlags_NoAlpha) ? "0x%02X%02X%02X" : "0x%02X%02X%02X%02X", cr, cg, cb, ca);
 | 
			
		||||
        if (ImGui::Selectable(buf))
 | 
			
		||||
            ImGui::SetClipboardText(buf);
 | 
			
		||||
        ImGui::EndPopup();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    g.ColorEditOptions = opts;
 | 
			
		||||
    ImGui::EndPopup();
 | 
			
		||||
}
 | 
			
		||||
@@ -10227,7 +10258,7 @@ static void ColorPickerOptionsPopup(ImGuiColorEditFlags flags, float* ref_col)
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    if (allow_opt_picker)
 | 
			
		||||
    {
 | 
			
		||||
        ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (ColorSquareSize() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
 | 
			
		||||
        ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (SmallSquareSize() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
 | 
			
		||||
        ImGui::PushItemWidth(picker_size.x);
 | 
			
		||||
        for (int picker_type = 0; picker_type < 2; picker_type++)
 | 
			
		||||
        {
 | 
			
		||||
@@ -10267,7 +10298,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    const ImGuiStyle& style = g.Style;
 | 
			
		||||
    const float w_extra = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (ColorSquareSize() + style.ItemInnerSpacing.x);
 | 
			
		||||
    const float square_sz = SmallSquareSize();
 | 
			
		||||
    const float w_extra = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
 | 
			
		||||
    const float w_items_all = CalcItemWidth() - w_extra;
 | 
			
		||||
    const char* label_display_end = FindRenderedTextEnd(label);
 | 
			
		||||
 | 
			
		||||
@@ -10285,7 +10317,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
 | 
			
		||||
    // Context menu: display and modify options (before defaults are applied)
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags_NoOptions))
 | 
			
		||||
        ColorEditOptionsPopup(flags);
 | 
			
		||||
        ColorEditOptionsPopup(flags, col);
 | 
			
		||||
 
 | 
			
		||||
    // Read stored options
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags__InputsMask))
 | 
			
		||||
@@ -10398,7 +10430,6 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
                TextUnformatted(label, label_display_end);
 | 
			
		||||
                Separator();
 | 
			
		||||
            }
 | 
			
		||||
            float square_sz = ColorSquareSize();
 | 
			
		||||
            ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
 | 
			
		||||
            ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags__InputsMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
 | 
			
		||||
            PushItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
 | 
			
		||||
@@ -10515,7 +10546,8 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
    // Setup
 | 
			
		||||
    bool alpha_bar = (flags & ImGuiColorEditFlags_AlphaBar) && !(flags & ImGuiColorEditFlags_NoAlpha);
 | 
			
		||||
    ImVec2 picker_pos = window->DC.CursorPos;
 | 
			
		||||
    float bars_width = ColorSquareSize(); // Arbitrary smallish width of Hue/Alpha picking bars
 | 
			
		||||
    float square_sz = SmallSquareSize();
 | 
			
		||||
    float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars
 | 
			
		||||
    float sv_picker_size = ImMax(bars_width * 1, CalcItemWidth() - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
 | 
			
		||||
    float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x;
 | 
			
		||||
    float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x;
 | 
			
		||||
@@ -10627,7 +10659,6 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags_NoSidePreview))
 | 
			
		||||
    {
 | 
			
		||||
        ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
 | 
			
		||||
        float square_sz = ColorSquareSize();
 | 
			
		||||
        if ((flags & ImGuiColorEditFlags_NoLabel))
 | 
			
		||||
            Text("Current");
 | 
			
		||||
        ColorButton("##current", col_v4, (flags & (ImGuiColorEditFlags_HDR|ImGuiColorEditFlags_AlphaPreview|ImGuiColorEditFlags_AlphaPreviewHalf|ImGuiColorEditFlags_NoTooltip)), ImVec2(square_sz * 3, square_sz * 2));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user