@ -4716,11 +4716,23 @@ void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
}
}
// Render a triangle to denote expanded/collapsed state
// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
void ImGui : : RenderArrowPointingAt ( ImDrawList * draw_list , ImVec2 pos , ImVec2 half_sz , ImGuiDir direction , ImU32 col )
{
switch ( direction )
{
case ImGuiDir_Left : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x + half_sz . x , pos . y - half_sz . y ) , ImVec2 ( pos . x + half_sz . x , pos . y + half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_Right : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x - half_sz . x , pos . y + half_sz . y ) , ImVec2 ( pos . x - half_sz . x , pos . y - half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_Up : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x + half_sz . x , pos . y + half_sz . y ) , ImVec2 ( pos . x - half_sz . x , pos . y + half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_Down : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x - half_sz . x , pos . y - half_sz . y ) , ImVec2 ( pos . x + half_sz . x , pos . y - half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_None : case ImGuiDir_COUNT : break ; // Fix warnings
}
}
// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
void ImGui : : RenderArrow ( ImVec2 p_min , ImGuiDir dir , float scale )
{
ImGuiContext & g = * GImGui ;
ImGuiWindow * window = g . CurrentWindow ;
const float h = g . FontSize * 1.00f ;
float r = h * 0.40f * scale ;
@ -4732,18 +4744,16 @@ void ImGui::RenderArrow(ImVec2 p_min, ImGuiDir dir, float scale)
case ImGuiDir_Up :
case ImGuiDir_Down :
if ( dir = = ImGuiDir_Up ) r = - r ;
center . y - = r * 0.25f ;
a = ImVec2 ( 0 , 1 ) * r ;
b = ImVec2 ( - 0.866f , - 0.5f ) * r ;
c = ImVec2 ( + 0.866f , - 0.5f ) * r ;
a = ImVec2 ( + 0.000f , + 0.750f ) * r ;
b = ImVec2 ( - 0.866f , - 0.750f ) * r ;
c = ImVec2 ( + 0.866f , - 0.750f ) * r ;
break ;
case ImGuiDir_Left :
case ImGuiDir_Right :
if ( dir = = ImGuiDir_Left ) r = - r ;
center . x - = r * 0.25f ;
a = ImVec2 ( 1 , 0 ) * r ;
b = ImVec2 ( - 0.500f , + 0.866f ) * r ;
c = ImVec2 ( - 0.500f , - 0.866f ) * r ;
a = ImVec2 ( + 0.750f , + 0.000f ) * r ;
b = ImVec2 ( - 0.750f , + 0.866f ) * r ;
c = ImVec2 ( - 0.750f , - 0.866f ) * r ;
break ;
case ImGuiDir_None :
case ImGuiDir_COUNT :
@ -4751,7 +4761,7 @@ void ImGui::RenderArrow(ImVec2 p_min, ImGuiDir dir, float scale)
break ;
}
w indow- > DrawList - > AddTriangleFilled ( center + a , center + b , center + c , GetColorU32 ( ImGuiCol_Text ) ) ;
g . CurrentW indow- > DrawList - > AddTriangleFilled ( center + a , center + b , center + c , GetColorU32 ( ImGuiCol_Text ) ) ;
}
void ImGui : : RenderBullet ( ImVec2 pos )
@ -12551,25 +12561,12 @@ bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags fl
return true ;
}
// 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
static void RenderArrow ( ImDrawList * draw_list , ImVec2 pos , ImVec2 half_sz , ImGuiDir direction , ImU32 col )
{
switch ( direction )
{
case ImGuiDir_Left : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x + half_sz . x , pos . y - half_sz . y ) , ImVec2 ( pos . x + half_sz . x , pos . y + half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_Right : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x - half_sz . x , pos . y + half_sz . y ) , ImVec2 ( pos . x - half_sz . x , pos . y - half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_Up : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x + half_sz . x , pos . y + half_sz . y ) , ImVec2 ( pos . x - half_sz . x , pos . y + half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_Down : draw_list - > AddTriangleFilled ( ImVec2 ( pos . x - half_sz . x , pos . y - half_sz . y ) , ImVec2 ( pos . x + half_sz . x , pos . y - half_sz . y ) , pos , col ) ; return ;
case ImGuiDir_None : case ImGuiDir_COUNT : break ; // Fix warnings
}
}
static void RenderArrowsForVerticalBar ( ImDrawList * draw_list , ImVec2 pos , ImVec2 half_sz , float bar_w )
{
RenderArrow ( draw_list , ImVec2 ( pos . x + half_sz . x + 1 , pos . y ) , ImVec2 ( half_sz . x + 2 , half_sz . y + 1 ) , ImGuiDir_Right , IM_COL32_BLACK ) ;
RenderArrow ( draw_list , ImVec2 ( pos . x + half_sz . x , pos . y ) , half_sz , ImGuiDir_Right , IM_COL32_WHITE ) ;
RenderArrow ( draw_list , ImVec2 ( pos . x + bar_w - half_sz . x - 1 , pos . y ) , ImVec2 ( half_sz . x + 2 , half_sz . y + 1 ) , ImGuiDir_Left , IM_COL32_BLACK ) ;
RenderArrow ( draw_list , ImVec2 ( pos . x + bar_w - half_sz . x , pos . y ) , half_sz , ImGuiDir_Left , IM_COL32_WHITE ) ;
ImGui : : RenderArrowPointingAt ( draw_list , ImVec2 ( pos . x + half_sz . x + 1 , pos . y ) , ImVec2 ( half_sz . x + 2 , half_sz . y + 1 ) , ImGuiDir_Right , IM_COL32_BLACK ) ;
ImGui : : RenderArrowPointingAt ( draw_list , ImVec2 ( pos . x + half_sz . x , pos . y ) , half_sz , ImGuiDir_Right , IM_COL32_WHITE ) ;
ImGui : : RenderArrowPointingAt ( draw_list , ImVec2 ( pos . x + bar_w - half_sz . x - 1 , pos . y ) , ImVec2 ( half_sz . x + 2 , half_sz . y + 1 ) , ImGuiDir_Left , IM_COL32_BLACK ) ;
ImGui : : RenderArrowPointingAt ( draw_list , ImVec2 ( pos . x + bar_w - half_sz . x , pos . y ) , half_sz , ImGuiDir_Left , IM_COL32_WHITE ) ;
}
// ColorPicker