mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	@@ -4000,7 +4000,11 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__DataTypeMask);
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags__PickerMask))
 | 
			
		||||
        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__PickerMask);
 | 
			
		||||
    flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask));
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags__InputMask))
 | 
			
		||||
        flags |= (g.ColorEditOptions & ImGuiColorEditFlags__InputMask);
 | 
			
		||||
    flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags__DisplayMask | ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask));
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask)); // Check that only 1 is selected
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));   // Check that only 1 is selected
 | 
			
		||||
 | 
			
		||||
    const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0;
 | 
			
		||||
    const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0;
 | 
			
		||||
@@ -4008,7 +4012,9 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
 | 
			
		||||
    // Convert to the formats we need
 | 
			
		||||
    float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f };
 | 
			
		||||
    if (flags & ImGuiColorEditFlags_DisplayHSV)
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
 | 
			
		||||
        ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
 | 
			
		||||
    else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
 | 
			
		||||
        ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
 | 
			
		||||
    int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
 | 
			
		||||
 | 
			
		||||
@@ -4113,8 +4119,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
                TextEx(label, label_display_end);
 | 
			
		||||
                Spacing();
 | 
			
		||||
            }
 | 
			
		||||
            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__DisplayMask | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
 | 
			
		||||
            ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__PickerMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
 | 
			
		||||
            ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
 | 
			
		||||
            PushItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
 | 
			
		||||
            value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x);
 | 
			
		||||
            PopItemWidth();
 | 
			
		||||
@@ -4134,8 +4140,10 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
        if (!value_changed_as_float)
 | 
			
		||||
            for (int n = 0; n < 4; n++)
 | 
			
		||||
                f[n] = i[n] / 255.0f;
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_DisplayHSV)
 | 
			
		||||
        if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
 | 
			
		||||
            ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
 | 
			
		||||
        if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
 | 
			
		||||
            ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
 | 
			
		||||
 | 
			
		||||
        col[0] = f[0];
 | 
			
		||||
        col[1] = f[1];
 | 
			
		||||
@@ -4151,16 +4159,21 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
 | 
			
		||||
    // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
 | 
			
		||||
    if ((window->DC.LastItemStatusFlags & ImGuiItemStatusFlags_HoveredRect) && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropTarget())
 | 
			
		||||
    {
 | 
			
		||||
        bool accepted_drag_drop = false;
 | 
			
		||||
        if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
 | 
			
		||||
        {
 | 
			
		||||
            memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any //-V512
 | 
			
		||||
            value_changed = true;
 | 
			
		||||
            value_changed = accepted_drag_drop = true;
 | 
			
		||||
        }
 | 
			
		||||
        if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
 | 
			
		||||
        {
 | 
			
		||||
            memcpy((float*)col, payload->Data, sizeof(float) * components);
 | 
			
		||||
            value_changed = true;
 | 
			
		||||
            value_changed = accepted_drag_drop = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Drag-drop payloads are always RGB
 | 
			
		||||
        if (accepted_drag_drop && (flags & ImGuiColorEditFlags_InputHSV))
 | 
			
		||||
            ColorConvertRGBtoHSV(col[0], col[1], col[2], col[0], col[1], col[2]);
 | 
			
		||||
        EndDragDropTarget();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -4239,6 +4252,7 @@ static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
 | 
			
		||||
// (In C++ the 'float col[4]' notation for a function argument is equivalent to 'float* col', we only specify a size to facilitate understanding of the code.)
 | 
			
		||||
// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..)
 | 
			
		||||
bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col)
 | 
			
		||||
{
 | 
			
		||||
@@ -4264,7 +4278,10 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
    // Read stored options
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags__PickerMask))
 | 
			
		||||
        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__PickerMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__PickerMask;
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags__InputMask))
 | 
			
		||||
        flags |= ((g.ColorEditOptions & ImGuiColorEditFlags__InputMask) ? g.ColorEditOptions : ImGuiColorEditFlags__OptionsDefault) & ImGuiColorEditFlags__InputMask;
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask)); // Check that only 1 is selected
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));  // Check that only 1 is selected
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags_NoOptions))
 | 
			
		||||
        flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar);
 | 
			
		||||
 | 
			
		||||
@@ -4293,8 +4310,12 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
    ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point.
 | 
			
		||||
    ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point.
 | 
			
		||||
 | 
			
		||||
    float H,S,V;
 | 
			
		||||
    ColorConvertRGBtoHSV(col[0], col[1], col[2], H, S, V);
 | 
			
		||||
    float H = col[0], S = col[1], V = col[2];
 | 
			
		||||
    float R = col[0], G = col[1], B = col[2];
 | 
			
		||||
    if (flags & ImGuiColorEditFlags_InputRGB)
 | 
			
		||||
        ColorConvertRGBtoHSV(R, G, B, H, S, V);
 | 
			
		||||
    else if (flags & ImGuiColorEditFlags_InputHSV)
 | 
			
		||||
        ColorConvertHSVtoRGB(H, S, V, R, G, B);
 | 
			
		||||
 | 
			
		||||
    bool value_changed = false, value_changed_h = false, value_changed_sv = false;
 | 
			
		||||
 | 
			
		||||
@@ -4394,7 +4415,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
        if ((flags & ImGuiColorEditFlags_NoLabel))
 | 
			
		||||
            Text("Current");
 | 
			
		||||
 | 
			
		||||
        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags_HDR|ImGuiColorEditFlags_AlphaPreview|ImGuiColorEditFlags_AlphaPreviewHalf|ImGuiColorEditFlags_NoTooltip;
 | 
			
		||||
        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip;
 | 
			
		||||
        ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2));
 | 
			
		||||
        if (ref_col != NULL)
 | 
			
		||||
        {
 | 
			
		||||
@@ -4412,14 +4433,25 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
 | 
			
		||||
    // Convert back color to RGB
 | 
			
		||||
    if (value_changed_h || value_changed_sv)
 | 
			
		||||
        ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
 | 
			
		||||
    {
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_InputRGB)
 | 
			
		||||
        {
 | 
			
		||||
            ColorConvertHSVtoRGB(H >= 1.0f ? H - 10 * 1e-6f : H, S > 0.0f ? S : 10*1e-6f, V > 0.0f ? V : 1e-6f, col[0], col[1], col[2]);
 | 
			
		||||
        }
 | 
			
		||||
        else if (flags & ImGuiColorEditFlags_InputHSV)
 | 
			
		||||
        {
 | 
			
		||||
            col[0] = H;
 | 
			
		||||
            col[1] = S;
 | 
			
		||||
            col[2] = V;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // R,G,B and H,S,V slider color editor
 | 
			
		||||
    bool value_changed_fix_hue_wrap = false;
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags_NoInputs) == 0)
 | 
			
		||||
    {
 | 
			
		||||
        PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x);
 | 
			
		||||
        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
 | 
			
		||||
        ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags__DataTypeMask | ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
 | 
			
		||||
        ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker;
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags__DisplayMask) == 0)
 | 
			
		||||
            if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB))
 | 
			
		||||
@@ -4437,7 +4469,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Try to cancel hue wrap (after ColorEdit4 call), if any
 | 
			
		||||
    if (value_changed_fix_hue_wrap)
 | 
			
		||||
    if (value_changed_fix_hue_wrap && (flags & ImGuiColorEditFlags_InputRGB))
 | 
			
		||||
    {
 | 
			
		||||
        float new_H, new_S, new_V;
 | 
			
		||||
        ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V);
 | 
			
		||||
@@ -4450,9 +4482,27 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (value_changed)
 | 
			
		||||
    {
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_InputRGB)
 | 
			
		||||
        {
 | 
			
		||||
            R = col[0];
 | 
			
		||||
            G = col[1];
 | 
			
		||||
            B = col[2];
 | 
			
		||||
            ColorConvertRGBtoHSV(R, G, B, H, S, V);
 | 
			
		||||
        }
 | 
			
		||||
        else if (flags & ImGuiColorEditFlags_InputHSV)
 | 
			
		||||
        {
 | 
			
		||||
            H = col[0];
 | 
			
		||||
            S = col[1];
 | 
			
		||||
            V = col[2];
 | 
			
		||||
            ColorConvertHSVtoRGB(H, S, V, R, G, B);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ImVec4 hue_color_f(1, 1, 1, 1); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
 | 
			
		||||
    ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f);
 | 
			
		||||
    ImU32 col32_no_alpha = ColorConvertFloat4ToU32(ImVec4(col[0], col[1], col[2], 1.0f));
 | 
			
		||||
    ImU32 col32_no_alpha = ColorConvertFloat4ToU32(ImVec4(R, G, B, 1.0f));
 | 
			
		||||
 | 
			
		||||
    const ImU32 hue_colors[6+1] = { IM_COL32(255,0,0,255), IM_COL32(255,255,0,255), IM_COL32(0,255,0,255), IM_COL32(0,255,255,255), IM_COL32(0,0,255,255), IM_COL32(255,0,255,255), IM_COL32(255,0,0,255) };
 | 
			
		||||
    ImVec2 sv_cursor_pos;
 | 
			
		||||
@@ -4552,6 +4602,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
 | 
			
		||||
// A little colored square. Return true when clicked.
 | 
			
		||||
// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip.
 | 
			
		||||
// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip.
 | 
			
		||||
// Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set.
 | 
			
		||||
bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, ImVec2 size)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
			
		||||
@@ -4576,22 +4627,26 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
 | 
			
		||||
    if (flags & ImGuiColorEditFlags_NoAlpha)
 | 
			
		||||
        flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf);
 | 
			
		||||
 | 
			
		||||
    ImVec4 col_without_alpha(col.x, col.y, col.z, 1.0f);
 | 
			
		||||
    ImVec4 col_rgb = col;
 | 
			
		||||
    if (flags & ImGuiColorEditFlags_InputHSV)
 | 
			
		||||
        ColorConvertHSVtoRGB(col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.x, col_rgb.y, col_rgb.z);
 | 
			
		||||
 | 
			
		||||
    ImVec4 col_rgb_without_alpha(col_rgb.x, col_rgb.y, col_rgb.z, 1.0f);
 | 
			
		||||
    float grid_step = ImMin(size.x, size.y) / 2.99f;
 | 
			
		||||
    float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f);
 | 
			
		||||
    ImRect bb_inner = bb;
 | 
			
		||||
    float off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts.
 | 
			
		||||
    bb_inner.Expand(off);
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col.w < 1.0f)
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f)
 | 
			
		||||
    {
 | 
			
		||||
        float mid_x = (float)(int)((bb_inner.Min.x + bb_inner.Max.x) * 0.5f + 0.5f);
 | 
			
		||||
        RenderColorRectWithAlphaCheckerboard(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
 | 
			
		||||
        window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
 | 
			
		||||
        RenderColorRectWithAlphaCheckerboard(ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawCornerFlags_TopRight| ImDrawCornerFlags_BotRight);
 | 
			
		||||
        window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawCornerFlags_TopLeft|ImDrawCornerFlags_BotLeft);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        // Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha
 | 
			
		||||
        ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col : col_without_alpha;
 | 
			
		||||
        ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col_rgb : col_rgb_without_alpha;
 | 
			
		||||
        if (col_source.w < 1.0f)
 | 
			
		||||
            RenderColorRectWithAlphaCheckerboard(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding);
 | 
			
		||||
        else
 | 
			
		||||
@@ -4608,9 +4663,9 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
 | 
			
		||||
    if (g.ActiveId == id && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropSource())
 | 
			
		||||
    {
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_NoAlpha)
 | 
			
		||||
            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col, sizeof(float) * 3, ImGuiCond_Once);
 | 
			
		||||
            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col_rgb, sizeof(float) * 3, ImGuiCond_Once);
 | 
			
		||||
        else
 | 
			
		||||
            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col, sizeof(float) * 4, ImGuiCond_Once);
 | 
			
		||||
            SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col_rgb, sizeof(float) * 4, ImGuiCond_Once);
 | 
			
		||||
        ColorButton(desc_id, col, flags);
 | 
			
		||||
        SameLine();
 | 
			
		||||
        TextEx("Color");
 | 
			
		||||
@@ -4619,7 +4674,7 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
 | 
			
		||||
 | 
			
		||||
    // Tooltip
 | 
			
		||||
    if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered)
 | 
			
		||||
        ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
 | 
			
		||||
        ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
 | 
			
		||||
 | 
			
		||||
    if (pressed)
 | 
			
		||||
        MarkItemEdited(id);
 | 
			
		||||
@@ -4637,9 +4692,12 @@ void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags)
 | 
			
		||||
        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__DataTypeMask;
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags__PickerMask) == 0)
 | 
			
		||||
        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__PickerMask;
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags__InputMask) == 0)
 | 
			
		||||
        flags |= ImGuiColorEditFlags__OptionsDefault & ImGuiColorEditFlags__InputMask;
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DisplayMask));    // Check only 1 option is selected
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__DataTypeMask));   // Check only 1 option is selected
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__PickerMask));     // Check only 1 option is selected
 | 
			
		||||
    IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags__InputMask));      // Check only 1 option is selected
 | 
			
		||||
    g.ColorEditOptions = flags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -4659,12 +4717,22 @@ void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags
 | 
			
		||||
    ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2);
 | 
			
		||||
    ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : 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]);
 | 
			
		||||
    ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
 | 
			
		||||
    ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags__InputMask | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
 | 
			
		||||
    SameLine();
 | 
			
		||||
    if (flags & ImGuiColorEditFlags_NoAlpha)
 | 
			
		||||
        Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
 | 
			
		||||
    else
 | 
			
		||||
        Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
 | 
			
		||||
    if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags__InputMask))
 | 
			
		||||
    {
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_NoAlpha)
 | 
			
		||||
            Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
 | 
			
		||||
        else
 | 
			
		||||
            Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
 | 
			
		||||
    }
 | 
			
		||||
    else if (flags & ImGuiColorEditFlags_InputHSV)
 | 
			
		||||
    {
 | 
			
		||||
        if (flags & ImGuiColorEditFlags_NoAlpha)
 | 
			
		||||
            Text("H: %.3f, S: %.3f, V: %.3f", col[0], col[1], col[2]);
 | 
			
		||||
        else
 | 
			
		||||
            Text("H: %.3f, S: %.3f, V: %.3f, A: %.3f", col[0], col[1], col[2], col[3]);
 | 
			
		||||
    }
 | 
			
		||||
    EndTooltip();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user