summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qshapedpixmapdndwindow.cpp
blob: 546a1a4937f840044baaab9912b8c89a6efa44a3 (plain)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
// Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#include"qshapedpixmapdndwindow_p.h"#include"qplatformwindow.h"#include <QtGui/QPainter>#include <QtGui/QCursor>#include <QtGui/QGuiApplication>#include <QtGui/QPalette>#include <QtGui/QBitmap> QT_BEGIN_NAMESPACE QShapedPixmapWindow::QShapedPixmapWindow(QScreen *screen):m_useCompositing(true){setScreen(screen); QSurfaceFormat format; format.setAlphaBufferSize(8);setFormat(format);setFlags(Qt::FramelessWindowHint |Qt::BypassWindowManagerHint |Qt::WindowTransparentForInput |Qt::WindowDoesNotAcceptFocus);}QShapedPixmapWindow::~QShapedPixmapWindow(){}voidQShapedPixmapWindow::setPixmap(const QPixmap &pixmap){ m_pixmap = pixmap;if(!m_useCompositing) {const QBitmap mask = m_pixmap.mask();if(!mask.isNull()) {if(!handle())create();if(auto platformWindow =handle()) {constauto pixmapDpr = m_pixmap.devicePixelRatio();constauto winDpr =devicePixelRatio();constauto maskSize = (QSizeF(m_pixmap.size()) * winDpr / pixmapDpr).toSize(); platformWindow->setMask(QBitmap::fromPixmap(mask.scaled(maskSize)));}}}}voidQShapedPixmapWindow::setHotspot(const QPoint &hotspot){ m_hotSpot = hotspot;}voidQShapedPixmapWindow::paintEvent(QPaintEvent *){if(!m_pixmap.isNull()) {const QRect rect(QPoint(0,0),size()); QPainter painter(this);if(m_useCompositing) painter.setCompositionMode(QPainter::CompositionMode_Source);else painter.fillRect(rect,QGuiApplication::palette().base()); painter.drawPixmap(rect, m_pixmap);}}voidQShapedPixmapWindow::updateGeometry(const QPoint &pos){ QSize size(1,1);if(!m_pixmap.isNull()) { size = m_pixmap.deviceIndependentSize().toSize();}setGeometry(QRect(pos - m_hotSpot, size));} QT_END_NAMESPACE #include"moc_qshapedpixmapdndwindow_p.cpp"
close