diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index 0c032ea23..3b70a787a 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -1857,16 +1857,32 @@ void CaptureContext::AddDockWindow(QWidget *newWindow, DockReference ref, QWidge return; } - if(ref == DockReference::ConstantBufferArea) + if(ref == DockReference::TransientPopupArea) { - if(ConstantBufferPreviewer::getOne()) + if(qobject_cast(newWindow)) { ToolWindowManager *manager = ToolWindowManager::managerOf(refWindow); - manager->addToolWindow(newWindow, ToolWindowManager::AreaReference( - ToolWindowManager::AddTo, - manager->areaOf(ConstantBufferPreviewer::getOne()))); - return; + ConstantBufferPreviewer *cb = manager->findChild(); + if(cb) + { + manager->addToolWindow(newWindow, ToolWindowManager::AreaReference(ToolWindowManager::AddTo, + manager->areaOf(cb))); + return; + } + } + + if(qobject_cast(newWindow)) + { + ToolWindowManager *manager = ToolWindowManager::managerOf(refWindow); + + PixelHistoryView *hist = manager->findChild(); + if(hist) + { + manager->addToolWindow(newWindow, ToolWindowManager::AreaReference(ToolWindowManager::AddTo, + manager->areaOf(hist))); + return; + } } ref = DockReference::RightOf; diff --git a/qrenderdoc/Code/Interface/QRDInterface.h b/qrenderdoc/Code/Interface/QRDInterface.h index c235899d3..f1f704e80 100644 --- a/qrenderdoc/Code/Interface/QRDInterface.h +++ b/qrenderdoc/Code/Interface/QRDInterface.h @@ -878,10 +878,10 @@ a new dock window or moving an existing dock window. window and using that as the main area, then adding to the left of that. In the default layout this is where the event browser is placed. -.. data:: ConstantBufferArea +.. data:: TransientPopupArea - The new dock window is docked with other constant buffer views, if they exist, or to the right - of the existing window if there are none open. + The new dock window is docked with other similar transient views like constant buffer or pixel + history windows, if they exist, or else docked to the right of the main window. )"); enum class DockReference : int { @@ -902,7 +902,7 @@ enum class DockReference : int // extra values here MainToolArea, LeftToolArea, - ConstantBufferArea, + TransientPopupArea, }; DOCUMENT(R"(Details any changes that have been made to a capture in the UI which can be saved to diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp index addf6dee2..789a919a4 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.cpp +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.cpp @@ -80,17 +80,6 @@ ConstantBufferPreviewer *ConstantBufferPreviewer::has(ShaderStage stage, uint32_ return NULL; } -ConstantBufferPreviewer *ConstantBufferPreviewer::getOne() -{ - for(ConstantBufferPreviewer *c : m_Previews) - { - if(ToolWindowManager::managerOf(c)) - return c; - } - - return NULL; -} - void ConstantBufferPreviewer::OnCaptureLoaded() { OnCaptureClosed(); diff --git a/qrenderdoc/Windows/ConstantBufferPreviewer.h b/qrenderdoc/Windows/ConstantBufferPreviewer.h index 870a00a97..9c6380e49 100644 --- a/qrenderdoc/Windows/ConstantBufferPreviewer.h +++ b/qrenderdoc/Windows/ConstantBufferPreviewer.h @@ -46,7 +46,6 @@ public: ~ConstantBufferPreviewer(); static ConstantBufferPreviewer *has(ShaderStage stage, uint32_t slot, uint32_t idx); - static ConstantBufferPreviewer *getOne(); // IConstantBufferPreviewer QWidget *Widget() override { return this; } diff --git a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp index 65e611bf5..609ccd892 100644 --- a/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D11PipelineStateViewer.cpp @@ -2095,7 +2095,7 @@ void D3D11PipelineStateViewer::cbuffer_itemActivated(RDTreeWidgetItem *item, int IConstantBufferPreviewer *prev = m_Ctx.ViewConstantBuffer(stage->stage, cbufIdx, 0); - m_Ctx.AddDockWindow(prev->Widget(), DockReference::ConstantBufferArea, this, 0.3f); + m_Ctx.AddDockWindow(prev->Widget(), DockReference::TransientPopupArea, this, 0.3f); } void D3D11PipelineStateViewer::on_iaLayouts_itemActivated(RDTreeWidgetItem *item, int column) diff --git a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp index c0bb36967..415535ed7 100644 --- a/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/D3D12PipelineStateViewer.cpp @@ -1922,7 +1922,7 @@ void D3D12PipelineStateViewer::cbuffer_itemActivated(RDTreeWidgetItem *item, int IConstantBufferPreviewer *prev = m_Ctx.ViewConstantBuffer(stage->stage, cb.idx, 0); - m_Ctx.AddDockWindow(prev->Widget(), DockReference::RightOf, this, 0.3f); + m_Ctx.AddDockWindow(prev->Widget(), DockReference::TransientPopupArea, this, 0.3f); } void D3D12PipelineStateViewer::on_iaLayouts_itemActivated(RDTreeWidgetItem *item, int column) diff --git a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp index 04780ef6a..6553b8964 100644 --- a/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/GLPipelineStateViewer.cpp @@ -2059,7 +2059,7 @@ void GLPipelineStateViewer::ubo_itemActivated(RDTreeWidgetItem *item, int column IConstantBufferPreviewer *prev = m_Ctx.ViewConstantBuffer(stage->stage, cb, 0); - m_Ctx.AddDockWindow(prev->Widget(), DockReference::RightOf, this, 0.3f); + m_Ctx.AddDockWindow(prev->Widget(), DockReference::TransientPopupArea, this, 0.3f); } void GLPipelineStateViewer::on_viAttrs_itemActivated(RDTreeWidgetItem *item, int column) diff --git a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp index 8a3d801fa..2a01e10b7 100644 --- a/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp +++ b/qrenderdoc/Windows/PipelineState/VulkanPipelineStateViewer.cpp @@ -2153,7 +2153,7 @@ void VulkanPipelineStateViewer::ubo_itemActivated(RDTreeWidgetItem *item, int co IConstantBufferPreviewer *prev = m_Ctx.ViewConstantBuffer(stage->stage, cb.slotIdx, cb.arrayIdx); - m_Ctx.AddDockWindow(prev->Widget(), DockReference::RightOf, this, 0.3f); + m_Ctx.AddDockWindow(prev->Widget(), DockReference::TransientPopupArea, this, 0.3f); } void VulkanPipelineStateViewer::on_viAttrs_itemActivated(RDTreeWidgetItem *item, int column) diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index 8e5fb5053..391a575b3 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -3480,7 +3480,7 @@ void TextureViewer::on_pixelHistory_clicked() IPixelHistoryView *hist = m_Ctx.ViewPixelHistory(texptr->resourceId, x, y, m_TexDisplay); - m_Ctx.AddDockWindow(hist->Widget(), DockReference::RightOf, this, 0.3f); + m_Ctx.AddDockWindow(hist->Widget(), DockReference::TransientPopupArea, this, 0.3f); // we use this pointer to ensure that the history viewer is still visible (and hasn't been closed) // by the time we want to set the results.