WrapInScrollArea.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2018 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "DolphinQt/QtUtils/WrapInScrollArea.h"
  4. #include <QFrame>
  5. #include <QLayout>
  6. #include <QPalette>
  7. #include <QScrollArea>
  8. #include <QVBoxLayout>
  9. #include <QWidget>
  10. QWidget* GetWrappedWidget(QWidget* wrapped_widget, QWidget* to_resize, int margin_width,
  11. int margin_height)
  12. {
  13. auto* scroll = new QScrollArea;
  14. scroll->setWidget(wrapped_widget);
  15. scroll->setWidgetResizable(true);
  16. scroll->setFrameStyle(QFrame::NoFrame);
  17. if (to_resize != nullptr)
  18. {
  19. // For some reason width() is bigger than it needs to be.
  20. auto min_size = wrapped_widget->minimumSizeHint();
  21. int recommended_width = min_size.width() + margin_width;
  22. int recommended_height = min_size.height() + margin_height;
  23. to_resize->resize(std::max(recommended_width, to_resize->width()),
  24. std::max(recommended_height, to_resize->height()));
  25. }
  26. scroll->viewport()->setAutoFillBackground(false);
  27. wrapped_widget->setAutoFillBackground(false);
  28. return scroll;
  29. }
  30. void WrapInScrollArea(QWidget* parent, QLayout* wrapped_layout, QWidget* to_resize)
  31. {
  32. if (to_resize == nullptr)
  33. to_resize = parent;
  34. auto* widget = new QWidget;
  35. widget->setLayout(wrapped_layout);
  36. auto* scroll_area = GetWrappedWidget(widget, to_resize, 0, 0);
  37. auto* scroll_layout = new QVBoxLayout;
  38. scroll_layout->addWidget(scroll_area);
  39. scroll_layout->setContentsMargins(0, 0, 0, 0);
  40. parent->setLayout(scroll_layout);
  41. }