Просмотр исходного кода

Update the aspect ratio of the docks to fit the new screen position in case that the have changed and they where inside another dock. (#1206)

Vazquinhos 8 лет назад
Родитель
Сommit
a82bfe0c15
1 измененных файлов с 11 добавлено и 4 удалено
  1. 11 4
      3rdparty/ocornut-imgui/widgets/dock.inl

+ 11 - 4
3rdparty/ocornut-imgui/widgets/dock.inl

@@ -234,7 +234,10 @@ namespace ImGui
 			ImU32 id = ImHash(label, 0);
 			ImU32 id = ImHash(label, 0);
 			for (int i = 0; i < m_docks.size(); ++i)
 			for (int i = 0; i < m_docks.size(); ++i)
 			{
 			{
-				if (m_docks[i]->id == id) return *m_docks[i];
+        if (m_docks[i]->id == id)
+        {
+          return *m_docks[i];
+        }
 			}
 			}
 
 
 			Dock* new_dock = (Dock*)MemAlloc(sizeof(Dock));
 			Dock* new_dock = (Dock*)MemAlloc(sizeof(Dock));
@@ -369,15 +372,19 @@ namespace ImGui
 				ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_ShowBorders | 
 				ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_ShowBorders | 
 				ImGuiWindowFlags_NoBringToFrontOnFocus;
 				ImGuiWindowFlags_NoBringToFrontOnFocus;
 			Dock* root = getRootDock();
 			Dock* root = getRootDock();
+      const ImVec2& displaySize = GetIO().DisplaySize;
 			if (root)
 			if (root)
 			{
 			{
-				SetNextWindowPos(root->pos);
-				SetNextWindowSize(root->size);
+        const ImVec2 percentage(displaySize.x / root->size.x, displaySize.y / root->size.y );
+        const ImVec2 rescaledPos = root->pos * percentage;
+        const ImVec2 rescaledSize = root->size * percentage;
+        SetNextWindowPos(rescaledPos);
+        SetNextWindowSize(rescaledSize);
 			}
 			}
 			else
 			else
 			{
 			{
 				SetNextWindowPos(ImVec2(0, 0));
 				SetNextWindowPos(ImVec2(0, 0));
-				SetNextWindowSize(GetIO().DisplaySize);
+				SetNextWindowSize(displaySize);
 			}
 			}
 			ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0);
 			ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0);
 			Begin("###DockPanel", NULL, flags);
 			Begin("###DockPanel", NULL, flags);