@ -3204,7 +3204,8 @@ void ImGui::NewFrame()
g . HoveredWindow = ( g . MovingWindow & & ! ( g . MovingWindow - > Flags & ImGuiWindowFlags_NoInputs ) ) ? g . MovingWindow : FindHoveredWindow ( g . IO . MousePos ) ;
g . HoveredRootWindow = g . HoveredWindow ? g . HoveredWindow - > RootWindow : NULL ;
if ( ImGuiWindow * modal_window = GetFrontMostModalRootWindow ( ) )
ImGuiWindow * modal_window = GetFrontMostModalRootWindow ( ) ;
if ( modal_window ! = NULL )
{
g . ModalWindowDarkeningRatio = ImMin ( g . ModalWindowDarkeningRatio + g . IO . DeltaTime * 6.0f , 1.0f ) ;
if ( g . HoveredRootWindow & & ! IsWindowChildOf ( g . HoveredRootWindow , modal_window ) )
@ -3233,7 +3234,10 @@ void ImGui::NewFrame()
g . IO . WantCaptureMouse = ( g . WantCaptureMouseNextFrame ! = 0 ) ;
else
g . IO . WantCaptureMouse = ( mouse_avail_to_imgui & & ( g . HoveredWindow ! = NULL | | mouse_any_down ) ) | | ( ! g . OpenPopupStack . empty ( ) ) ;
g . IO . WantCaptureKeyboard = ( g . WantCaptureKeyboardNextFrame ! = - 1 ) ? ( g . WantCaptureKeyboardNextFrame ! = 0 ) : ( g . ActiveId ! = 0 ) ;
if ( g . WantCaptureKeyboardNextFrame ! = - 1 )
g . IO . WantCaptureKeyboard = ( g . WantCaptureKeyboardNextFrame ! = 0 ) ;
else
g . IO . WantCaptureKeyboard = ( g . ActiveId ! = 0 ) | | ( modal_window ! = NULL ) ;
g . IO . WantTextInput = ( g . WantTextInputNextFrame ! = - 1 ) ? ( g . WantTextInputNextFrame ! = 0 ) : 0 ;
g . MouseCursor = ImGuiMouseCursor_Arrow ;
g . WantCaptureMouseNextFrame = g . WantCaptureKeyboardNextFrame = g . WantTextInputNextFrame = - 1 ;
@ -4691,15 +4695,13 @@ bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags)
return false ;
}
ImGuiWindowFlags flags = extra_flags | ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings ;
char name [ 20 ] ;
if ( flags & ImGuiWindowFlags_ChildMenu )
if ( extra_flags & ImGuiWindowFlags_ChildMenu )
ImFormatString ( name , IM_ARRAYSIZE ( name ) , " ##Menu_%02d " , g . CurrentPopupStack . Size ) ; // Recycle windows based on depth
else
ImFormatString ( name , IM_ARRAYSIZE ( name ) , " ##Popup_%08x " , id ) ; // Not recycling, so we can close/open during the same frame
bool is_open = Begin ( name , NULL , flags) ;
bool is_open = Begin ( name , NULL , extra_ flags | ImGuiWindowFlags_Popup ) ;
if ( ! is_open ) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
EndPopup ( ) ;
@ -4714,7 +4716,7 @@ bool ImGui::BeginPopup(const char* str_id)
ClearSetNextWindowData ( ) ; // We behave like Begin() and need to consume those values
return false ;
}
return BeginPopupEx ( g . CurrentWindow - > GetID ( str_id ) , ImGuiWindowFlags_AlwaysAutoResize ) ;
return BeginPopupEx ( g . CurrentWindow - > GetID ( str_id ) , ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings ) ;
}
bool ImGui : : IsPopupOpen ( ImGuiID id )
@ -4805,7 +4807,7 @@ bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button)
if ( IsMouseClicked ( mouse_button ) )
if ( IsItemHovered ( ImGuiHoveredFlags_AllowWhenBlockedByPopup ) )
OpenPopupEx ( id , true ) ;
return BeginPopupEx ( id , ImGuiWindowFlags_AlwaysAutoResize ) ;
return BeginPopupEx ( id , ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings ) ;
}
bool ImGui : : BeginPopupContextWindow ( const char * str_id , int mouse_button , bool also_over_items )
@ -4817,7 +4819,7 @@ bool ImGui::BeginPopupContextWindow(const char* str_id, int mouse_button, bool a
if ( IsWindowHovered ( ImGuiHoveredFlags_AllowWhenBlockedByPopup ) )
if ( also_over_items | | ! IsAnyItemHovered ( ) )
OpenPopupEx ( id , true ) ;
return BeginPopupEx ( id , ImGuiWindowFlags_AlwaysAutoResize ) ;
return BeginPopupEx ( id , ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings ) ;
}
bool ImGui : : BeginPopupContextVoid ( const char * str_id , int mouse_button )
@ -4827,7 +4829,7 @@ bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button)
ImGuiID id = GImGui - > CurrentWindow - > GetID ( str_id ) ;
if ( ! IsAnyWindowHovered ( ) & & IsMouseClicked ( mouse_button ) )
OpenPopupEx ( id , true ) ;
return BeginPopupEx ( id , ImGuiWindowFlags_AlwaysAutoResize ) ;
return BeginPopupEx ( id , ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings ) ;
}
static bool BeginChildEx ( const char * name , ImGuiID id , const ImVec2 & size_arg , bool border , ImGuiWindowFlags extra_flags )
@ -9501,6 +9503,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
const bool is_multiline = ( flags & ImGuiInputTextFlags_Multiline ) ! = 0 ;
const bool is_editable = ( flags & ImGuiInputTextFlags_ReadOnly ) = = 0 ;
const bool is_password = ( flags & ImGuiInputTextFlags_Password ) ! = 0 ;
const bool is_undoable = ( flags & ImGuiInputTextFlags_NoUndoRedo ) = = 0 ;
if ( is_multiline ) // Open group before calling GetID() because groups tracks id created during their spawn
BeginGroup ( ) ;
@ -9731,10 +9734,10 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
if ( InputTextFilterCharacter ( & c , flags , callback , user_data ) )
edit_state . OnKeyPressed ( ( int ) c ) ;
}
else if ( IsKeyPressedMap ( ImGuiKey_Escape ) ) { clear_active_id = cancel_edit = true ; }
else if ( is_shortcut_key_only & & IsKeyPressedMap ( ImGuiKey_Z ) & & is_editable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_UNDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_shortcut_key_only & & IsKeyPressedMap ( ImGuiKey_Y ) & & is_editable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_REDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_shortcut_key_only & & IsKeyPressedMap ( ImGuiKey_A ) ) { edit_state . SelectAll ( ) ; edit_state . CursorFollow = true ; }
else if ( IsKeyPressedMap ( ImGuiKey_Escape ) ) { clear_active_id = cancel_edit = true ; }
else if ( is_shortcut_key_only & & IsKeyPressedMap ( ImGuiKey_Z ) & & is_editable & & is_undoable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_UNDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_shortcut_key_only & & IsKeyPressedMap ( ImGuiKey_Y ) & & is_editable & & is_undoable ) { edit_state . OnKeyPressed ( STB_TEXTEDIT_K_REDO ) ; edit_state . ClearSelection ( ) ; }
else if ( is_shortcut_key_only & & IsKeyPressedMap ( ImGuiKey_A ) ) { edit_state . SelectAll ( ) ; edit_state . CursorFollow = true ; }
else if ( is_shortcut_key_only & & ! is_password & & ( ( IsKeyPressedMap ( ImGuiKey_X ) & & is_editable ) | | IsKeyPressedMap ( ImGuiKey_C ) ) & & ( ! is_multiline | | edit_state . HasSelection ( ) ) )
{
// Cut, Copy
@ -10920,7 +10923,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled)
if ( menu_is_open )
{
SetNextWindowPos ( popup_pos , ImGuiCond_Always ) ;
ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ( ( window - > Flags & ( ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu ) ) ? ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu ) ;
ImGuiWindowFlags flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ( ( window - > Flags & ( ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu ) ) ? ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu ) ;
menu_is_open = BeginPopupEx ( id , flags ) ; // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
}
@ -11985,9 +11988,9 @@ void ImGui::NextColumn()
else
{
window - > DC . ColumnsOffsetX = 0.0f ;
window - > DrawList - > ChannelsSetCurrent ( 0 ) ;
columns - > Current = 0 ;
columns - > CellMinY = columns - > CellMaxY ;
window - > DrawList - > ChannelsSetCurrent ( 0 ) ;
}
window - > DC . CursorPos . x = ( float ) ( int ) ( window - > Pos . x + window - > DC . IndentX + window - > DC . ColumnsOffsetX ) ;
window - > DC . CursorPos . y = columns - > CellMinY ;
@ -12190,7 +12193,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
for ( int n = 0 ; n < columns_count + 1 ; n + + )
{
// Clamp
// Clamp position
ImGuiColumnData * column = & columns - > Columns [ n ] ;
float t = column - > OffsetNorm ;
if ( ! ( columns - > Flags & ImGuiColumnsFlags_NoForceWithinWindow ) )
@ -12200,7 +12203,7 @@ void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiColumnsFlag
if ( n = = columns_count )
continue ;
// Compute clipping rectangle s
// Compute clipping rectangle
float clip_x1 = ImFloor ( 0.5f + window - > Pos . x + GetColumnOffset ( n ) - 1.0f ) ;
float clip_x2 = ImFloor ( 0.5f + window - > Pos . x + GetColumnOffset ( n + 1 ) - 1.0f ) ;
column - > ClipRect = ImRect ( clip_x1 , - FLT_MAX , clip_x2 , + FLT_MAX ) ;
@ -12253,7 +12256,7 @@ void ImGui::EndColumns()
g . MouseCursor = ImGuiMouseCursor_ResizeEW ;
if ( held & & g . ActiveIdIsJustActivated )
g . ActiveIdClickOffset . x - = column_hw ; // Store from center of column line (we used a 8 wide rect for columns clicking). This is used by GetDraggedColumnOffset().
if ( held )
if ( held & & ! ( columns - > Columns [ n ] . Flags & ImGuiColumnsFlags_NoResize ) )
dragging_column = n ;
}