citra-qt/command list: Do not recreate a widget after each selection

Recreating / replacing a widget is slow since it triggers a layout pass.
This commit is contained in:
Lectem 2015-07-26 15:03:54 +02:00
parent e663751f8b
commit b335cce22e

View file

@ -262,7 +262,7 @@ void GPUCommandListWidget::OnCommandDoubleClicked(const QModelIndex& index) {
} }
void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) { void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) {
QWidget* new_info_widget; QWidget* new_info_widget = nullptr;
const unsigned int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toUInt(); const unsigned int command_id = list_widget->model()->data(index, GPUCommandListModel::CommandIdRole).toUInt();
if (COMMAND_IN_RANGE(command_id, texture0) || if (COMMAND_IN_RANGE(command_id, texture0) ||
@ -283,14 +283,15 @@ void GPUCommandListWidget::SetCommandInfo(const QModelIndex& index) {
auto info = Pica::DebugUtils::TextureInfo::FromPicaRegister(config, format); auto info = Pica::DebugUtils::TextureInfo::FromPicaRegister(config, format);
u8* src = Memory::GetPhysicalPointer(config.GetPhysicalAddress()); u8* src = Memory::GetPhysicalPointer(config.GetPhysicalAddress());
new_info_widget = new TextureInfoWidget(src, info); new_info_widget = new TextureInfoWidget(src, info);
} else {
new_info_widget = new QWidget;
} }
if (command_info_widget) {
widget()->layout()->removeWidget(command_info_widget);
delete command_info_widget; delete command_info_widget;
command_info_widget = nullptr;
}
if (new_info_widget) {
widget()->layout()->addWidget(new_info_widget); widget()->layout()->addWidget(new_info_widget);
command_info_widget = new_info_widget; command_info_widget = new_info_widget;
}
} }
#undef COMMAND_IN_RANGE #undef COMMAND_IN_RANGE
@ -328,7 +329,7 @@ GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pi
connect(copy_all, SIGNAL(clicked()), this, SLOT(CopyAllToClipboard())); connect(copy_all, SIGNAL(clicked()), this, SLOT(CopyAllToClipboard()));
command_info_widget = new QWidget; command_info_widget = nullptr;
QVBoxLayout* main_layout = new QVBoxLayout; QVBoxLayout* main_layout = new QVBoxLayout;
main_layout->addWidget(list_widget); main_layout->addWidget(list_widget);
@ -338,7 +339,6 @@ GPUCommandListWidget::GPUCommandListWidget(QWidget* parent) : QDockWidget(tr("Pi
sub_layout->addWidget(copy_all); sub_layout->addWidget(copy_all);
main_layout->addLayout(sub_layout); main_layout->addLayout(sub_layout);
} }
main_layout->addWidget(command_info_widget);
main_widget->setLayout(main_layout); main_widget->setLayout(main_layout);
setWidget(main_widget); setWidget(main_widget);