@ -160,7 +160,7 @@ void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags)
// - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop.
// - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop.
const char * line = text ;
const char * line = text ;
const float line_height = GetTextLineHeight ( ) ;
const float line_height = GetTextLineHeight ( ) ;
ImVec2 text_size ( 0 , 0 ) ;
ImVec2 text_size ( 0 , 0 ) ;
// Lines to skip (can't skip when logging text)
// Lines to skip (can't skip when logging text)
ImVec2 pos = text_pos ;
ImVec2 pos = text_pos ;
@ -332,8 +332,8 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
const float w = CalcItemWidth ( ) ;
const float w = CalcItemWidth ( ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImRect value_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2 ) ) ;
const ImRect value_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2 ) ) ;
const ImRect total_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w + ( label_size . x > 0.0f ? style . ItemInnerSpacing . x : 0.0f ) , style . FramePadding . y * 2 ) + label_size ) ;
const ImRect total_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w + ( label_size . x > 0.0f ? style . ItemInnerSpacing . x : 0.0f ) , style . FramePadding . y * 2 ) + label_size ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
if ( ! ItemAdd ( total_bb , 0 ) )
if ( ! ItemAdd ( total_bb , 0 ) )
return ;
return ;
@ -341,7 +341,7 @@ void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
// Render
// Render
const char * value_text_begin = & g . TempBuffer [ 0 ] ;
const char * value_text_begin = & g . TempBuffer [ 0 ] ;
const char * value_text_end = value_text_begin + ImFormatStringV ( g . TempBuffer , IM_ARRAYSIZE ( g . TempBuffer ) , fmt , args ) ;
const char * value_text_end = value_text_begin + ImFormatStringV ( g . TempBuffer , IM_ARRAYSIZE ( g . TempBuffer ) , fmt , args ) ;
RenderTextClipped ( value_bb . Min , value_bb . Max , value_text_begin , value_text_end , NULL , ImVec2 ( 0.0f , 0.5f ) ) ;
RenderTextClipped ( value_bb . Min , value_bb . Max , value_text_begin , value_text_end , NULL , ImVec2 ( 0.0f , 0.5f ) ) ;
if ( label_size . x > 0.0f )
if ( label_size . x > 0.0f )
RenderText ( ImVec2 ( value_bb . Max . x + style . ItemInnerSpacing . x , value_bb . Min . y + style . FramePadding . y ) , label ) ;
RenderText ( ImVec2 ( value_bb . Max . x + style . ItemInnerSpacing . x , value_bb . Min . y + style . FramePadding . y ) , label ) ;
}
}
@ -377,7 +377,7 @@ void ImGui::BulletTextV(const char* fmt, va_list args)
// Render
// Render
ImU32 text_col = GetColorU32 ( ImGuiCol_Text ) ;
ImU32 text_col = GetColorU32 ( ImGuiCol_Text ) ;
RenderBullet ( window - > DrawList , bb . Min + ImVec2 ( style . FramePadding . x + g . FontSize * 0.5f , g . FontSize * 0.5f ) , text_col ) ;
RenderBullet ( window - > DrawList , bb . Min + ImVec2 ( style . FramePadding . x + g . FontSize * 0.5f , g . FontSize * 0.5f ) , text_col ) ;
RenderText ( bb . Min + ImVec2 ( g . FontSize + style . FramePadding . x * 2 , 0.0f ) , text_begin , text_end , false ) ;
RenderText ( bb . Min + ImVec2 ( g . FontSize + style . FramePadding . x * 2 , 0.0f ) , text_begin , text_end , false ) ;
}
}
@ -781,8 +781,8 @@ bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)//, float size)
float cross_extent = g . FontSize * 0.5f * 0.7071f - 1.0f ;
float cross_extent = g . FontSize * 0.5f * 0.7071f - 1.0f ;
ImU32 cross_col = GetColorU32 ( ImGuiCol_Text ) ;
ImU32 cross_col = GetColorU32 ( ImGuiCol_Text ) ;
center - = ImVec2 ( 0.5f , 0.5f ) ;
center - = ImVec2 ( 0.5f , 0.5f ) ;
window - > DrawList - > AddLine ( center + ImVec2 ( + cross_extent , + cross_extent ) , center + ImVec2 ( - cross_extent , - cross_extent ) , cross_col , 1.0f ) ;
window - > DrawList - > AddLine ( center + ImVec2 ( + cross_extent , + cross_extent ) , center + ImVec2 ( - cross_extent , - cross_extent ) , cross_col , 1.0f ) ;
window - > DrawList - > AddLine ( center + ImVec2 ( + cross_extent , - cross_extent ) , center + ImVec2 ( - cross_extent , + cross_extent ) , cross_col , 1.0f ) ;
window - > DrawList - > AddLine ( center + ImVec2 ( + cross_extent , - cross_extent ) , center + ImVec2 ( - cross_extent , + cross_extent ) , cross_col , 1.0f ) ;
return pressed ;
return pressed ;
}
}
@ -1074,7 +1074,7 @@ bool ImGui::Checkbox(const char* label, bool* v)
else if ( * v )
else if ( * v )
{
{
const float pad = ImMax ( 1.0f , IM_FLOOR ( square_sz / 6.0f ) ) ;
const float pad = ImMax ( 1.0f , IM_FLOOR ( square_sz / 6.0f ) ) ;
RenderCheckMark ( window - > DrawList , check_bb . Min + ImVec2 ( pad , pad ) , check_col , square_sz - pad * 2.0f ) ;
RenderCheckMark ( window - > DrawList , check_bb . Min + ImVec2 ( pad , pad ) , check_col , square_sz - pad * 2.0f ) ;
}
}
if ( g . LogEnabled )
if ( g . LogEnabled )
@ -1140,7 +1140,7 @@ bool ImGui::RadioButton(const char* label, bool active)
if ( style . FrameBorderSize > 0.0f )
if ( style . FrameBorderSize > 0.0f )
{
{
window - > DrawList - > AddCircle ( center + ImVec2 ( 1 , 1 ) , radius , GetColorU32 ( ImGuiCol_BorderShadow ) , 16 , style . FrameBorderSize ) ;
window - > DrawList - > AddCircle ( center + ImVec2 ( 1 , 1 ) , radius , GetColorU32 ( ImGuiCol_BorderShadow ) , 16 , style . FrameBorderSize ) ;
window - > DrawList - > AddCircle ( center , radius , GetColorU32 ( ImGuiCol_Border ) , 16 , style . FrameBorderSize ) ;
window - > DrawList - > AddCircle ( center , radius , GetColorU32 ( ImGuiCol_Border ) , 16 , style . FrameBorderSize ) ;
}
}
@ -1173,7 +1173,7 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over
const ImGuiStyle & style = g . Style ;
const ImGuiStyle & style = g . Style ;
ImVec2 pos = window - > DC . CursorPos ;
ImVec2 pos = window - > DC . CursorPos ;
ImVec2 size = CalcItemSize ( size_arg , CalcItemWidth ( ) , g . FontSize + style . FramePadding . y * 2.0f ) ;
ImVec2 size = CalcItemSize ( size_arg , CalcItemWidth ( ) , g . FontSize + style . FramePadding . y * 2.0f ) ;
ImRect bb ( pos , pos + size ) ;
ImRect bb ( pos , pos + size ) ;
ItemSize ( size , style . FramePadding . y ) ;
ItemSize ( size , style . FramePadding . y ) ;
if ( ! ItemAdd ( bb , 0 ) )
if ( ! ItemAdd ( bb , 0 ) )
@ -1190,13 +1190,13 @@ void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* over
char overlay_buf [ 32 ] ;
char overlay_buf [ 32 ] ;
if ( ! overlay )
if ( ! overlay )
{
{
ImFormatString ( overlay_buf , IM_ARRAYSIZE ( overlay_buf ) , " %.0f%% " , fraction * 100 + 0.01f ) ;
ImFormatString ( overlay_buf , IM_ARRAYSIZE ( overlay_buf ) , " %.0f%% " , fraction * 100 + 0.01f ) ;
overlay = overlay_buf ;
overlay = overlay_buf ;
}
}
ImVec2 overlay_size = CalcTextSize ( overlay , NULL ) ;
ImVec2 overlay_size = CalcTextSize ( overlay , NULL ) ;
if ( overlay_size . x > 0.0f )
if ( overlay_size . x > 0.0f )
RenderTextClipped ( ImVec2 ( ImClamp ( fill_br . x + style . ItemSpacing . x , bb . Min . x , bb . Max . x - overlay_size . x - style . ItemInnerSpacing . x ) , bb . Min . y ) , bb . Max , overlay , NULL , & overlay_size , ImVec2 ( 0.0f , 0.5f ) , & bb ) ;
RenderTextClipped ( ImVec2 ( ImClamp ( fill_br . x + style . ItemSpacing . x , bb . Min . x , bb . Max . x - overlay_size . x - style . ItemInnerSpacing . x ) , bb . Min . y ) , bb . Max , overlay , NULL , & overlay_size , ImVec2 ( 0.0f , 0.5f ) , & bb ) ;
}
}
void ImGui : : Bullet ( )
void ImGui : : Bullet ( )
@ -1207,18 +1207,18 @@ void ImGui::Bullet()
ImGuiContext & g = * GImGui ;
ImGuiContext & g = * GImGui ;
const ImGuiStyle & style = g . Style ;
const ImGuiStyle & style = g . Style ;
const float line_height = ImMax ( ImMin ( window - > DC . CurrLineSize . y , g . FontSize + g . Style . FramePadding . y * 2 ) , g . FontSize ) ;
const float line_height = ImMax ( ImMin ( window - > DC . CurrLineSize . y , g . FontSize + g . Style . FramePadding . y * 2 ) , g . FontSize ) ;
const ImRect bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( g . FontSize , line_height ) ) ;
const ImRect bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( g . FontSize , line_height ) ) ;
ItemSize ( bb ) ;
ItemSize ( bb ) ;
if ( ! ItemAdd ( bb , 0 ) )
if ( ! ItemAdd ( bb , 0 ) )
{
{
SameLine ( 0 , style . FramePadding . x * 2 ) ;
SameLine ( 0 , style . FramePadding . x * 2 ) ;
return ;
return ;
}
}
// Render and stay on same line
// Render and stay on same line
ImU32 text_col = GetColorU32 ( ImGuiCol_Text ) ;
ImU32 text_col = GetColorU32 ( ImGuiCol_Text ) ;
RenderBullet ( window - > DrawList , bb . Min + ImVec2 ( style . FramePadding . x + g . FontSize * 0.5f , line_height * 0.5f ) , text_col ) ;
RenderBullet ( window - > DrawList , bb . Min + ImVec2 ( style . FramePadding . x + g . FontSize * 0.5f , line_height * 0.5f ) , text_col ) ;
SameLine ( 0 , style . FramePadding . x * 2.0f ) ;
SameLine ( 0 , style . FramePadding . x * 2.0f ) ;
}
}
@ -1491,7 +1491,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const float expected_w = CalcItemWidth ( ) ;
const float expected_w = CalcItemWidth ( ) ;
const float w = ( flags & ImGuiComboFlags_NoPreview ) ? arrow_size : expected_w ;
const float w = ( flags & ImGuiComboFlags_NoPreview ) ? arrow_size : expected_w ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2.0f ) ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2.0f ) ) ;
const ImRect total_bb ( frame_bb . Min , frame_bb . Max + ImVec2 ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f , 0.0f ) ) ;
const ImRect total_bb ( frame_bb . Min , frame_bb . Max + ImVec2 ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f , 0.0f ) ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
if ( ! ItemAdd ( total_bb , id , & frame_bb ) )
if ( ! ItemAdd ( total_bb , id , & frame_bb ) )
@ -1516,7 +1516,7 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
}
}
RenderFrameBorder ( frame_bb . Min , frame_bb . Max , style . FrameRounding ) ;
RenderFrameBorder ( frame_bb . Min , frame_bb . Max , style . FrameRounding ) ;
if ( preview_value ! = NULL & & ! ( flags & ImGuiComboFlags_NoPreview ) )
if ( preview_value ! = NULL & & ! ( flags & ImGuiComboFlags_NoPreview ) )
RenderTextClipped ( frame_bb . Min + style . FramePadding , ImVec2 ( value_x2 , frame_bb . Max . y ) , preview_value , NULL , NULL , ImVec2 ( 0.0f , 0.0f ) ) ;
RenderTextClipped ( frame_bb . Min + style . FramePadding , ImVec2 ( value_x2 , frame_bb . Max . y ) , preview_value , NULL , NULL , ImVec2 ( 0.0f , 0.0f ) ) ;
if ( label_size . x > 0 )
if ( label_size . x > 0 )
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , frame_bb . Min . y + style . FramePadding . y ) , label ) ;
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , frame_bb . Min . y + style . FramePadding . y ) , label ) ;
@ -2018,7 +2018,7 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
// Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
// Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
float adjust_delta = 0.0f ;
float adjust_delta = 0.0f ;
if ( g . ActiveIdSource = = ImGuiInputSource_Mouse & & IsMousePosValid ( ) & & g . IO . MouseDragMaxDistanceSqr [ 0 ] > 1.0f * 1.0f )
if ( g . ActiveIdSource = = ImGuiInputSource_Mouse & & IsMousePosValid ( ) & & g . IO . MouseDragMaxDistanceSqr [ 0 ] > 1.0f * 1.0f )
{
{
adjust_delta = g . IO . MouseDelta [ axis ] ;
adjust_delta = g . IO . MouseDelta [ axis ] ;
if ( g . IO . KeyAlt )
if ( g . IO . KeyAlt )
@ -2155,7 +2155,7 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data,
const ImGuiID id = window - > GetID ( label ) ;
const ImGuiID id = window - > GetID ( label ) ;
const float w = CalcItemWidth ( ) ;
const float w = CalcItemWidth ( ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2.0f ) ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2.0f ) ) ;
const ImRect total_bb ( frame_bb . Min , frame_bb . Max + ImVec2 ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f , 0.0f ) ) ;
const ImRect total_bb ( frame_bb . Min , frame_bb . Max + ImVec2 ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f , 0.0f ) ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
@ -2376,12 +2376,12 @@ float ImGui::SliderCalcRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_m
if ( v_clamped < 0.0f )
if ( v_clamped < 0.0f )
{
{
const float f = 1.0f - ( float ) ( ( v_clamped - v_min ) / ( ImMin ( ( TYPE ) 0 , v_max ) - v_min ) ) ;
const float f = 1.0f - ( float ) ( ( v_clamped - v_min ) / ( ImMin ( ( TYPE ) 0 , v_max ) - v_min ) ) ;
return ( 1.0f - ImPow ( f , 1.0f / power ) ) * linear_zero_pos ;
return ( 1.0f - ImPow ( f , 1.0f / power ) ) * linear_zero_pos ;
}
}
else
else
{
{
const float f = ( float ) ( ( v_clamped - ImMax ( ( TYPE ) 0 , v_min ) ) / ( v_max - ImMax ( ( TYPE ) 0 , v_min ) ) ) ;
const float f = ( float ) ( ( v_clamped - ImMax ( ( TYPE ) 0 , v_min ) ) / ( v_max - ImMax ( ( TYPE ) 0 , v_min ) ) ) ;
return linear_zero_pos + ImPow ( f , 1.0f / power ) * ( 1.0f - linear_zero_pos ) ;
return linear_zero_pos + ImPow ( f , 1.0f / power ) * ( 1.0f - linear_zero_pos ) ;
}
}
}
}
@ -2457,7 +2457,7 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ
}
}
else if ( delta ! = 0.0f )
else if ( delta ! = 0.0f )
{
{
clicked_t = SliderCalcRatioFromValueT < TYPE , FLOATTYPE > ( data_type , * v , v_min , v_max , power , linear_zero_pos ) ;
clicked_t = SliderCalcRatioFromValueT < TYPE , FLOATTYPE > ( data_type , * v , v_min , v_max , power , linear_zero_pos ) ;
const int decimal_precision = is_decimal ? ImParseFormatPrecision ( format , 3 ) : 0 ;
const int decimal_precision = is_decimal ? ImParseFormatPrecision ( format , 3 ) : 0 ;
if ( ( decimal_precision > 0 ) | | is_power )
if ( ( decimal_precision > 0 ) | | is_power )
{
{
@ -2529,7 +2529,7 @@ bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_typ
}
}
// Round to user desired precision based on format string
// Round to user desired precision based on format string
v_new = RoundScalarWithFormatT < TYPE , SIGNEDTYPE > ( format , data_type , v_new ) ;
v_new = RoundScalarWithFormatT < TYPE , SIGNEDTYPE > ( format , data_type , v_new ) ;
// Apply result
// Apply result
if ( * v ! = v_new )
if ( * v ! = v_new )
@ -2572,23 +2572,23 @@ bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type
case ImGuiDataType_S16 : { ImS32 v32 = ( ImS32 ) * ( ImS16 * ) p_v ; bool r = SliderBehaviorT < ImS32 , ImS32 , float > ( bb , id , ImGuiDataType_S32 , & v32 , * ( const ImS16 * ) p_min , * ( const ImS16 * ) p_max , format , power , flags , out_grab_bb ) ; if ( r ) * ( ImS16 * ) p_v = ( ImS16 ) v32 ; return r ; }
case ImGuiDataType_S16 : { ImS32 v32 = ( ImS32 ) * ( ImS16 * ) p_v ; bool r = SliderBehaviorT < ImS32 , ImS32 , float > ( bb , id , ImGuiDataType_S32 , & v32 , * ( const ImS16 * ) p_min , * ( const ImS16 * ) p_max , format , power , flags , out_grab_bb ) ; if ( r ) * ( ImS16 * ) p_v = ( ImS16 ) v32 ; return r ; }
case ImGuiDataType_U16 : { ImU32 v32 = ( ImU32 ) * ( ImU16 * ) p_v ; bool r = SliderBehaviorT < ImU32 , ImS32 , float > ( bb , id , ImGuiDataType_U32 , & v32 , * ( const ImU16 * ) p_min , * ( const ImU16 * ) p_max , format , power , flags , out_grab_bb ) ; if ( r ) * ( ImU16 * ) p_v = ( ImU16 ) v32 ; return r ; }
case ImGuiDataType_U16 : { ImU32 v32 = ( ImU32 ) * ( ImU16 * ) p_v ; bool r = SliderBehaviorT < ImU32 , ImS32 , float > ( bb , id , ImGuiDataType_U32 , & v32 , * ( const ImU16 * ) p_min , * ( const ImU16 * ) p_max , format , power , flags , out_grab_bb ) ; if ( r ) * ( ImU16 * ) p_v = ( ImU16 ) v32 ; return r ; }
case ImGuiDataType_S32 :
case ImGuiDataType_S32 :
IM_ASSERT ( * ( const ImS32 * ) p_min > = IM_S32_MIN / 2 & & * ( const ImS32 * ) p_max < = IM_S32_MAX / 2 ) ;
IM_ASSERT ( * ( const ImS32 * ) p_min > = IM_S32_MIN / 2 & & * ( const ImS32 * ) p_max < = IM_S32_MAX / 2 ) ;
return SliderBehaviorT < ImS32 , ImS32 , float > ( bb , id , data_type , ( ImS32 * ) p_v , * ( const ImS32 * ) p_min , * ( const ImS32 * ) p_max , format , power , flags , out_grab_bb ) ;
return SliderBehaviorT < ImS32 , ImS32 , float > ( bb , id , data_type , ( ImS32 * ) p_v , * ( const ImS32 * ) p_min , * ( const ImS32 * ) p_max , format , power , flags , out_grab_bb ) ;
case ImGuiDataType_U32 :
case ImGuiDataType_U32 :
IM_ASSERT ( * ( const ImU32 * ) p_max < = IM_U32_MAX / 2 ) ;
IM_ASSERT ( * ( const ImU32 * ) p_max < = IM_U32_MAX / 2 ) ;
return SliderBehaviorT < ImU32 , ImS32 , float > ( bb , id , data_type , ( ImU32 * ) p_v , * ( const ImU32 * ) p_min , * ( const ImU32 * ) p_max , format , power , flags , out_grab_bb ) ;
return SliderBehaviorT < ImU32 , ImS32 , float > ( bb , id , data_type , ( ImU32 * ) p_v , * ( const ImU32 * ) p_min , * ( const ImU32 * ) p_max , format , power , flags , out_grab_bb ) ;
case ImGuiDataType_S64 :
case ImGuiDataType_S64 :
IM_ASSERT ( * ( const ImS64 * ) p_min > = IM_S64_MIN / 2 & & * ( const ImS64 * ) p_max < = IM_S64_MAX / 2 ) ;
IM_ASSERT ( * ( const ImS64 * ) p_min > = IM_S64_MIN / 2 & & * ( const ImS64 * ) p_max < = IM_S64_MAX / 2 ) ;
return SliderBehaviorT < ImS64 , ImS64 , double > ( bb , id , data_type , ( ImS64 * ) p_v , * ( const ImS64 * ) p_min , * ( const ImS64 * ) p_max , format , power , flags , out_grab_bb ) ;
return SliderBehaviorT < ImS64 , ImS64 , double > ( bb , id , data_type , ( ImS64 * ) p_v , * ( const ImS64 * ) p_min , * ( const ImS64 * ) p_max , format , power , flags , out_grab_bb ) ;
case ImGuiDataType_U64 :
case ImGuiDataType_U64 :
IM_ASSERT ( * ( const ImU64 * ) p_max < = IM_U64_MAX / 2 ) ;
IM_ASSERT ( * ( const ImU64 * ) p_max < = IM_U64_MAX / 2 ) ;
return SliderBehaviorT < ImU64 , ImS64 , double > ( bb , id , data_type , ( ImU64 * ) p_v , * ( const ImU64 * ) p_min , * ( const ImU64 * ) p_max , format , power , flags , out_grab_bb ) ;
return SliderBehaviorT < ImU64 , ImS64 , double > ( bb , id , data_type , ( ImU64 * ) p_v , * ( const ImU64 * ) p_min , * ( const ImU64 * ) p_max , format , power , flags , out_grab_bb ) ;
case ImGuiDataType_Float :
case ImGuiDataType_Float :
IM_ASSERT ( * ( const float * ) p_min > = - FLT_MAX / 2.0f & & * ( const float * ) p_max < = FLT_MAX / 2.0f ) ;
IM_ASSERT ( * ( const float * ) p_min > = - FLT_MAX / 2.0f & & * ( const float * ) p_max < = FLT_MAX / 2.0f ) ;
return SliderBehaviorT < float , float , float > ( bb , id , data_type , ( float * ) p_v , * ( const float * ) p_min , * ( const float * ) p_max , format , power , flags , out_grab_bb ) ;
return SliderBehaviorT < float , float , float > ( bb , id , data_type , ( float * ) p_v , * ( const float * ) p_min , * ( const float * ) p_max , format , power , flags , out_grab_bb ) ;
case ImGuiDataType_Double :
case ImGuiDataType_Double :
IM_ASSERT ( * ( const double * ) p_min > = - DBL_MAX / 2.0f & & * ( const double * ) p_max < = DBL_MAX / 2.0f ) ;
IM_ASSERT ( * ( const double * ) p_min > = - DBL_MAX / 2.0f & & * ( const double * ) p_max < = DBL_MAX / 2.0f ) ;
return SliderBehaviorT < double , double , double > ( bb , id , data_type , ( double * ) p_v , * ( const double * ) p_min , * ( const double * ) p_max , format , power , flags , out_grab_bb ) ;
return SliderBehaviorT < double , double , double > ( bb , id , data_type , ( double * ) p_v , * ( const double * ) p_min , * ( const double * ) p_max , format , power , flags , out_grab_bb ) ;
case ImGuiDataType_COUNT : break ;
case ImGuiDataType_COUNT : break ;
}
}
IM_ASSERT ( 0 ) ;
IM_ASSERT ( 0 ) ;
@ -2609,7 +2609,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat
const float w = CalcItemWidth ( ) ;
const float w = CalcItemWidth ( ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2.0f ) ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + ImVec2 ( w , label_size . y + style . FramePadding . y * 2.0f ) ) ;
const ImRect total_bb ( frame_bb . Min , frame_bb . Max + ImVec2 ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f , 0.0f ) ) ;
const ImRect total_bb ( frame_bb . Min , frame_bb . Max + ImVec2 ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f , 0.0f ) ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
ItemSize ( total_bb , style . FramePadding . y ) ;
@ -2666,7 +2666,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
// Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
char value_buf [ 64 ] ;
char value_buf [ 64 ] ;
const char * value_buf_end = value_buf + DataTypeFormatString ( value_buf , IM_ARRAYSIZE ( value_buf ) , data_type , p_data , format ) ;
const char * value_buf_end = value_buf + DataTypeFormatString ( value_buf , IM_ARRAYSIZE ( value_buf ) , data_type , p_data , format ) ;
RenderTextClipped ( frame_bb . Min , frame_bb . Max , value_buf , value_buf_end , NULL , ImVec2 ( 0.5f , 0.5f ) ) ;
RenderTextClipped ( frame_bb . Min , frame_bb . Max , value_buf , value_buf_end , NULL , ImVec2 ( 0.5f , 0.5f ) ) ;
if ( label_size . x > 0.0f )
if ( label_size . x > 0.0f )
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , frame_bb . Min . y + style . FramePadding . y ) , label ) ;
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , frame_bb . Min . y + style . FramePadding . y ) , label ) ;
@ -2735,9 +2735,9 @@ bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, fl
{
{
if ( format = = NULL )
if ( format = = NULL )
format = " %.0f deg " ;
format = " %.0f deg " ;
float v_deg = ( * v_rad ) * 360.0f / ( 2 * IM_PI ) ;
float v_deg = ( * v_rad ) * 360.0f / ( 2 * IM_PI ) ;
bool value_changed = SliderFloat ( label , & v_deg , v_degrees_min , v_degrees_max , format , 1.0f ) ;
bool value_changed = SliderFloat ( label , & v_deg , v_degrees_min , v_degrees_max , format , 1.0f ) ;
* v_rad = v_deg * ( 2 * IM_PI ) / 360.0f ;
* v_rad = v_deg * ( 2 * IM_PI ) / 360.0f ;
return value_changed ;
return value_changed ;
}
}
@ -2813,7 +2813,7 @@ bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType d
// For the vertical slider we allow centered text to overlap the frame padding
// For the vertical slider we allow centered text to overlap the frame padding
char value_buf [ 64 ] ;
char value_buf [ 64 ] ;
const char * value_buf_end = value_buf + DataTypeFormatString ( value_buf , IM_ARRAYSIZE ( value_buf ) , data_type , p_data , format ) ;
const char * value_buf_end = value_buf + DataTypeFormatString ( value_buf , IM_ARRAYSIZE ( value_buf ) , data_type , p_data , format ) ;
RenderTextClipped ( ImVec2 ( frame_bb . Min . x , frame_bb . Min . y + style . FramePadding . y ) , frame_bb . Max , value_buf , value_buf_end , NULL , ImVec2 ( 0.5f , 0.0f ) ) ;
RenderTextClipped ( ImVec2 ( frame_bb . Min . x , frame_bb . Min . y + style . FramePadding . y ) , frame_bb . Max , value_buf , value_buf_end , NULL , ImVec2 ( 0.5f , 0.0f ) ) ;
if ( label_size . x > 0.0f )
if ( label_size . x > 0.0f )
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , frame_bb . Min . y + style . FramePadding . y ) , label ) ;
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , frame_bb . Min . y + style . FramePadding . y ) , label ) ;
@ -3104,7 +3104,7 @@ bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* p_dat
bool ImGui : : InputFloat ( const char * label , float * v , float step , float step_fast , const char * format , ImGuiInputTextFlags flags )
bool ImGui : : InputFloat ( const char * label , float * v , float step , float step_fast , const char * format , ImGuiInputTextFlags flags )
{
{
flags | = ImGuiInputTextFlags_CharsScientific ;
flags | = ImGuiInputTextFlags_CharsScientific ;
return InputScalar ( label , ImGuiDataType_Float , ( void * ) v , ( void * ) ( step > 0.0f ? & step : NULL ) , ( void * ) ( step_fast > 0.0f ? & step_fast : NULL ) , format , flags ) ;
return InputScalar ( label , ImGuiDataType_Float , ( void * ) v , ( void * ) ( step > 0.0f ? & step : NULL ) , ( void * ) ( step_fast > 0.0f ? & step_fast : NULL ) , format , flags ) ;
}
}
bool ImGui : : InputFloat2 ( const char * label , float v [ 2 ] , const char * format , ImGuiInputTextFlags flags )
bool ImGui : : InputFloat2 ( const char * label , float v [ 2 ] , const char * format , ImGuiInputTextFlags flags )
@ -3161,7 +3161,7 @@ bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiIn
{
{
// Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes.
// Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes.
const char * format = ( flags & ImGuiInputTextFlags_CharsHexadecimal ) ? " %08X " : " %d " ;
const char * format = ( flags & ImGuiInputTextFlags_CharsHexadecimal ) ? " %08X " : " %d " ;
return InputScalar ( label , ImGuiDataType_S32 , ( void * ) v , ( void * ) ( step > 0 ? & step : NULL ) , ( void * ) ( step_fast > 0 ? & step_fast : NULL ) , format , flags ) ;
return InputScalar ( label , ImGuiDataType_S32 , ( void * ) v , ( void * ) ( step > 0 ? & step : NULL ) , ( void * ) ( step_fast > 0 ? & step_fast : NULL ) , format , flags ) ;
}
}
bool ImGui : : InputInt2 ( const char * label , int v [ 2 ] , ImGuiInputTextFlags flags )
bool ImGui : : InputInt2 ( const char * label , int v [ 2 ] , ImGuiInputTextFlags flags )
@ -3182,7 +3182,7 @@ bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags)
bool ImGui : : InputDouble ( const char * label , double * v , double step , double step_fast , const char * format , ImGuiInputTextFlags flags )
bool ImGui : : InputDouble ( const char * label , double * v , double step , double step_fast , const char * format , ImGuiInputTextFlags flags )
{
{
flags | = ImGuiInputTextFlags_CharsScientific ;
flags | = ImGuiInputTextFlags_CharsScientific ;
return InputScalar ( label , ImGuiDataType_Double , ( void * ) v , ( void * ) ( step > 0.0 ? & step : NULL ) , ( void * ) ( step_fast > 0.0 ? & step_fast : NULL ) , format , flags ) ;
return InputScalar ( label , ImGuiDataType_Double , ( void * ) v , ( void * ) ( step > 0.0 ? & step : NULL ) , ( void * ) ( step_fast > 0.0 ? & step_fast : NULL ) , format , flags ) ;
}
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
@ -3293,10 +3293,10 @@ static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, STB_TEXTEDIT_STRING* ob
}
}
static bool is_separator ( unsigned int c ) { return ImCharIsBlankW ( c ) | | c = = ' , ' | | c = = ' ; ' | | c = = ' ( ' | | c = = ' ) ' | | c = = ' { ' | | c = = ' } ' | | c = = ' [ ' | | c = = ' ] ' | | c = = ' | ' ; }
static bool is_separator ( unsigned int c ) { return ImCharIsBlankW ( c ) | | c = = ' , ' | | c = = ' ; ' | | c = = ' ( ' | | c = = ' ) ' | | c = = ' { ' | | c = = ' } ' | | c = = ' [ ' | | c = = ' ] ' | | c = = ' | ' ; }
static int is_word_boundary_from_right ( STB_TEXTEDIT_STRING * obj , int idx ) { return idx > 0 ? ( is_separator ( obj - > TextW [ idx - 1 ] ) & & ! is_separator ( obj - > TextW [ idx ] ) ) : 1 ; }
static int is_word_boundary_from_right ( STB_TEXTEDIT_STRING * obj , int idx ) { return idx > 0 ? ( is_separator ( obj - > TextW [ idx - 1 ] ) & & ! is_separator ( obj - > TextW [ idx ] ) ) : 1 ; }
static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL ( STB_TEXTEDIT_STRING * obj , int idx ) { idx - - ; while ( idx > = 0 & & ! is_word_boundary_from_right ( obj , idx ) ) idx - - ; return idx < 0 ? 0 : idx ; }
static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL ( STB_TEXTEDIT_STRING * obj , int idx ) { idx - - ; while ( idx > = 0 & & ! is_word_boundary_from_right ( obj , idx ) ) idx - - ; return idx < 0 ? 0 : idx ; }
# ifdef __APPLE__ // FIXME: Move setting to IO structure
# ifdef __APPLE__ // FIXME: Move setting to IO structure
static int is_word_boundary_from_left ( STB_TEXTEDIT_STRING * obj , int idx ) { return idx > 0 ? ( ! is_separator ( obj - > TextW [ idx - 1 ] ) & & is_separator ( obj - > TextW [ idx ] ) ) : 1 ; }
static int is_word_boundary_from_left ( STB_TEXTEDIT_STRING * obj , int idx ) { return idx > 0 ? ( ! is_separator ( obj - > TextW [ idx - 1 ] ) & & is_separator ( obj - > TextW [ idx ] ) ) : 1 ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( STB_TEXTEDIT_STRING * obj , int idx ) { idx + + ; int len = obj - > CurLenW ; while ( idx < len & & ! is_word_boundary_from_left ( obj , idx ) ) idx + + ; return idx > len ? len : idx ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( STB_TEXTEDIT_STRING * obj , int idx ) { idx + + ; int len = obj - > CurLenW ; while ( idx < len & & ! is_word_boundary_from_left ( obj , idx ) ) idx + + ; return idx > len ? len : idx ; }
# else
# else
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( STB_TEXTEDIT_STRING * obj , int idx ) { idx + + ; int len = obj - > CurLenW ; while ( idx < len & & ! is_word_boundary_from_right ( obj , idx ) ) idx + + ; return idx > len ? len : idx ; }
static int STB_TEXTEDIT_MOVEWORDRIGHT_IMPL ( STB_TEXTEDIT_STRING * obj , int idx ) { idx + + ; int len = obj - > CurLenW ; while ( idx < len & & ! is_word_boundary_from_right ( obj , idx ) ) idx + + ; return idx > len ? len : idx ; }
@ -3502,7 +3502,7 @@ static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags f
// Turn a-z into A-Z
// Turn a-z into A-Z
if ( flags & ImGuiInputTextFlags_CharsUppercase )
if ( flags & ImGuiInputTextFlags_CharsUppercase )
if ( c > = ' a ' & & c < = ' z ' )
if ( c > = ' a ' & & c < = ' z ' )
* p_char = ( c + = ( unsigned int ) ( ' A ' - ' a ' ) ) ;
* p_char = ( c + = ( unsigned int ) ( ' A ' - ' a ' ) ) ;
if ( flags & ImGuiInputTextFlags_CharsNoBlank )
if ( flags & ImGuiInputTextFlags_CharsNoBlank )
if ( ImCharIsBlankW ( c ) )
if ( ImCharIsBlankW ( c ) )
@ -3563,7 +3563,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
BeginGroup ( ) ;
BeginGroup ( ) ;
const ImGuiID id = window - > GetID ( label ) ;
const ImGuiID id = window - > GetID ( label ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImVec2 label_size = CalcTextSize ( label , NULL , true ) ;
const ImVec2 frame_size = CalcItemSize ( size_arg , CalcItemWidth ( ) , ( is_multiline ? g . FontSize * 8.0f : label_size . y ) + style . FramePadding . y * 2.0f ) ; // Arbitrary default of 8 lines high for multi-line
const ImVec2 frame_size = CalcItemSize ( size_arg , CalcItemWidth ( ) , ( is_multiline ? g . FontSize * 8.0f : label_size . y ) + style . FramePadding . y * 2.0f ) ; // Arbitrary default of 8 lines high for multi-line
const ImVec2 total_size = ImVec2 ( frame_size . x + ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f ) , frame_size . y ) ;
const ImVec2 total_size = ImVec2 ( frame_size . x + ( label_size . x > 0.0f ? style . ItemInnerSpacing . x + label_size . x : 0.0f ) , frame_size . y ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + frame_size ) ;
const ImRect frame_bb ( window - > DC . CursorPos , window - > DC . CursorPos + frame_size ) ;
@ -3753,7 +3753,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
// Edit in progress
// Edit in progress
const float mouse_x = ( io . MousePos . x - frame_bb . Min . x - style . FramePadding . x ) + state - > ScrollX ;
const float mouse_x = ( io . MousePos . x - frame_bb . Min . x - style . FramePadding . x ) + state - > ScrollX ;
const float mouse_y = ( is_multiline ? ( io . MousePos . y - draw_window - > DC . CursorPos . y - style . FramePadding . y ) : ( g . FontSize * 0.5f ) ) ;
const float mouse_y = ( is_multiline ? ( io . MousePos . y - draw_window - > DC . CursorPos . y - style . FramePadding . y ) : ( g . FontSize * 0.5f ) ) ;
const bool is_osx = io . ConfigMacOSXBehaviors ;
const bool is_osx = io . ConfigMacOSXBehaviors ;
if ( select_all | | ( hovered & & ! is_osx & & io . MouseDoubleClicked [ 0 ] ) )
if ( select_all | | ( hovered & & ! is_osx & & io . MouseDoubleClicked [ 0 ] ) )
@ -3849,9 +3849,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
if ( ! state - > HasSelection ( ) )
if ( ! state - > HasSelection ( ) )
{
{
if ( is_wordmove_key_down )
if ( is_wordmove_key_down )
state - > OnKeyPressed ( STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT ) ;
state - > OnKeyPressed ( STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT ) ;
else if ( is_osx & & io . KeySuper & & ! io . KeyAlt & & ! io . KeyCtrl )
else if ( is_osx & & io . KeySuper & & ! io . KeyAlt & & ! io . KeyCtrl )
state - > OnKeyPressed ( STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT ) ;
state - > OnKeyPressed ( STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT ) ;
}
}
state - > OnKeyPressed ( STB_TEXTEDIT_K_BACKSPACE | k_mask ) ;
state - > OnKeyPressed ( STB_TEXTEDIT_K_BACKSPACE | k_mask ) ;
}
}
@ -3910,7 +3910,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
{
{
// Filter pasted buffer
// Filter pasted buffer
const int clipboard_len = ( int ) strlen ( clipboard ) ;
const int clipboard_len = ( int ) strlen ( clipboard ) ;
ImWchar * clipboard_filtered = ( ImWchar * ) IM_ALLOC ( ( clipboard_len + 1 ) * sizeof ( ImWchar ) ) ;
ImWchar * clipboard_filtered = ( ImWchar * ) IM_ALLOC ( ( clipboard_len + 1 ) * sizeof ( ImWchar ) ) ;
int clipboard_filtered_len = 0 ;
int clipboard_filtered_len = 0 ;
for ( const char * s = clipboard ; * s ; )
for ( const char * s = clipboard ; * s ; )
{
{
@ -4242,7 +4242,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
{
{
ImVec2 rect_size = InputTextCalcTextSizeW ( p , text_selected_end , & p , NULL , true ) ;
ImVec2 rect_size = InputTextCalcTextSizeW ( p , text_selected_end , & p , NULL , true ) ;
if ( rect_size . x < = 0.0f ) rect_size . x = IM_FLOOR ( g . Font - > GetCharAdvance ( ( ImWchar ) ' ' ) * 0.50f ) ; // So we can see selected empty lines
if ( rect_size . x < = 0.0f ) rect_size . x = IM_FLOOR ( g . Font - > GetCharAdvance ( ( ImWchar ) ' ' ) * 0.50f ) ; // So we can see selected empty lines
ImRect rect ( rect_pos + ImVec2 ( 0.0f , bg_offy_up - g . FontSize ) , rect_pos + ImVec2 ( rect_size . x , bg_offy_dn ) ) ;
ImRect rect ( rect_pos + ImVec2 ( 0.0f , bg_offy_up - g . FontSize ) , rect_pos + ImVec2 ( rect_size . x , bg_offy_dn ) ) ;
rect . ClipWith ( clip_rect ) ;
rect . ClipWith ( clip_rect ) ;
if ( rect . Overlaps ( clip_rect ) )
if ( rect . Overlaps ( clip_rect ) )
draw_window - > DrawList - > AddRectFilled ( rect . Min , rect . Max , bg_color ) ;
draw_window - > DrawList - > AddRectFilled ( rect . Min , rect . Max , bg_color ) ;
@ -4416,8 +4416,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
if ( ( flags & ( ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV ) ) ! = 0 & & ( flags & ImGuiColorEditFlags_NoInputs ) = = 0 )
if ( ( flags & ( ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV ) ) ! = 0 & & ( flags & ImGuiColorEditFlags_NoInputs ) = = 0 )
{
{
// RGB/HSV 0..255 Sliders
// RGB/HSV 0..255 Sliders
const float w_item_one = ImMax ( 1.0f , IM_FLOOR ( ( w_inputs - ( style . ItemInnerSpacing . x ) * ( components - 1 ) ) / ( float ) components ) ) ;
const float w_item_one = ImMax ( 1.0f , IM_FLOOR ( ( w_inputs - ( style . ItemInnerSpacing . x ) * ( components - 1 ) ) / ( float ) components ) ) ;
const float w_item_last = ImMax ( 1.0f , IM_FLOOR ( w_inputs - ( w_item_one + style . ItemInnerSpacing . x ) * ( components - 1 ) ) ) ;
const float w_item_last = ImMax ( 1.0f , IM_FLOOR ( w_inputs - ( w_item_one + style . ItemInnerSpacing . x ) * ( components - 1 ) ) ) ;
const bool hide_prefix = ( w_item_one < = CalcTextSize ( ( flags & ImGuiColorEditFlags_Float ) ? " M:0.000 " : " M:000 " ) . x ) ;
const bool hide_prefix = ( w_item_one < = CalcTextSize ( ( flags & ImGuiColorEditFlags_Float ) ? " M:0.000 " : " M:000 " ) . x ) ;
static const char * ids [ 4 ] = { " ##X " , " ##Y " , " ##Z " , " ##W " } ;
static const char * ids [ 4 ] = { " ##X " , " ##Y " , " ##Z " , " ##W " } ;
@ -4444,7 +4444,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
// FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0.
// FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0.
if ( flags & ImGuiColorEditFlags_Float )
if ( flags & ImGuiColorEditFlags_Float )
{
{
value_changed | = DragFloat ( ids [ n ] , & f [ n ] , 1.0f / 255.0f , 0.0f , hdr ? 0.0f : 1.0f , fmt_table_float [ fmt_idx ] [ n ] ) ;
value_changed | = DragFloat ( ids [ n ] , & f [ n ] , 1.0f / 255.0f , 0.0f , hdr ? 0.0f : 1.0f , fmt_table_float [ fmt_idx ] [ n ] ) ;
value_changed_as_float | = value_changed ;
value_changed_as_float | = value_changed ;
}
}
else
else
@ -4460,9 +4460,9 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
// RGB Hexadecimal Input
// RGB Hexadecimal Input
char buf [ 64 ] ;
char buf [ 64 ] ;
if ( alpha )
if ( alpha )
ImFormatString ( buf , IM_ARRAYSIZE ( buf ) , " #%02X%02X%02X%02X " , ImClamp ( i [ 0 ] , 0 , 255 ) , ImClamp ( i [ 1 ] , 0 , 255 ) , ImClamp ( i [ 2 ] , 0 , 255 ) , ImClamp ( i [ 3 ] , 0 , 255 ) ) ;
ImFormatString ( buf , IM_ARRAYSIZE ( buf ) , " #%02X%02X%02X%02X " , ImClamp ( i [ 0 ] , 0 , 255 ) , ImClamp ( i [ 1 ] , 0 , 255 ) , ImClamp ( i [ 2 ] , 0 , 255 ) , ImClamp ( i [ 3 ] , 0 , 255 ) ) ;
else
else
ImFormatString ( buf , IM_ARRAYSIZE ( buf ) , " #%02X%02X%02X " , ImClamp ( i [ 0 ] , 0 , 255 ) , ImClamp ( i [ 1 ] , 0 , 255 ) , ImClamp ( i [ 2 ] , 0 , 255 ) ) ;
ImFormatString ( buf , IM_ARRAYSIZE ( buf ) , " #%02X%02X%02X " , ImClamp ( i [ 0 ] , 0 , 255 ) , ImClamp ( i [ 1 ] , 0 , 255 ) , ImClamp ( i [ 2 ] , 0 , 255 ) ) ;
SetNextItemWidth ( w_inputs ) ;
SetNextItemWidth ( w_inputs ) ;
if ( InputText ( " ##Text " , buf , IM_ARRAYSIZE ( buf ) , ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase ) )
if ( InputText ( " ##Text " , buf , IM_ARRAYSIZE ( buf ) , ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase ) )
{
{
@ -4494,7 +4494,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
// Store current color and open a picker
// Store current color and open a picker
g . ColorPickerRef = col_v4 ;
g . ColorPickerRef = col_v4 ;
OpenPopup ( " picker " ) ;
OpenPopup ( " picker " ) ;
SetNextWindowPos ( window - > DC . LastItemRect . GetBL ( ) + ImVec2 ( - 1 , style . ItemSpacing . y ) ) ;
SetNextWindowPos ( window - > DC . LastItemRect . GetBL ( ) + ImVec2 ( - 1 , style . ItemSpacing . y ) ) ;
}
}
}
}
if ( ! ( flags & ImGuiColorEditFlags_NoOptions ) )
if ( ! ( flags & ImGuiColorEditFlags_NoOptions ) )
@ -4655,7 +4655,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
float wheel_thickness = sv_picker_size * 0.08f ;
float wheel_thickness = sv_picker_size * 0.08f ;
float wheel_r_outer = sv_picker_size * 0.50f ;
float wheel_r_outer = sv_picker_size * 0.50f ;
float wheel_r_inner = wheel_r_outer - wheel_thickness ;
float wheel_r_inner = wheel_r_outer - wheel_thickness ;
ImVec2 wheel_center ( picker_pos . x + ( sv_picker_size + bars_width ) * 0.5f , picker_pos . y + sv_picker_size * 0.5f ) ;
ImVec2 wheel_center ( picker_pos . x + ( sv_picker_size + bars_width ) * 0.5f , picker_pos . y + sv_picker_size * 0.5f ) ;
// Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic.
// Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic.
float triangle_r = wheel_r_inner - ( int ) ( sv_picker_size * 0.027f ) ;
float triangle_r = wheel_r_inner - ( int ) ( sv_picker_size * 0.027f ) ;
@ -4694,10 +4694,10 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
ImVec2 initial_off = g . IO . MouseClickedPos [ 0 ] - wheel_center ;
ImVec2 initial_off = g . IO . MouseClickedPos [ 0 ] - wheel_center ;
ImVec2 current_off = g . IO . MousePos - wheel_center ;
ImVec2 current_off = g . IO . MousePos - wheel_center ;
float initial_dist2 = ImLengthSqr ( initial_off ) ;
float initial_dist2 = ImLengthSqr ( initial_off ) ;
if ( initial_dist2 > = ( wheel_r_inner - 1 ) * ( wheel_r_inner - 1 ) & & initial_dist2 < = ( wheel_r_outer + 1 ) * ( wheel_r_outer + 1 ) )
if ( initial_dist2 > = ( wheel_r_inner - 1 ) * ( wheel_r_inner - 1 ) & & initial_dist2 < = ( wheel_r_outer + 1 ) * ( wheel_r_outer + 1 ) )
{
{
// Interactive with Hue wheel
// Interactive with Hue wheel
H = ImAtan2 ( current_off . y , current_off . x ) / IM_PI * 0.5f ;
H = ImAtan2 ( current_off . y , current_off . x ) / IM_PI * 0.5f ;
if ( H < 0.0f )
if ( H < 0.0f )
H + = 1.0f ;
H + = 1.0f ;
value_changed = value_changed_h = true ;
value_changed = value_changed_h = true ;
@ -4726,8 +4726,8 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
InvisibleButton ( " sv " , ImVec2 ( sv_picker_size , sv_picker_size ) ) ;
InvisibleButton ( " sv " , ImVec2 ( sv_picker_size , sv_picker_size ) ) ;
if ( IsItemActive ( ) )
if ( IsItemActive ( ) )
{
{
S = ImSaturate ( ( io . MousePos . x - picker_pos . x ) / ( sv_picker_size - 1 ) ) ;
S = ImSaturate ( ( io . MousePos . x - picker_pos . x ) / ( sv_picker_size - 1 ) ) ;
V = 1.0f - ImSaturate ( ( io . MousePos . y - picker_pos . y ) / ( sv_picker_size - 1 ) ) ;
V = 1.0f - ImSaturate ( ( io . MousePos . y - picker_pos . y ) / ( sv_picker_size - 1 ) ) ;
value_changed = value_changed_sv = true ;
value_changed = value_changed_sv = true ;
}
}
if ( ! ( flags & ImGuiColorEditFlags_NoOptions ) )
if ( ! ( flags & ImGuiColorEditFlags_NoOptions ) )
@ -4738,7 +4738,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
InvisibleButton ( " hue " , ImVec2 ( bars_width , sv_picker_size ) ) ;
InvisibleButton ( " hue " , ImVec2 ( bars_width , sv_picker_size ) ) ;
if ( IsItemActive ( ) )
if ( IsItemActive ( ) )
{
{
H = ImSaturate ( ( io . MousePos . y - picker_pos . y ) / ( sv_picker_size - 1 ) ) ;
H = ImSaturate ( ( io . MousePos . y - picker_pos . y ) / ( sv_picker_size - 1 ) ) ;
value_changed = value_changed_h = true ;
value_changed = value_changed_h = true ;
}
}
}
}
@ -4750,7 +4750,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
InvisibleButton ( " alpha " , ImVec2 ( bars_width , sv_picker_size ) ) ;
InvisibleButton ( " alpha " , ImVec2 ( bars_width , sv_picker_size ) ) ;
if ( IsItemActive ( ) )
if ( IsItemActive ( ) )
{
{
col [ 3 ] = 1.0f - ImSaturate ( ( io . MousePos . y - picker_pos . y ) / ( sv_picker_size - 1 ) ) ;
col [ 3 ] = 1.0f - ImSaturate ( ( io . MousePos . y - picker_pos . y ) / ( sv_picker_size - 1 ) ) ;
value_changed = true ;
value_changed = true ;
}
}
}
}
@ -4801,7 +4801,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
{
{
if ( flags & ImGuiColorEditFlags_InputRGB )
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 ] ) ;
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 ] ) ;
g . ColorEditLastHue = H ;
g . ColorEditLastHue = H ;
g . ColorEditLastSat = S ;
g . ColorEditLastSat = S ;
memcpy ( g . ColorEditLastColor , col , sizeof ( float ) * 3 ) ;
memcpy ( g . ColorEditLastColor , col , sizeof ( float ) * 3 ) ;
@ -4904,17 +4904,17 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
// Paint colors over existing vertices
// Paint colors over existing vertices
ImVec2 gradient_p0 ( wheel_center . x + ImCos ( a0 ) * wheel_r_inner , wheel_center . y + ImSin ( a0 ) * wheel_r_inner ) ;
ImVec2 gradient_p0 ( wheel_center . x + ImCos ( a0 ) * wheel_r_inner , wheel_center . y + ImSin ( a0 ) * wheel_r_inner ) ;
ImVec2 gradient_p1 ( wheel_center . x + ImCos ( a1 ) * wheel_r_inner , wheel_center . y + ImSin ( a1 ) * wheel_r_inner ) ;
ImVec2 gradient_p1 ( wheel_center . x + ImCos ( a1 ) * wheel_r_inner , wheel_center . y + ImSin ( a1 ) * wheel_r_inner ) ;
ShadeVertsLinearColorGradientKeepAlpha ( draw_list , vert_start_idx , vert_end_idx , gradient_p0 , gradient_p1 , col_hues [ n ] , col_hues [ n + 1 ] ) ;
ShadeVertsLinearColorGradientKeepAlpha ( draw_list , vert_start_idx , vert_end_idx , gradient_p0 , gradient_p1 , col_hues [ n ] , col_hues [ n + 1 ] ) ;
}
}
// Render Cursor + preview on Hue Wheel
// Render Cursor + preview on Hue Wheel
float cos_hue_angle = ImCos ( H * 2.0f * IM_PI ) ;
float cos_hue_angle = ImCos ( H * 2.0f * IM_PI ) ;
float sin_hue_angle = ImSin ( H * 2.0f * IM_PI ) ;
float sin_hue_angle = ImSin ( H * 2.0f * IM_PI ) ;
ImVec2 hue_cursor_pos ( wheel_center . x + cos_hue_angle * ( wheel_r_inner + wheel_r_outer ) * 0.5f , wheel_center . y + sin_hue_angle * ( wheel_r_inner + wheel_r_outer ) * 0.5f ) ;
ImVec2 hue_cursor_pos ( wheel_center . x + cos_hue_angle * ( wheel_r_inner + wheel_r_outer ) * 0.5f , wheel_center . y + sin_hue_angle * ( wheel_r_inner + wheel_r_outer ) * 0.5f ) ;
float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f ;
float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f ;
int hue_cursor_segments = ImClamp ( ( int ) ( hue_cursor_rad / 1.4f ) , 9 , 32 ) ;
int hue_cursor_segments = ImClamp ( ( int ) ( hue_cursor_rad / 1.4f ) , 9 , 32 ) ;
draw_list - > AddCircleFilled ( hue_cursor_pos , hue_cursor_rad , hue_color32 , hue_cursor_segments ) ;
draw_list - > AddCircleFilled ( hue_cursor_pos , hue_cursor_rad , hue_color32 , hue_cursor_segments ) ;
draw_list - > AddCircle ( hue_cursor_pos , hue_cursor_rad + 1 , col_midgrey , hue_cursor_segments ) ;
draw_list - > AddCircle ( hue_cursor_pos , hue_cursor_rad + 1 , col_midgrey , hue_cursor_segments ) ;
draw_list - > AddCircle ( hue_cursor_pos , hue_cursor_rad , col_white , hue_cursor_segments ) ;
draw_list - > AddCircle ( hue_cursor_pos , hue_cursor_rad , col_white , hue_cursor_segments ) ;
// Render SV triangle (rotated according to hue)
// Render SV triangle (rotated according to hue)
@ -4952,7 +4952,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
// Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
// Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f ;
float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f ;
draw_list - > AddCircleFilled ( sv_cursor_pos , sv_cursor_rad , user_col32_striped_of_alpha , 12 ) ;
draw_list - > AddCircleFilled ( sv_cursor_pos , sv_cursor_rad , user_col32_striped_of_alpha , 12 ) ;
draw_list - > AddCircle ( sv_cursor_pos , sv_cursor_rad + 1 , col_midgrey , 12 ) ;
draw_list - > AddCircle ( sv_cursor_pos , sv_cursor_rad + 1 , col_midgrey , 12 ) ;
draw_list - > AddCircle ( sv_cursor_pos , sv_cursor_rad , col_white , 12 ) ;
draw_list - > AddCircle ( sv_cursor_pos , sv_cursor_rad , col_white , 12 ) ;
// Render alpha bar
// Render alpha bar
@ -5024,8 +5024,8 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
if ( ( flags & ImGuiColorEditFlags_AlphaPreviewHalf ) & & col_rgb . w < 1.0f )
if ( ( flags & ImGuiColorEditFlags_AlphaPreviewHalf ) & & col_rgb . w < 1.0f )
{
{
float mid_x = IM_ROUND ( ( bb_inner . Min . x + bb_inner . Max . x ) * 0.5f ) ;
float mid_x = IM_ROUND ( ( bb_inner . Min . x + bb_inner . Max . x ) * 0.5f ) ;
RenderColorRectWithAlphaCheckerboard ( window - > DrawList , 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 ) ;
RenderColorRectWithAlphaCheckerboard ( window - > DrawList , 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 ) ;
window - > DrawList - > AddRectFilled ( bb_inner . Min , ImVec2 ( mid_x , bb_inner . Max . y ) , GetColorU32 ( col_rgb_without_alpha ) , rounding , ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft ) ;
}
}
else
else
{
{
@ -5143,7 +5143,7 @@ void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
if ( allow_opt_inputs | | allow_opt_datatype )
if ( allow_opt_inputs | | allow_opt_datatype )
Separator ( ) ;
Separator ( ) ;
if ( Button ( " Copy as.. " , ImVec2 ( - 1 , 0 ) ) )
if ( Button ( " Copy as.. " , ImVec2 ( - 1 , 0 ) ) )
OpenPopup ( " Copy " ) ;
OpenPopup ( " Copy " ) ;
if ( BeginPopup ( " Copy " ) )
if ( BeginPopup ( " Copy " ) )
{
{
@ -5187,7 +5187,7 @@ void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags fl
// Draw small/thumbnail version of each picker type (over an invisible button for selection)
// Draw small/thumbnail version of each picker type (over an invisible button for selection)
if ( picker_type > 0 ) Separator ( ) ;
if ( picker_type > 0 ) Separator ( ) ;
PushID ( picker_type ) ;
PushID ( picker_type ) ;
ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoSidePreview | ( flags & ImGuiColorEditFlags_NoAlpha ) ;
ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoSidePreview | ( flags & ImGuiColorEditFlags_NoAlpha ) ;
if ( picker_type = = 0 ) picker_flags | = ImGuiColorEditFlags_PickerHueBar ;
if ( picker_type = = 0 ) picker_flags | = ImGuiColorEditFlags_PickerHueBar ;
if ( picker_type = = 1 ) picker_flags | = ImGuiColorEditFlags_PickerHueWheel ;
if ( picker_type = = 1 ) picker_flags | = ImGuiColorEditFlags_PickerHueWheel ;
ImVec2 backup_pos = GetCursorScreenPos ( ) ;
ImVec2 backup_pos = GetCursorScreenPos ( ) ;
@ -5371,7 +5371,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
const ImVec2 label_size = CalcTextSize ( label , label_end , false ) ;
const ImVec2 label_size = CalcTextSize ( label , label_end , false ) ;
// We vertically grow up to current line height up the typical widget height.
// We vertically grow up to current line height up the typical widget height.
const float frame_height = ImMax ( ImMin ( window - > DC . CurrLineSize . y , g . FontSize + style . FramePadding . y * 2 ) , label_size . y + padding . y * 2 ) ;
const float frame_height = ImMax ( ImMin ( window - > DC . CurrLineSize . y , g . FontSize + style . FramePadding . y * 2 ) , label_size . y + padding . y * 2 ) ;
ImRect frame_bb ;
ImRect frame_bb ;
frame_bb . Min . x = ( flags & ImGuiTreeNodeFlags_SpanFullWidth ) ? window - > WorkRect . Min . x : window - > DC . CursorPos . x ;
frame_bb . Min . x = ( flags & ImGuiTreeNodeFlags_SpanFullWidth ) ? window - > WorkRect . Min . x : window - > DC . CursorPos . x ;
frame_bb . Min . y = window - > DC . CursorPos . y ;
frame_bb . Min . y = window - > DC . CursorPos . y ;
@ -5385,9 +5385,9 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
frame_bb . Max . x + = IM_FLOOR ( window - > WindowPadding . x * 0.5f ) ;
frame_bb . Max . x + = IM_FLOOR ( window - > WindowPadding . x * 0.5f ) ;
}
}
const float text_offset_x = g . FontSize + ( display_frame ? padding . x * 3 : padding . x * 2 ) ; // Collapser arrow width + Spacing
const float text_offset_x = g . FontSize + ( display_frame ? padding . x * 3 : padding . x * 2 ) ; // Collapser arrow width + Spacing
const float text_offset_y = ImMax ( padding . y , window - > DC . CurrLineTextBaseOffset ) ; // Latch before ItemSize changes it
const float text_offset_y = ImMax ( padding . y , window - > DC . CurrLineTextBaseOffset ) ; // Latch before ItemSize changes it
const float text_width = g . FontSize + ( label_size . x > 0.0f ? label_size . x + padding . x * 2 : 0.0f ) ; // Include collapser
const float text_width = g . FontSize + ( label_size . x > 0.0f ? label_size . x + padding . x * 2 : 0.0f ) ; // Include collapser
ImVec2 text_pos ( window - > DC . CursorPos . x + text_offset_x , window - > DC . CursorPos . y + text_offset_y ) ;
ImVec2 text_pos ( window - > DC . CursorPos . x + text_offset_x , window - > DC . CursorPos . y + text_offset_y ) ;
ItemSize ( ImVec2 ( text_width , frame_height ) , padding . y ) ;
ItemSize ( ImVec2 ( text_width , frame_height ) , padding . y ) ;
@ -5521,9 +5521,9 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
// NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
// NB: '##' is normally used to hide text (as a library-wide feature), so we need to specify the text range to make sure the ## aren't stripped out here.
const char log_prefix [ ] = " \n ## " ;
const char log_prefix [ ] = " \n ## " ;
const char log_suffix [ ] = " ## " ;
const char log_suffix [ ] = " ## " ;
LogRenderedText ( & text_pos , log_prefix , log_prefix + 3 ) ;
LogRenderedText ( & text_pos , log_prefix , log_prefix + 3 ) ;
RenderTextClipped ( text_pos , frame_bb . Max , label , label_end , & label_size ) ;
RenderTextClipped ( text_pos , frame_bb . Max , label , label_end , & label_size ) ;
LogRenderedText ( & text_pos , log_suffix , log_suffix + 2 ) ;
LogRenderedText ( & text_pos , log_suffix , log_suffix + 2 ) ;
}
}
else
else
{
{
@ -5998,7 +5998,7 @@ int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_get
const float v0 = values_getter ( data , ( v_idx + values_offset ) % values_count ) ;
const float v0 = values_getter ( data , ( v_idx + values_offset ) % values_count ) ;
const float v1 = values_getter ( data , ( v_idx + 1 + values_offset ) % values_count ) ;
const float v1 = values_getter ( data , ( v_idx + 1 + values_offset ) % values_count ) ;
if ( plot_type = = ImGuiPlotType_Lines )
if ( plot_type = = ImGuiPlotType_Lines )
SetTooltip ( " %d: %8.4g \n %d: %8.4g " , v_idx , v0 , v_idx + 1 , v1 ) ;
SetTooltip ( " %d: %8.4g \n %d: %8.4g " , v_idx , v0 , v_idx + 1 , v1 ) ;
else if ( plot_type = = ImGuiPlotType_Histogram )
else if ( plot_type = = ImGuiPlotType_Histogram )
SetTooltip ( " %d: %8.4g " , v_idx , v0 ) ;
SetTooltip ( " %d: %8.4g " , v_idx , v0 ) ;
idx_hovered = v_idx ;
idx_hovered = v_idx ;
@ -6044,7 +6044,7 @@ int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_get
// Text overlay
// Text overlay
if ( overlay_text )
if ( overlay_text )
RenderTextClipped ( ImVec2 ( frame_bb . Min . x , frame_bb . Min . y + style . FramePadding . y ) , frame_bb . Max , overlay_text , NULL , NULL , ImVec2 ( 0.5f , 0.0f ) ) ;
RenderTextClipped ( ImVec2 ( frame_bb . Min . x , frame_bb . Min . y + style . FramePadding . y ) , frame_bb . Max , overlay_text , NULL , NULL , ImVec2 ( 0.5f , 0.0f ) ) ;
if ( label_size . x > 0.0f )
if ( label_size . x > 0.0f )
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , inner_bb . Min . y ) , label ) ;
RenderText ( ImVec2 ( frame_bb . Max . x + style . ItemInnerSpacing . x , inner_bb . Min . y ) , label ) ;
@ -7681,7 +7681,7 @@ void ImGui::SetColumnOffset(int column_index, float offset)
column_index = columns - > Current ;
column_index = columns - > Current ;
IM_ASSERT ( column_index < columns - > Columns . Size ) ;
IM_ASSERT ( column_index < columns - > Columns . Size ) ;
const bool preserve_width = ! ( columns - > Flags & ImGuiColumnsFlags_NoPreserveWidths ) & & ( column_index < columns - > Count - 1 ) ;
const bool preserve_width = ! ( columns - > Flags & ImGuiColumnsFlags_NoPreserveWidths ) & & ( column_index < columns - > Count - 1 ) ;
const float width = preserve_width ? GetColumnWidthEx ( columns , column_index , columns - > IsBeingResized ) : 0.0f ;
const float width = preserve_width ? GetColumnWidthEx ( columns , column_index , columns - > IsBeingResized ) : 0.0f ;
if ( ! ( columns - > Flags & ImGuiColumnsFlags_NoForceWithinWindow ) )
if ( ! ( columns - > Flags & ImGuiColumnsFlags_NoForceWithinWindow ) )