HAL
overlay.cpp
Go to the documentation of this file.
1 #include "gui/overlay/overlay.h"
2 
3 #include <QEvent>
4 #include <QResizeEvent>
5 
6 namespace hal
7 {
8  Overlay::Overlay(QWidget* parent) : QFrame(parent)
9  {
10  // setAttribute(Qt::WA_NoSystemBackground);
11  // setAttribute(Qt::WA_TranslucentBackground);
12  //setAttribute(Qt::WA_TransparentForMouseEvents);
13  handleParentChanged();
14  }
15 
16  bool Overlay::eventFilter(QObject* watched, QEvent* event)
17  {
18  if (watched == parent())
19  {
20  if (event->type() == QEvent::Resize)
21  resize(static_cast<QResizeEvent*>(event)->size());
22  else if (event->type() == QEvent::ChildAdded)
23  raise();
24  }
25 
26  // PASS UNHANDLED EVENTS TO BASE CLASS
27  return QFrame::eventFilter(watched, event);
28  }
29 
30  bool Overlay::event(QEvent* event)
31  {
32  if (event->type() == QEvent::ParentAboutToChange)
33  {
34  if (parent())
35  {
36  parent()->removeEventFilter(this);
37  return true;
38  }
39  }
40  else if (event->type() == QEvent::ParentChange)
41  {
42  handleParentChanged();
43  return true;
44  }
45 
46  // PASS UNHANDLED EVENTS TO BASE CLASS
47  return QFrame::event(event);
48  }
49 
51  {
52  Q_EMIT clicked();
53  event->accept(); // ACCEPT EXPLICITLY
54  }
55 
56  void Overlay::handleParentChanged()
57  {
58  if (!parent())
59  return;
60 
61  parent()->installEventFilter(this);
62  raise();
63 
64  QWidget* w = qobject_cast<QWidget*>(parent());
65 
66  if (w)
67  resize(w->size());
68  }
69 }
bool event(QEvent *event) override
Definition: overlay.cpp:30
void mousePressEvent(QMouseEvent *event) override
Definition: overlay.cpp:50
void clicked()
bool eventFilter(QObject *watched, QEvent *event) override
Definition: overlay.cpp:16
Overlay(QWidget *parent=nullptr)
Definition: overlay.cpp:8
virtual bool event(QEvent *e) override
Q_EMITQ_EMIT
virtual bool eventFilter(QObject *watched, QEvent *event)
void installEventFilter(QObject *filterObj)
QObject * parent() const const
void removeEventFilter(QObject *obj)
void resize(int w, int h)