@ -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-6 f : H , S > 0.0f ? S : 10 * 1e-6 f , V > 0.0f ? V : 1e-6 f , col [ 0 ] , col [ 1 ] , col [ 2 ] ) ;
{
if ( flags & ImGuiColorEditFlags_InputRGB )
{
ColorConvertHSVtoRGB ( H > = 1.0f ? H - 10 * 1e-6 f : H , S > 0.0f ? S : 10 * 1e-6 f , V > 0.0f ? V : 1e-6 f , 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 \n R: %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 \n R:%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 \n R: %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 \n R:%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 ( ) ;
}