diff --git a/qrenderdoc/Widgets/CustomPaintWidget.cpp b/qrenderdoc/Widgets/CustomPaintWidget.cpp index 9aae913ce..3ee985590 100644 --- a/qrenderdoc/Widgets/CustomPaintWidget.cpp +++ b/qrenderdoc/Widgets/CustomPaintWidget.cpp @@ -58,6 +58,11 @@ void CustomPaintWidget::resizeEvent(QResizeEvent *e) emit resize(e); } +void CustomPaintWidget::keyPressEvent(QKeyEvent *e) +{ + emit keyPress(e); +} + void CustomPaintWidget::paintEvent(QPaintEvent *e) { if(m_Output) diff --git a/qrenderdoc/Widgets/CustomPaintWidget.h b/qrenderdoc/Widgets/CustomPaintWidget.h index bd730205b..0d646e4b9 100644 --- a/qrenderdoc/Widgets/CustomPaintWidget.h +++ b/qrenderdoc/Widgets/CustomPaintWidget.h @@ -47,12 +47,14 @@ signals: void mouseMove(QMouseEvent *e); void resize(QResizeEvent *e); void mouseWheel(QWheelEvent *e); + void keyPress(QKeyEvent *e); private slots: void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; void wheelEvent(QWheelEvent *e) override; void resizeEvent(QResizeEvent *e) override; + void keyPressEvent(QKeyEvent *e) override; public slots: diff --git a/qrenderdoc/Windows/TextureViewer.cpp b/qrenderdoc/Windows/TextureViewer.cpp index cc403d973..2c470d688 100644 --- a/qrenderdoc/Windows/TextureViewer.cpp +++ b/qrenderdoc/Windows/TextureViewer.cpp @@ -23,6 +23,7 @@ ******************************************************************************/ #include "TextureViewer.h" +#include #include #include #include "Code/CaptureContext.h" @@ -336,6 +337,10 @@ TextureViewer::TextureViewer(CaptureContext *ctx, QWidget *parent) QObject::connect(ui->render, &CustomPaintWidget::mouseWheel, this, &TextureViewer::render_mouseWheel); QObject::connect(ui->render, &CustomPaintWidget::resize, this, &TextureViewer::render_resize); + QObject::connect(ui->render, &CustomPaintWidget::keyPress, this, &TextureViewer::render_keyPress); + + QObject::connect(ui->pixelContext, &CustomPaintWidget::keyPress, this, + &TextureViewer::render_keyPress); QObject::connect(ui->zoomOption->lineEdit(), &QLineEdit::returnPressed, this, &TextureViewer::zoomOption_returnPressed); @@ -1657,6 +1662,62 @@ void TextureViewer::render_resize(QResizeEvent *e) INVOKE_MEMFN(RT_UpdateAndDisplay); } +void TextureViewer::render_keyPress(QKeyEvent *e) +{ + FetchTexture *texptr = m_Ctx->GetTexture(m_TexDisplay.texid); + + if(texptr == NULL) + return; + + if((e->modifiers() & Qt::ControlModifier) && e->key() == Qt::Key_C) + { + QClipboard *clipboard = QApplication::clipboard(); + clipboard->setText(ui->texStatusDim->text() + " | " + ui->statusText->text()); + } + + if(!m_Ctx->LogLoaded()) + return; + + bool nudged = false; + + int increment = 1 << (int)m_TexDisplay.mip; + + if(e->key() == Qt::Key_Up && m_PickedPoint.y() > 0) + { + m_PickedPoint -= QPoint(0, increment); + nudged = true; + } + else if(e->key() == Qt::Key_Down && m_PickedPoint.y() < (int)texptr->height - 1) + { + m_PickedPoint += QPoint(0, increment); + nudged = true; + } + else if(e->key() == Qt::Key_Left && m_PickedPoint.x() > 0) + { + m_PickedPoint -= QPoint(increment, 0); + nudged = true; + } + else if(e->key() == Qt::Key_Right && m_PickedPoint.x() < (int)texptr->height - 1) + { + m_PickedPoint += QPoint(increment, 0); + nudged = true; + } + + if(nudged) + { + m_PickedPoint = QPoint(qBound(0, m_PickedPoint.x(), (int)texptr->width - 1), + qBound(0, m_PickedPoint.y(), (int)texptr->height - 1)); + e->accept(); + + m_Ctx->Renderer()->AsyncInvoke([this](IReplayRenderer *r) { + RT_PickPixelsAndUpdate(r); + RT_UpdateAndDisplay(r); + }); + + UI_UpdateStatusText(); + } +} + float TextureViewer::CurMaxScrollX() { FetchTexture *texptr = m_Ctx->GetTexture(m_TexDisplay.texid);