mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Columns: Fixed one form of shearing during resizing columns with PreserveWidth enabled (there's another issue still). (#913, #125)
This commit is contained in:
		
							
								
								
									
										22
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -9996,7 +9996,7 @@ void ImGui::SetColumnOffset(int column_index, float offset) | ||||
|     window->DC.ColumnsData[column_index].OffsetNorm = offset_norm; | ||||
|  | ||||
|     if (preserve_width) | ||||
|         SetColumnOffset(column_index+1, offset + ImMax(g.Style.ColumnsMinSpacing, width)); | ||||
|         SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width)); | ||||
| } | ||||
|  | ||||
| float ImGui::GetColumnWidth(int column_index) | ||||
| @@ -10090,6 +10090,7 @@ void ImGui::EndColumns() | ||||
| 	{ | ||||
| 		const float y1 = window->DC.ColumnsStartPosY; | ||||
| 		const float y2 = window->DC.CursorPos.y; | ||||
|         int dragging_column = -1; | ||||
| 		for (int i = 1; i < window->DC.ColumnsCount; i++) | ||||
| 		{ | ||||
| 			float x = window->Pos.x + GetColumnOffset(i); | ||||
| @@ -10103,19 +10104,22 @@ void ImGui::EndColumns() | ||||
| 			ButtonBehavior(column_rect, column_id, &hovered, &held); | ||||
| 			if (hovered || held) | ||||
| 				g.MouseCursor = ImGuiMouseCursor_ResizeEW; | ||||
|             if (held && g.ActiveIdIsJustActivated) | ||||
|                 g.ActiveIdClickOffset.x -= column_w; // Store from center of column line (we used a 8 wide rect for columns clicking). This is used by GetDraggedColumnOffset(). | ||||
|             if (held) | ||||
|                 dragging_column = i; | ||||
|  | ||||
| 			// Draw before resize so our items positioning are in sync with the line being drawn | ||||
|             // Draw column | ||||
|             const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator); | ||||
|             const float xi = (float)(int)x; | ||||
|             window->DrawList->AddLine(ImVec2(xi, y1 + 1.0f), ImVec2(xi, y2), col); | ||||
|  | ||||
| 			if (held) | ||||
| 			{ | ||||
| 				if (g.ActiveIdIsJustActivated) | ||||
| 					g.ActiveIdClickOffset.x -= column_w; // Store from center of column line (we used a 8 wide rect for columns clicking) | ||||
| 				x = GetDraggedColumnOffset(i); | ||||
| 				SetColumnOffset(i, x); | ||||
|         } | ||||
|  | ||||
|         // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame. | ||||
|         if (dragging_column != -1) | ||||
|         { | ||||
|             float x = GetDraggedColumnOffset(dragging_column); | ||||
|             SetColumnOffset(dragging_column, x); | ||||
|         } | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user