@ -808,7 +808,7 @@ bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, floa
const bool horizontal = ( axis = = ImGuiAxis_X ) ;
ImRect bb = bb_frame ;
bb . Expand ( ImVec2 ( - ImClamp ( ( float ) ( int ) ( ( bb_frame_width - 2.0f ) * 0.5f ) , 0.0f , 3.0f ) , - ImClamp ( ( float ) ( int ) ( ( bb_frame_height - 2.0f ) * 0.5f ) , 0.0f , 3.0f ) ) ) ;
bb . Expand ( ImVec2 ( - ImClamp ( IM_FLOOR ( ( bb_frame_width - 2.0f ) * 0.5f ) , 0.0f , 3.0f ) , - ImClamp ( IM_FLOOR ( ( bb_frame_height - 2.0f ) * 0.5f ) , 0.0f , 3.0f ) ) ) ;
// V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar)
const float scrollbar_size_v = horizontal ? bb . GetWidth ( ) : bb . GetHeight ( ) ;
@ -851,7 +851,7 @@ bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, floa
// Apply scroll
// It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position
const float scroll_v_norm = ImSaturate ( ( clicked_v_norm - g . ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f ) / ( 1.0f - grab_h_norm ) ) ;
* p_scroll_v = ( float ) ( int ) ( 0.5f + scroll_v_norm * scroll_max ) ; //(win_size_contents_v - win_size_v));
* p_scroll_v = IM_FLOOR ( 0.5f + scroll_v_norm * scroll_max ) ; //(win_size_contents_v - win_size_v));
// Update values for rendering
scroll_ratio = ImSaturate ( * p_scroll_v / scroll_max ) ;
@ -1004,12 +1004,12 @@ bool ImGui::Checkbox(const char* label, bool* v)
if ( window - > DC . ItemFlags & ImGuiItemFlags_MixedValue )
{
// Undocumented tristate/mixed/indeterminate checkbox (#2644)
ImVec2 pad ( ImMax ( 1.0f , ( float ) ( int ) ( square_sz / 3.6f ) ) , ImMax ( 1.0f , ( float ) ( int ) ( square_sz / 3.6f ) ) ) ;
ImVec2 pad ( ImMax ( 1.0f , IM_FLOOR ( square_sz / 3.6f ) ) , ImMax ( 1.0f , IM_FLOOR ( square_sz / 3.6f ) ) ) ;
window - > DrawList - > AddRectFilled ( check_bb . Min + pad , check_bb . Max - pad , check_col , style . FrameRounding ) ;
}
else if ( * v )
{
const float pad = ImMax ( 1.0f , ( float ) ( int ) ( square_sz / 6.0f ) ) ;
const float pad = ImMax ( 1.0f , IM_FLOOR ( square_sz / 6.0f ) ) ;
RenderCheckMark ( check_bb . Min + ImVec2 ( pad , pad ) , check_col , square_sz - pad * 2.0f ) ;
}
@ -1057,8 +1057,8 @@ bool ImGui::RadioButton(const char* label, bool active)
return false ;
ImVec2 center = check_bb . GetCenter ( ) ;
center . x = ( float ) ( int ) center . x + 0.5f ;
center . y = ( float ) ( int ) center . y + 0.5f ;
center . x = IM_FLOOR ( center . x + 0.5f ) ;
center . y = IM_FLOOR ( center . y + 0.5f ) ;
const float radius = ( square_sz - 1.0f ) * 0.5f ;
bool hovered , held ;
@ -1070,7 +1070,7 @@ bool ImGui::RadioButton(const char* label, bool active)
window - > DrawList - > AddCircleFilled ( center , radius , GetColorU32 ( ( held & & hovered ) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg ) , 16 ) ;
if ( active )
{
const float pad = ImMax ( 1.0f , ( float ) ( int ) ( square_sz / 6.0f ) ) ;
const float pad = ImMax ( 1.0f , IM_FLOOR ( square_sz / 6.0f ) ) ;
window - > DrawList - > AddCircleFilled ( center , radius - pad , GetColorU32 ( ImGuiCol_CheckMark ) , 16 ) ;
}
@ -4022,9 +4022,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
{
const float scroll_increment_x = inner_size . x * 0.25f ;
if ( cursor_offset . x < state - > ScrollX )
state - > ScrollX = ( float ) ( int ) ImMax ( 0.0f , cursor_offset . x - scroll_increment_x ) ;
state - > ScrollX = IM_FLOOR ( ImMax ( 0.0f , cursor_offset . x - scroll_increment_x ) ) ;
else if ( cursor_offset . x - inner_size . x > = state - > ScrollX )
state - > ScrollX = ( float ) ( int ) ( cursor_offset . x - inner_size . x + scroll_increment_x ) ;
state - > ScrollX = IM_FLOOR ( cursor_offset . x - inner_size . x + scroll_increment_x ) ;
}
else
{
@ -4072,7 +4072,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
else
{
ImVec2 rect_size = InputTextCalcTextSizeW ( p , text_selected_end , & p , NULL , true ) ;
if ( rect_size . x < = 0.0f ) rect_size . x = ( float ) ( int ) ( 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 ) ) ;
rect . ClipWith ( clip_rect ) ;
if ( rect . Overlaps ( clip_rect ) )
@ -4239,8 +4239,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flag
if ( ( flags & ( ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV ) ) ! = 0 & & ( flags & ImGuiColorEditFlags_NoInputs ) = = 0 )
{
// RGB/HSV 0..255 Sliders
const float w_item_one = ImMax ( 1.0f , ( float ) ( int ) ( ( w_inputs - ( style . ItemInnerSpacing . x ) * ( components - 1 ) ) / ( float ) components ) ) ;
const float w_item_last = ImMax ( 1.0f , ( float ) ( int ) ( w_inputs - ( w_item_one + style . ItemInnerSpacing . x ) * ( components - 1 ) ) ) ;
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 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 " } ;
@ -4515,7 +4515,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
float sv_picker_size = ImMax ( bars_width * 1 , width - ( alpha_bar ? 2 : 1 ) * ( bars_width + style . ItemInnerSpacing . x ) ) ; // Saturation/Value picking box
float bar0_pos_x = picker_pos . x + sv_picker_size + style . ItemInnerSpacing . x ;
float bar1_pos_x = bar0_pos_x + bars_width + style . ItemInnerSpacing . x ;
float bars_triangles_half_sz = ( float ) ( int ) ( bars_width * 0.20f ) ;
float bars_triangles_half_sz = IM_FLOOR ( bars_width * 0.20f ) ;
float backup_initial_col [ 4 ] ;
memcpy ( backup_initial_col , col , components * sizeof ( float ) ) ;
@ -4795,13 +4795,13 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
draw_list - > AddRectFilledMultiColor ( picker_pos , picker_pos + ImVec2 ( sv_picker_size , sv_picker_size ) , col_white , hue_color32 , hue_color32 , col_white ) ;
draw_list - > AddRectFilledMultiColor ( picker_pos , picker_pos + ImVec2 ( sv_picker_size , sv_picker_size ) , 0 , 0 , col_black , col_black ) ;
RenderFrameBorder ( picker_pos , picker_pos + ImVec2 ( sv_picker_size , sv_picker_size ) , 0.0f ) ;
sv_cursor_pos . x = ImClamp ( ( float ) ( int ) ( picker_pos . x + ImSaturate ( S ) * sv_picker_size + 0.5f ) , picker_pos . x + 2 , picker_pos . x + sv_picker_size - 2 ) ; // Sneakily prevent the circle to stick out too much
sv_cursor_pos . y = ImClamp ( ( float ) ( int ) ( picker_pos . y + ImSaturate ( 1 - V ) * sv_picker_size + 0.5f ) , picker_pos . y + 2 , picker_pos . y + sv_picker_size - 2 ) ;
sv_cursor_pos . x = ImClamp ( IM_FLOOR ( picker_pos . x + ImSaturate ( S ) * sv_picker_size + 0.5f ) , picker_pos . x + 2 , picker_pos . x + sv_picker_size - 2 ) ; // Sneakily prevent the circle to stick out too much
sv_cursor_pos . y = ImClamp ( IM_FLOOR ( picker_pos . y + ImSaturate ( 1 - V ) * sv_picker_size + 0.5f ) , picker_pos . y + 2 , picker_pos . y + sv_picker_size - 2 ) ;
// Render Hue Bar
for ( int i = 0 ; i < 6 ; + + i )
draw_list - > AddRectFilledMultiColor ( ImVec2 ( bar0_pos_x , picker_pos . y + i * ( sv_picker_size / 6 ) ) , ImVec2 ( bar0_pos_x + bars_width , picker_pos . y + ( i + 1 ) * ( sv_picker_size / 6 ) ) , col_hues [ i ] , col_hues [ i ] , col_hues [ i + 1 ] , col_hues [ i + 1 ] ) ;
float bar0_line_y = ( float ) ( int ) ( picker_pos . y + H * sv_picker_size + 0.5f ) ;
float bar0_line_y = IM_FLOOR ( picker_pos . y + H * sv_picker_size + 0.5f ) ;
RenderFrameBorder ( ImVec2 ( bar0_pos_x , picker_pos . y ) , ImVec2 ( bar0_pos_x + bars_width , picker_pos . y + sv_picker_size ) , 0.0f ) ;
RenderArrowsForVerticalBar ( draw_list , ImVec2 ( bar0_pos_x - 1 , bar0_line_y ) , ImVec2 ( bars_triangles_half_sz + 1 , bars_triangles_half_sz ) , bars_width + 2.0f , style . Alpha ) ;
}
@ -4819,7 +4819,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
ImRect bar1_bb ( bar1_pos_x , picker_pos . y , bar1_pos_x + bars_width , picker_pos . y + sv_picker_size ) ;
RenderColorRectWithAlphaCheckerboard ( bar1_bb . Min , bar1_bb . Max , 0 , bar1_bb . GetWidth ( ) / 2.0f , ImVec2 ( 0.0f , 0.0f ) ) ;
draw_list - > AddRectFilledMultiColor ( bar1_bb . Min , bar1_bb . Max , user_col32_striped_of_alpha , user_col32_striped_of_alpha , user_col32_striped_of_alpha & ~ IM_COL32_A_MASK , user_col32_striped_of_alpha & ~ IM_COL32_A_MASK ) ;
float bar1_line_y = ( float ) ( int ) ( picker_pos . y + ( 1.0f - alpha ) * sv_picker_size + 0.5f ) ;
float bar1_line_y = IM_FLOOR ( picker_pos . y + ( 1.0f - alpha ) * sv_picker_size + 0.5f ) ;
RenderFrameBorder ( bar1_bb . Min , bar1_bb . Max , 0.0f ) ;
RenderArrowsForVerticalBar ( draw_list , ImVec2 ( bar1_pos_x - 1 , bar1_line_y ) , ImVec2 ( bars_triangles_half_sz + 1 , bars_triangles_half_sz ) , bars_width + 2.0f , style . Alpha ) ;
}
@ -4876,7 +4876,7 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
bb_inner . Expand ( off ) ;
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 ) ;
float mid_x = IM_FLOOR ( ( 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_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 ) ;
}
@ -5228,8 +5228,8 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
{
// Framed header expand a little outside the default padding, to the edge of InnerClipRect
// (FIXME: May remove this at some point and make InnerClipRect align with WindowPadding.x instead of WindowPadding.x*0.5f)
frame_bb . Min . x - = ( float ) ( int ) ( window - > WindowPadding . x * 0.5f - 1.0f ) ;
frame_bb . Max . x + = ( float ) ( int ) ( window - > WindowPadding . x * 0.5f ) ;
frame_bb . Min . x - = IM_FLOOR ( window - > WindowPadding . x * 0.5f - 1.0f ) ;
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
@ -5242,7 +5242,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
ImRect interact_bb = frame_bb ;
if ( ! display_frame & & ( flags & ( ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth ) ) = = 0 )
interact_bb . Max . x = frame_bb . Min . x + text_width + style . ItemSpacing . x * 2.0f ;
// Store a flag for the current depth to tell if we will allow closing this node when navigating one of its child.
// For this purpose we essentially compare if g.NavIdIsAlive went from 0 to 1 between TreeNode() and TreePop().
// This is currently only support 32 level deep and we are fine with (1 << Depth) overflowing into a zero.
@ -5521,8 +5521,8 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl
// Selectables are tightly packed together so we extend the box to cover spacing between selectable.
const float spacing_x = style . ItemSpacing . x ;
const float spacing_y = style . ItemSpacing . y ;
const float spacing_L = ( float ) ( int ) ( spacing_x * 0.50f ) ;
const float spacing_U = ( float ) ( int ) ( spacing_y * 0.50f ) ;
const float spacing_L = IM_FLOOR ( spacing_x * 0.50f ) ;
const float spacing_U = IM_FLOOR ( spacing_y * 0.50f ) ;
bb . Min . x - = spacing_L ;
bb . Min . y - = spacing_U ;
bb . Max . x + = ( spacing_x - spacing_L ) ;
@ -5972,7 +5972,7 @@ void ImGuiMenuColumns::Update(int count, float spacing, bool clear)
{
if ( i > 0 & & NextWidths [ i ] > 0.0f )
Width + = Spacing ;
Pos [ i ] = ( float ) ( int ) Width ;
Pos [ i ] = IM_FLOOR ( Width ) ;
Width + = NextWidths [ i ] ;
NextWidths [ i ] = 0.0f ;
}
@ -6129,19 +6129,19 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
// Menu inside an horizontal menu bar
// Selectable extend their highlight by half ItemSpacing in each direction.
// For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin()
popup_pos = ImVec2 ( pos . x - 1.0f - ( float ) ( int ) ( style . ItemSpacing . x * 0.5f ) , pos . y - style . FramePadding . y + window - > MenuBarHeight ( ) ) ;
window - > DC . CursorPos . x + = ( float ) ( int ) ( style . ItemSpacing . x * 0.5f ) ;
popup_pos = ImVec2 ( pos . x - 1.0f - IM_FLOOR ( style . ItemSpacing . x * 0.5f ) , pos . y - style . FramePadding . y + window - > MenuBarHeight ( ) ) ;
window - > DC . CursorPos . x + = IM_FLOOR ( style . ItemSpacing . x * 0.5f ) ;
PushStyleVar ( ImGuiStyleVar_ItemSpacing , ImVec2 ( style . ItemSpacing . x * 2.0f , style . ItemSpacing . y ) ) ;
float w = label_size . x ;
pressed = Selectable ( label , menu_is_open , ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_PressedOnClick | ImGuiSelectableFlags_DontClosePopups | ( ! enabled ? ImGuiSelectableFlags_Disabled : 0 ) , ImVec2 ( w , 0.0f ) ) ;
PopStyleVar ( ) ;
window - > DC . CursorPos . x + = ( float ) ( int ) ( style . ItemSpacing . x * ( - 1.0f + 0.5f ) ) ; // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
window - > DC . CursorPos . x + = IM_FLOOR ( style . ItemSpacing . x * ( - 1.0f + 0.5f ) ) ; // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
}
else
{
// Menu inside a menu
popup_pos = ImVec2 ( pos . x , pos . y - style . WindowPadding . y ) ;
float w = window - > MenuColumns . DeclColumns ( label_size . x , 0.0f , ( float ) ( int ) ( g . FontSize * 1.20f ) ) ; // Feedback to next frame
float w = window - > MenuColumns . DeclColumns ( label_size . x , 0.0f , IM_FLOOR ( g . FontSize * 1.20f ) ) ; // Feedback to next frame
float extra_w = ImMax ( 0.0f , GetContentRegionAvail ( ) . x - w ) ;
pressed = Selectable ( label , menu_is_open , ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_PressedOnClick | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | ( ! enabled ? ImGuiSelectableFlags_Disabled : 0 ) , ImVec2 ( w , 0.0f ) ) ;
ImU32 text_col = GetColorU32 ( enabled ? ImGuiCol_Text : ImGuiCol_TextDisabled ) ;
@ -6280,16 +6280,16 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo
// Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
// Note that in this situation we render neither the shortcut neither the selected tick mark
float w = label_size . x ;
window - > DC . CursorPos . x + = ( float ) ( int ) ( style . ItemSpacing . x * 0.5f ) ;
window - > DC . CursorPos . x + = IM_FLOOR ( style . ItemSpacing . x * 0.5f ) ;
PushStyleVar ( ImGuiStyleVar_ItemSpacing , ImVec2 ( style . ItemSpacing . x * 2.0f , style . ItemSpacing . y ) ) ;
pressed = Selectable ( label , false , flags , ImVec2 ( w , 0.0f ) ) ;
PopStyleVar ( ) ;
window - > DC . CursorPos . x + = ( float ) ( int ) ( style . ItemSpacing . x * ( - 1.0f + 0.5f ) ) ; // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
window - > DC . CursorPos . x + = IM_FLOOR ( style . ItemSpacing . x * ( - 1.0f + 0.5f ) ) ; // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
}
else
{
ImVec2 shortcut_size = shortcut ? CalcTextSize ( shortcut , NULL ) : ImVec2 ( 0.0f , 0.0f ) ;
float w = window - > MenuColumns . DeclColumns ( label_size . x , shortcut_size . x , ( float ) ( int ) ( g . FontSize * 1.20f ) ) ; // Feedback for next frame
float w = window - > MenuColumns . DeclColumns ( label_size . x , shortcut_size . x , IM_FLOOR ( g . FontSize * 1.20f ) ) ; // Feedback for next frame
float extra_w = ImMax ( 0.0f , GetContentRegionAvail ( ) . x - w ) ;
pressed = Selectable ( label , false , flags | ImGuiSelectableFlags_DrawFillAvailWidth , ImVec2 ( w , 0.0f ) ) ;
if ( shortcut_size . x > 0.0f )
@ -6583,7 +6583,7 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
// If we don't have enough room, resize down the largest tabs first
ShrinkWidths ( g . ShrinkWidthBuffer . Data , g . ShrinkWidthBuffer . Size , width_excess ) ;
for ( int tab_n = 0 ; tab_n < tab_bar - > Tabs . Size ; tab_n + + )
tab_bar - > Tabs [ g . ShrinkWidthBuffer [ tab_n ] . Index ] . Width = ( float ) ( int ) g . ShrinkWidthBuffer [ tab_n ] . Width ;
tab_bar - > Tabs [ g . ShrinkWidthBuffer [ tab_n ] . Index ] . Width = IM_FLOOR ( g . ShrinkWidthBuffer [ tab_n ] . Width ) ;
}
else
{
@ -6984,7 +6984,7 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open,
// Layout
size . x = tab - > Width ;
window - > DC . CursorPos = tab_bar - > BarRect . Min + ImVec2 ( ( float ) ( int ) tab - > Offset - tab_bar - > ScrollingAnim , 0.0f ) ;
window - > DC . CursorPos = tab_bar - > BarRect . Min + ImVec2 ( IM_FLOOR ( tab - > Offset - tab_bar - > ScrollingAnim ) , 0.0f ) ;
ImVec2 pos = window - > DC . CursorPos ;
ImRect bb ( pos , pos + size ) ;
@ -7042,7 +7042,7 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open,
if ( hovered & & g . HoveredIdNotActiveTimer > 0.50f & & bb . GetWidth ( ) < tab - > WidthContents )
{
// Enlarge tab display when hovering
bb . Max . x = bb . Min . x + ( float ) ( int ) ImLerp ( bb . GetWidth ( ) , tab - > WidthContents , ImSaturate ( ( g . HoveredIdNotActiveTimer - 0.40f ) * 6.0f ) ) ;
bb . Max . x = bb . Min . x + IM_FLOOR ( ImLerp ( bb . GetWidth ( ) , tab - > WidthContents , ImSaturate ( ( g . HoveredIdNotActiveTimer - 0.40f ) * 6.0f ) ) ) ;
display_draw_list = GetForegroundDrawList ( window ) ;
TabItemBackground ( display_draw_list , bb , flags , GetColorU32 ( ImGuiCol_TitleBgActive ) ) ;
}
@ -7152,7 +7152,7 @@ bool ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb,
if ( flags & ImGuiTabItemFlags_UnsavedDocument )
{
text_pixel_clip_bb . Max . x - = CalcTextSize ( TAB_UNSAVED_MARKER , NULL , false ) . x ;
ImVec2 unsaved_marker_pos ( ImMin ( bb . Min . x + frame_padding . x + label_size . x + 2 , text_pixel_clip_bb . Max . x ) , bb . Min . y + frame_padding . y + ( float ) ( int ) ( - g . FontSize * 0.25f ) ) ;
ImVec2 unsaved_marker_pos ( ImMin ( bb . Min . x + frame_padding . x + label_size . x + 2 , text_pixel_clip_bb . Max . x ) , bb . Min . y + frame_padding . y + IM_FLOOR ( - g . FontSize * 0.25f ) ) ;
RenderTextClippedEx ( draw_list , unsaved_marker_pos , bb . Max - frame_padding , TAB_UNSAVED_MARKER , NULL , NULL ) ;
}
ImRect text_ellipsis_clip_bb = text_pixel_clip_bb ;
@ -7461,7 +7461,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
float width = offset_1 - offset_0 ;
PushItemWidth ( width * 0.65f ) ;
window - > DC . ColumnsOffset . x = ImMax ( column_padding - window - > WindowPadding . x , 0.0f ) ;
window - > DC . CursorPos . x = ( float ) ( int ) ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
window - > DC . CursorPos . x = IM_FLOOR ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
window - > WorkRect . Max . x = window - > Pos . x + offset_1 - column_padding ;
}
@ -7476,7 +7476,7 @@ void ImGui::NextColumn()
if ( columns - > Count = = 1 )
{
window - > DC . CursorPos . x = ( float ) ( int ) ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
window - > DC . CursorPos . x = IM_FLOOR ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
IM_ASSERT ( columns - > Current = = 0 ) ;
return ;
}
@ -7501,7 +7501,7 @@ void ImGui::NextColumn()
columns - > Current = 0 ;
columns - > LineMinY = columns - > LineMaxY ;
}
window - > DC . CursorPos . x = ( float ) ( int ) ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
window - > DC . CursorPos . x = IM_FLOOR ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
window - > DC . CursorPos . y = columns - > LineMinY ;
window - > DC . CurrLineSize = ImVec2 ( 0.0f , 0.0f ) ;
window - > DC . CurrLineTextBaseOffset = 0.0f ;
@ -7568,7 +7568,7 @@ void ImGui::EndColumns()
// Draw column
const ImU32 col = GetColorU32 ( held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator ) ;
const float xi = ( float ) ( int ) x ;
const float xi = IM_FLOOR ( x ) ;
window - > DrawList - > AddLine ( ImVec2 ( xi , y1 + 1.0f ) , ImVec2 ( xi , y2 ) , col ) ;
}
@ -7588,7 +7588,7 @@ void ImGui::EndColumns()
window - > WorkRect = columns - > HostWorkRect ;
window - > DC . CurrentColumns = NULL ;
window - > DC . ColumnsOffset . x = 0.0f ;
window - > DC . CursorPos . x = ( float ) ( int ) ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
window - > DC . CursorPos . x = IM_FLOOR ( window - > Pos . x + window - > DC . Indent . x + window - > DC . ColumnsOffset . x ) ;
}
// [2018-03: This is currently the only public API, while we are working on making BeginColumns/EndColumns user-facing]