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)