24 #include <QDialogButtonBox>
25 #include <QFontMetrics>
26 #include <QHBoxLayout>
28 #include <QPaintEvent>
31 #include <QPushButton>
33 #include <QVBoxLayout>
61 , rectRatio(
static_cast<qreal
>(rectH) /
static_cast<qreal
>(rectW))
63 setWindowFlags(Qt::SubWindow);
64 setAttribute(Qt::WA_DeleteOnClose);
67 palette.setColor(QPalette::WindowText, Qt::white);
70 QVBoxLayout* layout =
new QVBoxLayout(
this);
71 QLabel* callLabel =
new QLabel(QObject::tr(
"Incoming call..."),
this);
72 callLabel->setStyleSheet(
"QLabel{color: white;} QToolTip{color: black;}");
73 callLabel->setAlignment(Qt::AlignHCenter);
74 callLabel->setToolTip(callLabel->text());
79 Qt::TextElideMode elideMode =
80 (QGuiApplication::layoutDirection() == Qt::LeftToRight) ? Qt::ElideRight : Qt::ElideLeft;
82 QFontMetrics fontMetrics(callLabel->font());
84 fontMetrics.elidedText(callLabel->text(), elideMode, rectW - marginSize * 2 - 4);
85 callLabel->setText(elidedText);
87 QDialogButtonBox* buttonBox =
new QDialogButtonBox(Qt::Horizontal,
this);
88 QPushButton *accept =
new QPushButton(
this), *reject =
new QPushButton(
this);
89 accept->setFlat(
true);
90 reject->setFlat(
true);
91 accept->setStyleSheet(
"QPushButton{border:none;}");
92 reject->setStyleSheet(
"QPushButton{border:none;}");
95 accept->setIconSize(accept->size());
96 reject->setIconSize(reject->size());
98 buttonBox->addButton(accept, QDialogButtonBox::AcceptRole);
99 buttonBox->addButton(reject, QDialogButtonBox::RejectRole);
104 layout->setMargin(marginSize);
105 layout->addSpacing(spikeH);
106 layout->addWidget(callLabel);
107 layout->addWidget(buttonBox);
109 setFixedSize(rectW, rectH + spikeH);
119 parentWidget()->removeEventFilter(
this);
121 setParent(
anchor->window());
122 parentWidget()->installEventFilter(
this);
124 QWidget* w =
anchor->window();
126 - w->mapToGlobal({0, 0});
130 if (pos.x() + rectW > w->width())
131 xOverflow = pos.x() + rectW - w->width();
132 pos.rx() -= xOverflow;
134 mainRect = {0, spikeH, rectW, rectH};
135 brush = QBrush(QColor(65, 65, 65));
136 spikePoly = QPolygon({{(rectW - spikeW) / 2 + xOverflow, spikeH},
137 {rectW / 2 + xOverflow, 0},
138 {(rectW + spikeW) / 2 + xOverflow, spikeH}});
146 QPainter painter(
this);
147 painter.setRenderHint(QPainter::Antialiasing);
148 painter.setBrush(
brush);
149 painter.setPen(Qt::NoPen);
169 parentWidget()->removeEventFilter(
this);
176 if (event->type() == QEvent::Resize)