qtmaterialdialog_internal.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "qtmaterialdialog_internal.h"
  2. #include <QPainter>
  3. #include <QPixmap>
  4. #include <QEvent>
  5. #include <QtWidgets/QStackedLayout>
  6. #include "qtmaterialdialog.h"
  7. /*!
  8. * \class QtMaterialDialogProxy
  9. * \internal
  10. */
  11. QtMaterialDialogProxy::QtMaterialDialogProxy(
  12. QtMaterialDialogWindow *source,
  13. QStackedLayout *layout,
  14. QtMaterialDialog *dialog,
  15. QWidget *parent)
  16. : QWidget(parent),
  17. m_source(source),
  18. m_layout(layout),
  19. m_dialog(dialog),
  20. m_opacity(0),
  21. m_mode(Transparent)
  22. {
  23. }
  24. QtMaterialDialogProxy::~QtMaterialDialogProxy()
  25. {
  26. }
  27. void QtMaterialDialogProxy::setOpacity(qreal opacity)
  28. {
  29. m_opacity = opacity;
  30. m_mode = SemiTransparent;
  31. update();
  32. m_dialog->update();
  33. }
  34. void QtMaterialDialogProxy::makeOpaque()
  35. {
  36. m_dialog->setAttribute(Qt::WA_TransparentForMouseEvents, false);
  37. m_layout->setCurrentIndex(0);
  38. m_opacity = 1.0;
  39. m_mode = Opaque;
  40. update();
  41. }
  42. void QtMaterialDialogProxy::makeTransparent()
  43. {
  44. m_opacity = 0.0;
  45. m_mode = Transparent;
  46. update();
  47. }
  48. QSize QtMaterialDialogProxy::sizeHint() const
  49. {
  50. return m_source->sizeHint();
  51. }
  52. bool QtMaterialDialogProxy::event(QEvent *event)
  53. {
  54. const QEvent::Type type = event->type();
  55. if (QEvent::Move == type || QEvent::Resize == type) {
  56. m_source->setGeometry(geometry());
  57. }
  58. return QWidget::event(event);
  59. }
  60. void QtMaterialDialogProxy::paintEvent(QPaintEvent *event)
  61. {
  62. Q_UNUSED(event)
  63. QPainter painter(this);
  64. if (Transparent == m_mode) {
  65. return;
  66. } else if (Opaque != m_mode) {
  67. painter.setOpacity(m_opacity);
  68. }
  69. QPixmap pm = m_source->grab(m_source->rect());
  70. painter.drawPixmap(0, 0, pm);
  71. }
  72. /*!
  73. * \class QtMaterialDialogWindow
  74. * \internal
  75. */
  76. QtMaterialDialogWindow::QtMaterialDialogWindow(
  77. QtMaterialDialog *dialog,
  78. QWidget *parent)
  79. : QWidget(parent),
  80. m_dialog(dialog)
  81. {
  82. }
  83. QtMaterialDialogWindow::~QtMaterialDialogWindow()
  84. {
  85. }
  86. void QtMaterialDialogWindow::setOffset(int offset)
  87. {
  88. QMargins margins = m_dialog->layout()->contentsMargins();
  89. margins.setBottom(offset);
  90. m_dialog->layout()->setContentsMargins(margins);
  91. }
  92. int QtMaterialDialogWindow::offset() const
  93. {
  94. return m_dialog->layout()->contentsMargins().bottom();
  95. }
  96. void QtMaterialDialogWindow::paintEvent(QPaintEvent *event)
  97. {
  98. Q_UNUSED(event)
  99. QPainter painter(this);
  100. QBrush brush;
  101. brush.setStyle(Qt::SolidPattern);
  102. brush.setColor(Qt::white);
  103. painter.setPen(Qt::NoPen);
  104. painter.setBrush(brush);
  105. painter.drawRect(rect());
  106. }