@ -3693,7 +3693,7 @@ void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2&
ImGuiAabb bb ( window - > DC . CursorPos , window - > DC . CursorPos + size ) ;
if ( border_col ! = 0 )
bb . Max + = ImVec2 ( 2 , 2 ) ;
ItemSize ( bb .GetSize ( ) , & bb . Min );
ItemSize ( bb );
if ( ! ItemAdd ( bb , NULL ) )
return ;
@ -3708,6 +3708,46 @@ void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2&
}
}
// frame_padding < 0: uses FramePadding from style (default)
// frame_padding = 0: no framing
// frame_padding > 0: set framing size
// The color used are the button colors.
bool ImGui : : ImageButton ( ImTextureID user_texture_id , const ImVec2 & size , const ImVec2 & uv0 , const ImVec2 & uv1 , int frame_padding , ImU32 bg_col )
{
ImGuiState & g = GImGui ;
ImGuiWindow * window = GetCurrentWindow ( ) ;
if ( window - > SkipItems )
return false ;
const ImGuiStyle & style = g . Style ;
// Default to using texture ID as ID. User can still push string/integer prefixes.
// We could hash the size/uv to create a unique ID but that would prevent the user from animating buttons.
ImGui : : PushID ( ( void * ) user_texture_id ) ;
const ImGuiID id = window - > GetID ( " #image " ) ;
ImGui : : PopID ( ) ;
const ImVec2 padding = ( frame_padding > = 0 ) ? ImVec2 ( ( float ) frame_padding , ( float ) frame_padding ) : style . FramePadding ;
const ImGuiAabb bb ( window - > DC . CursorPos , window - > DC . CursorPos + size + padding * 2 ) ;
const ImGuiAabb image_bb ( window - > DC . CursorPos + padding , window - > DC . CursorPos + padding + size ) ;
ItemSize ( bb ) ;
if ( ! ItemAdd ( bb , & id ) )
return false ;
bool hovered , held ;
bool pressed = ButtonBehaviour ( bb , id , & hovered , & held , true ) ;
// Render
const ImU32 col = window - > Color ( ( hovered & & held ) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button ) ;
if ( padding . x > 0.0f | | padding . y > 0.0f )
RenderFrame ( bb . Min , bb . Max , col ) ;
if ( ( bg_col > > 24 ) ! = 0 )
window - > DrawList - > AddRectFilled ( image_bb . Min , image_bb . Max , bg_col ) ;
window - > DrawList - > AddImage ( user_texture_id , image_bb . Min , image_bb . Max , uv0 , uv1 ) ;
return pressed ;
}
// Start logging ImGui output to TTY
void ImGui : : LogToTTY ( int max_depth )
{
@ -5711,7 +5751,7 @@ void ImGui::Spacing()
}
// Advance cursor given item size.
static void ItemSize ( ImVec2 size , ImVec2 * adjust_ start _offset)
static void ItemSize ( ImVec2 size , ImVec2 * adjust_ vertical _offset)
{
ImGuiState & g = GImGui ;
ImGuiWindow * window = GetCurrentWindow ( ) ;
@ -5719,8 +5759,8 @@ static void ItemSize(ImVec2 size, ImVec2* adjust_start_offset)
return ;
const float line_height = ImMax ( window - > DC . CurrentLineHeight , size . y ) ;
if ( adjust_ start _offset)
adjust_ start_offset- > y = adjust_start _offset- > y + ( line_height - size . y ) * 0.5f ;
if ( adjust_ vertical _offset)
adjust_ vertical_offset- > y = adjust_vertical _offset- > y + ( line_height - size . y ) * 0.5f ;
// Always align ourselves on pixel boundaries
window - > DC . CursorPosPrevLine = ImVec2 ( window - > DC . CursorPos . x + size . x , window - > DC . CursorPos . y ) ;
@ -7735,7 +7775,7 @@ void ImGui::ShowTestWindow(bool* opened)
float tex_w = ( float ) ImGui : : GetIO ( ) . Fonts - > TexWidth ;
float tex_h = ( float ) ImGui : : GetIO ( ) . Fonts - > TexHeight ;
ImTextureID tex_id = ImGui : : GetIO ( ) . Fonts - > TexID ;
ImGui : : Image ( tex_id , ImVec2 ( tex_w , tex_h ) , ImVec2 ( 0 , 0 ) , ImVec2 ( 1 , 1 ) , 0xFFFFFFFF , 0x 999999FF ) ;
ImGui : : Image ( tex_id , ImVec2 ( tex_w , tex_h ) , ImVec2 ( 0 , 0 ) , ImVec2 ( 1 , 1 ) , 0xFFFFFFFF , 0x 80808080 ) ;
if ( ImGui : : IsItemHovered ( ) )
{
ImGui : : BeginTooltip ( ) ;
@ -7746,9 +7786,22 @@ void ImGui::ShowTestWindow(bool* opened)
ImGui : : Text ( " Max: (%.2f, %.2f) " , focus_x + focus_sz , focus_y + focus_sz ) ;
ImVec2 uv0 = ImVec2 ( ( focus_x ) / tex_w , ( focus_y ) / tex_h ) ;
ImVec2 uv1 = ImVec2 ( ( focus_x + focus_sz ) / tex_w , ( focus_y + focus_sz ) / tex_h ) ;
ImGui : : Image ( tex_id , ImVec2 ( 128 , 128 ) , uv0 , uv1 , 0xFFFFFFFF , 0x 999999FF ) ;
ImGui : : Image ( tex_id , ImVec2 ( 128 , 128 ) , uv0 , uv1 , 0xFFFFFFFF , 0x 80808080 ) ;
ImGui : : EndTooltip ( ) ;
}
ImGui : : TextWrapped ( " And now some textured buttons.. " ) ;
static int pressed_count = 0 ;
for ( int i = 0 ; i < 8 ; i + + )
{
if ( i > 0 )
ImGui : : SameLine ( ) ;
ImGui : : PushID ( i ) ;
int frame_padding = - 1 + i ; // -1 padding uses default padding
if ( ImGui : : ImageButton ( tex_id , ImVec2 ( 32 , 32 ) , ImVec2 ( 0 , 0 ) , ImVec2 ( 32.0f / tex_w , 32 / tex_h ) , frame_padding ) )
pressed_count + = 1 ;
ImGui : : PopID ( ) ;
}
ImGui : : Text ( " Pressed %d times. " , pressed_count ) ;
ImGui : : TreePop ( ) ;
}