From ac885b18822cff3fd309cdf6b7ba9bf50d5161b0 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 19 Jun 2017 15:27:36 +0100 Subject: [PATCH] Fix handling for a couple of cases where we need device pixel co-ords * When interacting with the C++ UI we have to use device pixels, so multiply/divide by the device pixel ratio. --- qrenderdoc/Windows/BufferViewer.cpp | 2 ++ qrenderdoc/Windows/TextureViewer.cpp | 35 ++++++++++++++++++---------- qrenderdoc/Windows/TextureViewer.h | 3 +++ 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index e997816cc..69b864d78 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -2384,6 +2384,8 @@ void BufferViewer::render_clicked(QMouseEvent *e) QPoint curpos = e->pos(); + curpos *= ui->render->devicePixelRatioF(); + if((e->buttons() & Qt::RightButton) && m_Output) { m_Ctx.Replay().AsyncInvoke(lit("PickVertex"), [this, curpos](IReplayController *r) { diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index 9b7c2fbe1..7afac084d 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -2171,8 +2171,10 @@ void TextureViewer::render_mouseMove(QMouseEvent *e) if(m_Output == NULL) return; - m_CurHoverPixel.setX(int(((float)e->x() - m_TexDisplay.offx) / m_TexDisplay.scale)); - m_CurHoverPixel.setY(int(((float)e->y() - m_TexDisplay.offy) / m_TexDisplay.scale)); + m_CurHoverPixel.setX(int((float(e->x() * ui->render->devicePixelRatio()) - m_TexDisplay.offx) / + m_TexDisplay.scale)); + m_CurHoverPixel.setY(int((float(e->y() * ui->render->devicePixelRatio()) - m_TexDisplay.offy) / + m_TexDisplay.scale)); if(m_TexDisplay.texid != ResourceId()) { @@ -2316,7 +2318,7 @@ float TextureViewer::CurMaxScrollX() if(texptr != NULL) size = QSizeF(texptr->width, texptr->height); - return ui->render->width() - size.width() * m_TexDisplay.scale; + return realRenderWidth() - size.width() * m_TexDisplay.scale; } float TextureViewer::CurMaxScrollY() @@ -2328,7 +2330,7 @@ float TextureViewer::CurMaxScrollY() if(texptr != NULL) size = QSizeF(texptr->width, texptr->height); - return ui->render->height() - size.height() * m_TexDisplay.scale; + return realRenderHeight() - size.height() * m_TexDisplay.scale; } QPoint TextureViewer::getScrollPosition() @@ -2371,7 +2373,7 @@ void TextureViewer::UI_CalcScrollbars() size = QSizeF(texptr->width, texptr->height); } - if((int)floor(size.width() * m_TexDisplay.scale) <= ui->render->width()) + if((int)floor(size.width() * m_TexDisplay.scale) <= realRenderWidth()) { ui->renderHScroll->setEnabled(false); } @@ -2379,13 +2381,12 @@ void TextureViewer::UI_CalcScrollbars() { ui->renderHScroll->setEnabled(true); - ui->renderHScroll->setMaximum( - (int)ceil(size.width() * m_TexDisplay.scale - (float)ui->render->width())); + ui->renderHScroll->setMaximum((int)ceil(size.width() * m_TexDisplay.scale - realRenderWidth())); ui->renderHScroll->setPageStep(qMax(1, ui->renderHScroll->maximum() / 6)); ui->renderHScroll->setSingleStep(int(m_TexDisplay.scale)); } - if((int)floor(size.height() * m_TexDisplay.scale) <= ui->render->height()) + if((int)floor(size.height() * m_TexDisplay.scale) <= realRenderHeight()) { ui->renderVScroll->setEnabled(false); } @@ -2393,8 +2394,7 @@ void TextureViewer::UI_CalcScrollbars() { ui->renderVScroll->setEnabled(true); - ui->renderVScroll->setMaximum( - (int)ceil(size.height() * m_TexDisplay.scale - (float)ui->render->height())); + ui->renderVScroll->setMaximum((int)ceil(size.height() * m_TexDisplay.scale - realRenderHeight())); ui->renderVScroll->setPageStep(qMax(1, ui->renderVScroll->maximum() / 6)); ui->renderVScroll->setSingleStep(int(m_TexDisplay.scale)); } @@ -2755,11 +2755,22 @@ float TextureViewer::GetFitScale() if(texptr == NULL) return 1.0f; - float xscale = (float)ui->render->width() / (float)texptr->width; - float yscale = (float)ui->render->height() / (float)texptr->height; + float xscale = (float)realRenderWidth() / (float)texptr->width; + float yscale = (float)realRenderHeight() / (float)texptr->height; + return qMin(xscale, yscale); } +int TextureViewer::realRenderWidth() const +{ + return ui->render->width() * ui->render->devicePixelRatio(); +} + +int TextureViewer::realRenderHeight() const +{ + return ui->render->height() * ui->render->devicePixelRatio(); +} + void TextureViewer::UI_UpdateFittedScale() { if(ui->fitToWindow->isChecked()) diff --git a/qrenderdoc/Windows/TextureViewer.h b/qrenderdoc/Windows/TextureViewer.h index 246ddc20c..055ba4985 100644 --- a/qrenderdoc/Windows/TextureViewer.h +++ b/qrenderdoc/Windows/TextureViewer.h @@ -254,6 +254,9 @@ private: float GetFitScale(); + int realRenderWidth() const; + int realRenderHeight() const; + QPoint getScrollPosition(); void setScrollPosition(const QPoint &pos);