@ -2332,26 +2332,20 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data,
else if ( data_type = = ImGuiDataType_S32 & & strcmp ( format , " %d " ) ! = 0 ) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
else if ( data_type = = ImGuiDataType_S32 & & strcmp ( format , " %d " ) ! = 0 ) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
format = PatchFormatStringFloatToInt ( format ) ;
format = PatchFormatStringFloatToInt ( format ) ;
// Tabbing or CTRL-clicking on Drag turns it into an InputText
const bool hovered = ItemHoverable ( frame_bb , id ) ;
const bool hovered = ItemHoverable ( frame_bb , id ) ;
bool temp_input_is_active = temp_input_allowed & & TempInputIsActive ( id ) ;
bool temp_input_is_active = temp_input_allowed & & TempInputIsActive ( id ) ;
if ( ! temp_input_is_active )
if ( ! temp_input_is_active )
{
{
// Tabbing or CTRL-clicking on Drag turns it into an InputText
const bool input_requested_by_tabbing = temp_input_allowed & & ( g . LastItemData . StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing ) ! = 0 ;
const bool input_requested_by_tabbing = temp_input_allowed & & ( g . LastItemData . StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing ) ! = 0 ;
const bool clicked = ( hovered & & g . IO . MouseClicked [ 0 ] ) ;
const bool clicked = ( hovered & & g . IO . MouseClicked [ 0 ] ) ;
const bool double_clicked = ( hovered & & g . IO . MouseClickedCount [ 0 ] = = 2 ) ;
const bool double_clicked = ( hovered & & g . IO . MouseClickedCount [ 0 ] = = 2 ) ;
if ( input_requested_by_tabbing | | clicked | | double_clicked | | g . NavActivateId = = id | | g . NavActivateInputId = = id )
const bool make_active = ( input_requested_by_tabbing | | clicked | | double_clicked | | g . NavActivateId = = id | | g . NavActivateInputId = = id ) ;
{
if ( make_active & & temp_input_allowed )
SetActiveID ( id , window ) ;
SetFocusID ( id , window ) ;
FocusWindow ( window ) ;
g . ActiveIdUsingNavDirMask = ( 1 < < ImGuiDir_Left ) | ( 1 < < ImGuiDir_Right ) ;
if ( temp_input_allowed )
if ( input_requested_by_tabbing | | ( clicked & & g . IO . KeyCtrl ) | | double_clicked | | g . NavActivateInputId = = id )
if ( input_requested_by_tabbing | | ( clicked & & g . IO . KeyCtrl ) | | double_clicked | | g . NavActivateInputId = = id )
temp_input_is_active = true ;
temp_input_is_active = true ;
}
// Experimental: simple click (without moving) turns Drag into an InputText
// (Optional) simple click (without moving) turns Drag into an InputText
if ( g . IO . ConfigDragClickToInputText & & temp_input_allowed & & ! temp_input_is_active )
if ( g . IO . ConfigDragClickToInputText & & temp_input_allowed & & ! temp_input_is_active )
if ( g . ActiveId = = id & & hovered & & g . IO . MouseReleased [ 0 ] & & ! IsMouseDragPastThreshold ( 0 , g . IO . MouseDragThreshold * DRAG_MOUSE_THRESHOLD_FACTOR ) )
if ( g . ActiveId = = id & & hovered & & g . IO . MouseReleased [ 0 ] & & ! IsMouseDragPastThreshold ( 0 , g . IO . MouseDragThreshold * DRAG_MOUSE_THRESHOLD_FACTOR ) )
{
{
@ -2359,6 +2353,14 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data,
g . NavActivateFlags = ImGuiActivateFlags_PreferInput ;
g . NavActivateFlags = ImGuiActivateFlags_PreferInput ;
temp_input_is_active = true ;
temp_input_is_active = true ;
}
}
if ( make_active & & ! temp_input_is_active )
{
SetActiveID ( id , window ) ;
SetFocusID ( id , window ) ;
FocusWindow ( window ) ;
g . ActiveIdUsingNavDirMask = ( 1 < < ImGuiDir_Left ) | ( 1 < < ImGuiDir_Right ) ;
}
}
}
if ( temp_input_is_active )
if ( temp_input_is_active )
@ -2950,21 +2952,24 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_dat
else if ( data_type = = ImGuiDataType_S32 & & strcmp ( format , " %d " ) ! = 0 ) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
else if ( data_type = = ImGuiDataType_S32 & & strcmp ( format , " %d " ) ! = 0 ) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
format = PatchFormatStringFloatToInt ( format ) ;
format = PatchFormatStringFloatToInt ( format ) ;
// Tabbing or CTRL-clicking on Slider turns it into an input box
const bool hovered = ItemHoverable ( frame_bb , id ) ;
const bool hovered = ItemHoverable ( frame_bb , id ) ;
bool temp_input_is_active = temp_input_allowed & & TempInputIsActive ( id ) ;
bool temp_input_is_active = temp_input_allowed & & TempInputIsActive ( id ) ;
if ( ! temp_input_is_active )
if ( ! temp_input_is_active )
{
{
// Tabbing or CTRL-clicking on Slider turns it into an input box
const bool input_requested_by_tabbing = temp_input_allowed & & ( g . LastItemData . StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing ) ! = 0 ;
const bool input_requested_by_tabbing = temp_input_allowed & & ( g . LastItemData . StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing ) ! = 0 ;
const bool clicked = ( hovered & & g . IO . MouseClicked [ 0 ] ) ;
const bool clicked = ( hovered & & g . IO . MouseClicked [ 0 ] ) ;
if ( input_requested_by_tabbing | | clicked | | g . NavActivateId = = id | | g . NavActivateInputId = = id )
const bool make_active = ( input_requested_by_tabbing | | clicked | | g . NavActivateId = = id | | g . NavActivateInputId = = id ) ;
if ( make_active & & temp_input_allowed )
if ( input_requested_by_tabbing | | ( clicked & & g . IO . KeyCtrl ) | | g . NavActivateInputId = = id )
temp_input_is_active = true ;
if ( make_active & & ! temp_input_is_active )
{
{
SetActiveID ( id , window ) ;
SetActiveID ( id , window ) ;
SetFocusID ( id , window ) ;
SetFocusID ( id , window ) ;
FocusWindow ( window ) ;
FocusWindow ( window ) ;
g . ActiveIdUsingNavDirMask | = ( 1 < < ImGuiDir_Left ) | ( 1 < < ImGuiDir_Right ) ;
g . ActiveIdUsingNavDirMask | = ( 1 < < ImGuiDir_Left ) | ( 1 < < ImGuiDir_Right ) ;
if ( temp_input_allowed & & ( input_requested_by_tabbing | | ( clicked & & g . IO . KeyCtrl ) | | g . NavActivateInputId = = id ) )
temp_input_is_active = true ;
}
}
}
}