diff --git a/qrenderdoc/Code/Interface/Extensions.h b/qrenderdoc/Code/Interface/Extensions.h index 3b27ff002..2ed300b86 100644 --- a/qrenderdoc/Code/Interface/Extensions.h +++ b/qrenderdoc/Code/Interface/Extensions.h @@ -513,6 +513,19 @@ which typically has some widgets be only large enough for their content and othe )"); virtual QWidget *CreateGridContainer() = 0; + DOCUMENT(R"(Creates and returns a spacer widget. + +This widget is completely empty but consumes empty space, meaning all other non-greedy widgets in +the same container will be minimally sized. This can be useful for simple layouts. + +:param bool horizontal: ``True`` if this spacer should consume horizontal space, ``False`` if this + spacer should consume vertical space. Typically this matches the direction of the layout it is + in. +:return: The handle to the newly created widget. +:rtype: ``QWidget`` +)"); + virtual QWidget *CreateSpacer(bool horizontal) = 0; + DOCUMENT(R"(Removes all child widgets from a parent and makes them invisible. These widgets remain valid and can be re-added to another parent or the same parent. diff --git a/qrenderdoc/Code/MiniQtHelper.cpp b/qrenderdoc/Code/MiniQtHelper.cpp index 7d21a5755..adf9bb301 100644 --- a/qrenderdoc/Code/MiniQtHelper.cpp +++ b/qrenderdoc/Code/MiniQtHelper.cpp @@ -220,6 +220,15 @@ QWidget *MiniQtHelper::CreateGridContainer() return ret; } +QWidget *MiniQtHelper::CreateSpacer(bool horizontal) +{ + QWidget *ret = new QWidget(); + ret->setSizePolicy(horizontal ? QSizePolicy::Expanding : QSizePolicy::Preferred, + horizontal ? QSizePolicy::Preferred : QSizePolicy::Expanding); + ret->setMinimumSize(1, 1); + return ret; +} + void MiniQtHelper::ClearContainedWidgets(QWidget *parent) { if(!parent) @@ -427,6 +436,7 @@ QWidget *MiniQtHelper::CreateGroupBox(bool collapsible) ret = new CollapseGroupBox(); else ret = new QGroupBox(); + ret->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); ret->setLayout(new QVBoxLayout()); return ret; } @@ -449,6 +459,7 @@ QWidget *MiniQtHelper::CreateOutputRenderingWidget() { CustomPaintWidget *widget = new CustomPaintWidget(NULL); widget->SetContext(m_Ctx); + widget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); return widget; } @@ -597,6 +608,7 @@ QWidget *MiniQtHelper::CreateTextBox(bool singleLine, WidgetCallback changed) AddWidgetCallback(w, QObject::connect(w, &RDTextEdit::textChanged, [this, w, changed]() { changed(&m_Ctx, w, w->toPlainText()); })); + w->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); return w; } } diff --git a/qrenderdoc/Code/MiniQtHelper.h b/qrenderdoc/Code/MiniQtHelper.h index f99ce3d14..ca07a6f1c 100644 --- a/qrenderdoc/Code/MiniQtHelper.h +++ b/qrenderdoc/Code/MiniQtHelper.h @@ -58,6 +58,7 @@ public: QWidget *CreateHorizontalContainer() override; QWidget *CreateVerticalContainer() override; QWidget *CreateGridContainer() override; + QWidget *CreateSpacer(bool horizontal) override; void ClearContainedWidgets(QWidget *parent) override; void AddGridWidget(QWidget *parent, int row, int column, QWidget *child, int rowSpan, diff --git a/qrenderdoc/Windows/PythonShell.cpp b/qrenderdoc/Windows/PythonShell.cpp index 1a61caea5..023c00818 100644 --- a/qrenderdoc/Windows/PythonShell.cpp +++ b/qrenderdoc/Windows/PythonShell.cpp @@ -150,7 +150,10 @@ struct MiniQtInvoker : ObjectForwarder { return InvokeRetFunction(&IMiniQtHelper::CreateGridContainer); } - + QWidget *CreateSpacer(bool horizontal) + { + return InvokeRetFunction(&IMiniQtHelper::CreateSpacer, horizontal); + } void ClearContainedWidgets(QWidget *parent) { InvokeVoidFunction(&IMiniQtHelper::ClearContainedWidgets, parent);