mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	InputText() tidying up (#200)
This commit is contained in:
		
							
								
								
									
										33
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6867,22 +6867,18 @@ static bool InputTextEx(const char* label, char* buf, size_t buf_size, const ImV
 | 
			
		||||
            SetActiveId(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
 | 
			
		||||
    // Down the line we should have a cleaner concept of focused vs active in the library.
 | 
			
		||||
    if (g.ActiveId == id)
 | 
			
		||||
        g.ActiveIdIsFocusedOnly = !io.MouseDown[0];
 | 
			
		||||
 | 
			
		||||
    bool value_changed = false;
 | 
			
		||||
    bool cancel_edit = false;
 | 
			
		||||
    bool enter_pressed = false;
 | 
			
		||||
    
 | 
			
		||||
    // Update some data if we are active or last active
 | 
			
		||||
    if (g.ActiveId == id) //if (edit_state.Id == id)  // Works, but double-click to select-all sets cursors to end which in turn tends to scroll toward the right when shrinking widget.
 | 
			
		||||
    {
 | 
			
		||||
        edit_state.BufSizeA = buf_size;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (g.ActiveId == id)
 | 
			
		||||
    {
 | 
			
		||||
        edit_state.BufSizeA = buf_size;
 | 
			
		||||
 | 
			
		||||
        // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
 | 
			
		||||
        // Down the line we should have a cleaner concept of focused vs active in the library.
 | 
			
		||||
        g.ActiveIdIsFocusedOnly = !io.MouseDown[0];
 | 
			
		||||
 | 
			
		||||
        // Edit in progress
 | 
			
		||||
        const float mouse_x = (g.IO.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + edit_state.ScrollX;
 | 
			
		||||
        const float mouse_y = (is_multiline ? (g.IO.MousePos.y - draw_window->DC.CursorPos.y - style.FramePadding.y) : (g.FontSize*0.5f));
 | 
			
		||||
@@ -7106,16 +7102,17 @@ static bool InputTextEx(const char* label, char* buf, size_t buf_size, const ImV
 | 
			
		||||
    const ImVec2 render_scroll = ImVec2((edit_state.Id == id) ? edit_state.ScrollX : 0.0f, 0.0f);
 | 
			
		||||
    ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + size.x + style.FramePadding.x*2.0f, frame_bb.Min.y + size.y + style.FramePadding.y*2.0f);
 | 
			
		||||
 | 
			
		||||
    if (g.ActiveId == id)
 | 
			
		||||
    if (g.ActiveId == id || (edit_state.Id == id && is_multiline && g.ActiveId == draw_window->GetID("#SCROLLY")))
 | 
			
		||||
    {
 | 
			
		||||
        edit_state.CursorAnim += g.IO.DeltaTime;
 | 
			
		||||
 | 
			
		||||
        // Scroll 
 | 
			
		||||
        if (edit_state.CursorFollow)
 | 
			
		||||
        {
 | 
			
		||||
            edit_state.CursorFollow = false;
 | 
			
		||||
 | 
			
		||||
            // Horizontal scroll in chunks of quarter width
 | 
			
		||||
            ImVec2 cursor_offset;
 | 
			
		||||
            CalcTextSizeW(g.Font, g.FontSize, FLT_MAX, edit_state.Text.begin(), edit_state.Text.begin() + edit_state.StbState.cursor, NULL, &cursor_offset);
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
            const float scroll_increment_x = size.x * 0.25f;
 | 
			
		||||
            if (cursor_offset.x < edit_state.ScrollX)
 | 
			
		||||
                edit_state.ScrollX = ImMax(0.0f, cursor_offset.x - scroll_increment_x);    
 | 
			
		||||
@@ -7131,11 +7128,7 @@ static bool InputTextEx(const char* label, char* buf, size_t buf_size, const ImV
 | 
			
		||||
                    draw_window->ScrollY = cursor_offset.y - size.y;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (g.ActiveId == id || (edit_state.Id == id && is_multiline && g.ActiveId == draw_window->GetID("#SCROLLY")))
 | 
			
		||||
    {
 | 
			
		||||
        edit_state.CursorAnim += g.IO.DeltaTime;
 | 
			
		||||
        edit_state.CursorFollow = false;
 | 
			
		||||
 | 
			
		||||
        // Draw selection
 | 
			
		||||
        int select_begin_idx = edit_state.StbState.select_start;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user