qtmaterialoverlaywidget.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "lib/qtmaterialoverlaywidget.h"
  2. #include <QEvent>
  3. /*!
  4. * \class QtMaterialOverlayWidget
  5. * \internal
  6. */
  7. QtMaterialOverlayWidget::QtMaterialOverlayWidget(QWidget *parent)
  8. : QWidget(parent)
  9. {
  10. if (parent) {
  11. parent->installEventFilter(this);
  12. }
  13. }
  14. QtMaterialOverlayWidget::~QtMaterialOverlayWidget()
  15. {
  16. }
  17. /*!
  18. * \reimp
  19. */
  20. bool QtMaterialOverlayWidget::event(QEvent *event)
  21. {
  22. if (!parent()) {
  23. return QWidget::event(event);
  24. }
  25. switch (event->type())
  26. {
  27. case QEvent::ParentChange:
  28. {
  29. parent()->installEventFilter(this);
  30. setGeometry(overlayGeometry());
  31. break;
  32. }
  33. case QEvent::ParentAboutToChange:
  34. {
  35. parent()->removeEventFilter(this);
  36. break;
  37. }
  38. default:
  39. break;
  40. }
  41. return QWidget::event(event);
  42. }
  43. /*!
  44. * \reimp
  45. */
  46. bool QtMaterialOverlayWidget::eventFilter(QObject *obj, QEvent *event)
  47. {
  48. switch (event->type())
  49. {
  50. case QEvent::Move:
  51. case QEvent::Resize:
  52. setGeometry(overlayGeometry());
  53. break;
  54. default:
  55. break;
  56. }
  57. return QWidget::eventFilter(obj, event);
  58. }
  59. QRect QtMaterialOverlayWidget::overlayGeometry() const
  60. {
  61. QWidget *widget = parentWidget();
  62. if (!widget) {
  63. return QRect();
  64. }
  65. return widget->rect();
  66. }