summaryrefslogtreecommitdiff
path: root/vcl/qt5/Qt5Frame.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/qt5/Qt5Frame.cxx')
-rw-r--r--vcl/qt5/Qt5Frame.cxx60
1 files changed, 39 insertions, 21 deletions
diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index 722dca9467db..2d780c7bd4ee 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -284,7 +284,8 @@ Qt5Frame::~Qt5Frame()
void Qt5Frame::Damage(sal_Int32 nExtentsX, sal_Int32 nExtentsY, sal_Int32 nExtentsWidth,
sal_Int32 nExtentsHeight) const
{
- m_pQWidget->update(nExtentsX, nExtentsY, nExtentsWidth, nExtentsHeight);
+ m_pQWidget->update(scaledQRect(QRect(nExtentsX, nExtentsY, nExtentsWidth, nExtentsHeight),
+ 1 / devicePixelRatioF()));
}
void Qt5Frame::InitQt5SvpGraphics(Qt5SvpGraphics* pQt5SvpGraphics)
@@ -320,7 +321,8 @@ SalGraphics* Qt5Frame::AcquireGraphics()
if (!m_pQt5Graphics.get() || m_bGraphicsInvalid)
{
m_pQt5Graphics.reset(new Qt5Graphics(this));
- m_pQImage.reset(new QImage(m_pQWidget->size(), Qt5_DefaultFormat32));
+ m_pQImage.reset(
+ new QImage(m_pQWidget->size() * devicePixelRatioF(), Qt5_DefaultFormat32));
m_pQImage->fill(Qt::transparent);
m_pQt5Graphics->ChangeQImage(m_pQImage.get());
m_bGraphicsInvalid = false;
@@ -348,6 +350,8 @@ bool Qt5Frame::PostEvent(std::unique_ptr<ImplSVEvent> pData)
QWidget* Qt5Frame::asChild() const { return m_pTopLevel ? m_pTopLevel : m_pQWidget; }
+qreal Qt5Frame::devicePixelRatioF() const { return asChild()->devicePixelRatioF(); }
+
bool Qt5Frame::isWindow() const { return asChild()->isWindow(); }
QWindow* Qt5Frame::windowHandle() const
@@ -429,13 +433,19 @@ void Qt5Frame::Show(bool bVisible, bool /*bNoActivate*/)
void Qt5Frame::SetMinClientSize(long nWidth, long nHeight)
{
if (!isChild())
- asChild()->setMinimumSize(nWidth, nHeight);
+ {
+ const qreal fRatio = devicePixelRatioF();
+ asChild()->setMinimumSize(round(nWidth / fRatio), round(nHeight / fRatio));
+ }
}
void Qt5Frame::SetMaxClientSize(long nWidth, long nHeight)
{
if (!isChild())
- asChild()->setMaximumSize(nWidth, nHeight);
+ {
+ const qreal fRatio = devicePixelRatioF();
+ asChild()->setMaximumSize(round(nWidth / fRatio), round(nHeight / fRatio));
+ }
}
void Qt5Frame::SetDefaultPos()
@@ -446,10 +456,12 @@ void Qt5Frame::SetDefaultPos()
// center on parent
if (m_pParent)
{
+ const qreal fRatio = devicePixelRatioF();
QWidget* const pWindow = m_pParent->GetQWidget()->window();
QWidget* const pWidget = asChild();
QPoint aPos = pWindow->rect().center() - pWidget->rect().center();
- SetPosSize(aPos.x(), aPos.y(), 0, 0, SAL_FRAME_POSSIZE_X | SAL_FRAME_POSSIZE_Y);
+ SetPosSize(round(aPos.x() * fRatio), round(aPos.y() * fRatio), 0, 0,
+ SAL_FRAME_POSSIZE_X | SAL_FRAME_POSSIZE_Y);
assert(!m_bDefaultPos);
}
else
@@ -518,10 +530,12 @@ void Qt5Frame::SetPosSize(long nX, long nY, long nWidth, long nHeight, sal_uInt1
if (nWidth > 0 && nHeight > 0)
{
m_bDefaultSize = false;
+ const int nNewWidth = round(nWidth / devicePixelRatioF());
+ const int nNewHeight = round(nHeight / devicePixelRatioF());
if (m_nStyle & SalFrameStyleFlags::SIZEABLE)
- asChild()->resize(nWidth, nHeight);
+ asChild()->resize(nNewWidth, nNewHeight);
else
- asChild()->setFixedSize(nWidth, nHeight);
+ asChild()->setFixedSize(nNewWidth, nNewHeight);
}
// assume the resize happened
@@ -546,7 +560,7 @@ void Qt5Frame::SetPosSize(long nX, long nY, long nWidth, long nHeight, sal_uInt1
Qt5MainWindow* pTopLevel = m_pParent->GetTopLevelWindow();
if (pTopLevel && pTopLevel->menuBar() && pTopLevel->menuBar()->isVisible())
- nY += pTopLevel->menuBar()->geometry().height();
+ nY += round(pTopLevel->menuBar()->geometry().height() * devicePixelRatioF());
}
if (!(nFlags & SAL_FRAME_POSSIZE_X))
@@ -560,14 +574,14 @@ void Qt5Frame::SetPosSize(long nX, long nY, long nWidth, long nHeight, sal_uInt1
maGeometry.nY = nY;
m_bDefaultPos = false;
- asChild()->move(nX, nY);
+ asChild()->move(round(nX / devicePixelRatioF()), round(nY / devicePixelRatioF()));
}
}
void Qt5Frame::GetClientSize(long& rWidth, long& rHeight)
{
- rWidth = m_pQWidget->width();
- rHeight = m_pQWidget->height();
+ rWidth = round(m_pQWidget->width() * devicePixelRatioF());
+ rHeight = round(m_pQWidget->height() * devicePixelRatioF());
}
void Qt5Frame::GetWorkArea(tools::Rectangle& rRect)
@@ -578,7 +592,7 @@ void Qt5Frame::GetWorkArea(tools::Rectangle& rRect)
if (!pScreen)
return;
- QSize aSize = pScreen->availableVirtualSize();
+ QSize aSize = pScreen->availableVirtualSize() * devicePixelRatioF();
rRect = tools::Rectangle(0, 0, aSize.width(), aSize.height());
}
@@ -622,9 +636,10 @@ void Qt5Frame::SetWindowState(const SalFrameState* pState)
if ((pState->mnMask & WindowStateMask::State) && (pState->mnState & WindowStateState::Maximized)
&& !isMaximized() && (pState->mnMask & nMaxGeometryMask) == nMaxGeometryMask)
{
+ const qreal fRatio = devicePixelRatioF();
QWidget* const pChild = asChild();
- pChild->resize(pState->mnWidth, pState->mnHeight);
- pChild->move(pState->mnX, pState->mnY);
+ pChild->resize(ceil(pState->mnWidth / fRatio), ceil(pState->mnHeight / fRatio));
+ pChild->move(ceil(pState->mnX / fRatio), ceil(pState->mnY / fRatio));
SetWindowStateImpl(Qt::WindowMaximized);
}
else if (pState->mnMask
@@ -666,7 +681,7 @@ bool Qt5Frame::GetWindowState(SalFrameState* pState)
else
{
// geometry() is the drawable area, which is wanted here
- QRect rect = asChild()->geometry();
+ QRect rect = scaledQRect(asChild()->geometry(), devicePixelRatioF());
pState->mnX = rect.x();
pState->mnY = rect.y();
pState->mnWidth = rect.width();
@@ -1132,7 +1147,7 @@ void Qt5Frame::Beep() { QApplication::beep(); }
SalFrame::SalPointerState Qt5Frame::GetPointerState()
{
SalPointerState aState;
- aState.maPos = toPoint(QCursor::pos());
+ aState.maPos = toPoint(QCursor::pos() * devicePixelRatioF());
aState.maPos.Move(-maGeometry.nX, -maGeometry.nY);
aState.mnState = GetMouseModCode(QGuiApplication::mouseButtons())
| GetKeyModCode(QGuiApplication::keyboardModifiers());
@@ -1163,7 +1178,8 @@ void Qt5Frame::BeginSetClipRegion(sal_uInt32)
void Qt5Frame::UnionClipRegion(long nX, long nY, long nWidth, long nHeight)
{
- m_aRegion = m_aRegion.united(QRegion(nX, nY, nWidth, nHeight));
+ m_aRegion
+ = m_aRegion.united(scaledQRect(QRect(nX, nY, nWidth, nHeight), 1 / devicePixelRatioF()));
}
void Qt5Frame::EndSetClipRegion() { m_bNullRegion = false; }
@@ -1330,12 +1346,13 @@ void Qt5Frame::handleDragMove(QDragMoveEvent* pEvent)
const sal_Int8 nSourceActions = toVclDropActions(pEvent->possibleActions());
const QMimeData* pMimeData = pEvent->mimeData();
const sal_Int8 nUserDropAction = lcl_getUserDropAction(pEvent, nSourceActions, pMimeData);
+ const Point aPos = toPoint(pEvent->pos() * devicePixelRatioF());
css::datatransfer::dnd::DropTargetDragEnterEvent aEvent;
aEvent.Source = static_cast<css::datatransfer::dnd::XDropTarget*>(m_pDropTarget);
aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDragContext*>(m_pDropTarget);
- aEvent.LocationX = pEvent->pos().x();
- aEvent.LocationY = pEvent->pos().y();
+ aEvent.LocationX = aPos.X();
+ aEvent.LocationY = aPos.Y();
aEvent.DropAction = nUserDropAction;
aEvent.SourceActions = nSourceActions;
@@ -1367,12 +1384,13 @@ void Qt5Frame::handleDrop(QDropEvent* pEvent)
const sal_Int8 nSourceActions = toVclDropActions(pEvent->possibleActions());
const sal_Int8 nUserDropAction
= lcl_getUserDropAction(pEvent, nSourceActions, pEvent->mimeData());
+ const Point aPos = toPoint(pEvent->pos() * devicePixelRatioF());
css::datatransfer::dnd::DropTargetDropEvent aEvent;
aEvent.Source = static_cast<css::datatransfer::dnd::XDropTarget*>(m_pDropTarget);
aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDropContext*>(m_pDropTarget);
- aEvent.LocationX = pEvent->pos().x();
- aEvent.LocationY = pEvent->pos().y();
+ aEvent.LocationX = aPos.X();
+ aEvent.LocationY = aPos.Y();
aEvent.SourceActions = nSourceActions;
aEvent.DropAction = nUserDropAction;
aEvent.Transferable = lcl_getXTransferable(pEvent->mimeData());