mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Internals: rework RenderMouseCursor() signature so we can use it in docking branch more naturally.
This commit is contained in:
		
							
								
								
									
										34
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -3193,6 +3193,32 @@ void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFl | ||||
|     } | ||||
| } | ||||
|  | ||||
| void ImGui::RenderMouseCursor(ImVec2 base_pos, float base_scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) | ||||
| { | ||||
|     ImGuiContext& g = *GImGui; | ||||
|     IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT); | ||||
|     for (int n = 0; n < g.Viewports.Size; n++) | ||||
|     { | ||||
|         ImGuiViewportP* viewport = g.Viewports[n]; | ||||
|         ImDrawList* draw_list = GetForegroundDrawList(viewport); | ||||
|         ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas; | ||||
|         ImVec2 offset, size, uv[4]; | ||||
|         if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2])) | ||||
|         { | ||||
|             const ImVec2 pos = base_pos - offset; | ||||
|             const float scale = base_scale; | ||||
|             ImTextureID tex_id = font_atlas->TexID; | ||||
|             draw_list->PushTextureID(tex_id); | ||||
|             draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale, uv[2], uv[3], col_shadow); | ||||
|             draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale, uv[2], uv[3], col_shadow); | ||||
|             draw_list->AddImage(tex_id, pos,                        pos + size * scale,                  uv[2], uv[3], col_border); | ||||
|             draw_list->AddImage(tex_id, pos,                        pos + size * scale,                  uv[0], uv[1], col_fill); | ||||
|             draw_list->PopTextureID(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| //----------------------------------------------------------------------------- | ||||
| // [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!) | ||||
| //----------------------------------------------------------------------------- | ||||
| @@ -4888,6 +4914,10 @@ void ImGui::Render() | ||||
|         if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window | ||||
|             AddRootWindowToDrawData(windows_to_render_top_most[n]); | ||||
|  | ||||
|     // Draw software mouse cursor if requested by io.MouseDrawCursor flag | ||||
|     if (g.IO.MouseDrawCursor && first_render_of_frame && g.MouseCursor != ImGuiMouseCursor_None) | ||||
|         RenderMouseCursor(g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48)); | ||||
|  | ||||
|     // Setup ImDrawData structures for end-user | ||||
|     g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = 0; | ||||
|     for (int n = 0; n < g.Viewports.Size; n++) | ||||
| @@ -4895,10 +4925,6 @@ void ImGui::Render() | ||||
|         ImGuiViewportP* viewport = g.Viewports[n]; | ||||
|         viewport->DrawDataBuilder.FlattenIntoSingleLayer(); | ||||
|  | ||||
|         // Draw software mouse cursor if requested by io.MouseDrawCursor flag | ||||
|         if (g.IO.MouseDrawCursor && first_render_of_frame) | ||||
|             RenderMouseCursor(GetForegroundDrawList(viewport), g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48)); | ||||
|  | ||||
|         // Add foreground ImDrawList (for each active viewport) | ||||
|         if (viewport->DrawLists[1] != NULL) | ||||
|             AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport)); | ||||
|   | ||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -65,7 +65,7 @@ Index of this file: | ||||
| // Version | ||||
| // (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens) | ||||
| #define IMGUI_VERSION               "1.87" | ||||
| #define IMGUI_VERSION_NUM           18700 | ||||
| #define IMGUI_VERSION_NUM           18701 | ||||
| #define IMGUI_CHECKVERSION()        ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx)) | ||||
| #define IMGUI_HAS_TABLE | ||||
|  | ||||
|   | ||||
| @@ -3736,7 +3736,6 @@ void ImFont::RenderText(ImDrawList* draw_list, float size, ImVec2 pos, ImU32 col | ||||
| // - RenderArrow() | ||||
| // - RenderBullet() | ||||
| // - RenderCheckMark() | ||||
| // - RenderMouseCursor() | ||||
| // - RenderArrowPointingAt() | ||||
| // - RenderRectFilledRangeH() | ||||
| // - RenderRectFilledWithHole() | ||||
| @@ -3797,27 +3796,6 @@ void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float | ||||
|     draw_list->PathStroke(col, 0, thickness); | ||||
| } | ||||
|  | ||||
| void ImGui::RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow) | ||||
| { | ||||
|     if (mouse_cursor == ImGuiMouseCursor_None) | ||||
|         return; | ||||
|     IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT); | ||||
|  | ||||
|     ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas; | ||||
|     ImVec2 offset, size, uv[4]; | ||||
|     if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2])) | ||||
|     { | ||||
|         pos -= offset; | ||||
|         ImTextureID tex_id = font_atlas->TexID; | ||||
|         draw_list->PushTextureID(tex_id); | ||||
|         draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale,    uv[2], uv[3], col_shadow); | ||||
|         draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale,    uv[2], uv[3], col_shadow); | ||||
|         draw_list->AddImage(tex_id, pos,                        pos + size * scale,                     uv[2], uv[3], col_border); | ||||
|         draw_list->AddImage(tex_id, pos,                        pos + size * scale,                     uv[0], uv[1], col_fill); | ||||
|         draw_list->PopTextureID(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side. | ||||
| void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col) | ||||
| { | ||||
|   | ||||
| @@ -2760,12 +2760,12 @@ namespace ImGui | ||||
|     IMGUI_API void          RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0); | ||||
|     IMGUI_API void          RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight | ||||
|     IMGUI_API const char*   FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text. | ||||
|     IMGUI_API void          RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); | ||||
|  | ||||
|     // Render helpers (those functions don't access any ImGui state!) | ||||
|     IMGUI_API void          RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f); | ||||
|     IMGUI_API void          RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col); | ||||
|     IMGUI_API void          RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz); | ||||
|     IMGUI_API void          RenderMouseCursor(ImDrawList* draw_list, ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow); | ||||
|     IMGUI_API void          RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col); | ||||
|     IMGUI_API void          RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding); | ||||
|     IMGUI_API void          RenderRectFilledWithHole(ImDrawList* draw_list, ImRect outer, ImRect inner, ImU32 col, float rounding); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user