| | |
| | | |
| | | bool BorderItem::shouldEnableEmulatedPainter() const { |
| | | # if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) |
| | | auto api = window()->rendererInterface()->graphicsApi(); |
| | | const QQuickWindow* win = window(); |
| | | if (!win) { |
| | | return true; |
| | | } |
| | | auto api = win->rendererInterface()->graphicsApi(); |
| | | switch (api) { |
| | | case QSGRendererInterface::OpenGL: |
| | | // FIXME: experimental, try to find the exact fixed version. |
| | |
| | | BorderItem::~BorderItem() = default; |
| | | |
| | | void BorderItem::updateGeometry() { |
| | | setHeight(borderThickness()); |
| | | const QQuickWindow* win = window(); |
| | | if (!win) { |
| | | return; |
| | | } |
| | | setHeight(borderThickness() / win->effectiveDevicePixelRatio()); |
| | | setVisible(isNormalWindow()); |
| | | } |
| | | |
| | | void BorderItem::paint(QPainter *painter) { |
| | | Q_UNUSED(painter) |
| | | if (shouldEnableEmulatedPainter()) { |
| | | QRect rect(QPoint(0, 0), size().toSize()); |
| | | QRegion region(rect); |
| | | void *args[] = { |
| | | painter, |
| | | &rect, |
| | | ®ion, |
| | | }; |
| | | ctx->virtual_hook(AbstractWindowContext::DrawWindows10BorderHook_Emulated, args); |
| | | drawBorderEmulated(painter, QRect({0, 0}, size().toSize())); |
| | | } else { |
| | | needPaint = true; |
| | | } |
| | |
| | | void BorderItem::_q_afterSynchronizing() { |
| | | if (needPaint) { |
| | | needPaint = false; |
| | | drawBorder(); |
| | | drawBorderNative(); |
| | | } |
| | | } |
| | | |