diff options
author | m0dB <79429057+m0dB@users.noreply.github.com> | 2023-05-13 14:20:48 +0200 |
---|---|---|
committer | m0dB <79429057+m0dB@users.noreply.github.com> | 2023-05-27 01:28:25 +0200 |
commit | bf72f07bf36764c1fc16df73fe86cbf120892888 (patch) | |
tree | d590c176e6b5fda0efe56182c3d66b42a9116535 | |
parent | 60132d54823a9e9646012943207a36635788bb13 (diff) |
call WGLWidget resizeGL with devicePixelRatio applied, to mimic QGLWidget, use the argument to resizeGL when resizing the waveformrendermark
-rw-r--r-- | src/waveform/renderers/allshader/waveformrendermark.cpp | 29 | ||||
-rw-r--r-- | src/waveform/renderers/allshader/waveformrendermark.h | 4 | ||||
-rw-r--r-- | src/widget/openglwindow.cpp | 4 | ||||
-rw-r--r-- | src/widget/wglwidgetqopengl.cpp | 4 | ||||
-rw-r--r-- | src/widget/wglwidgetqopengl.h | 2 |
5 files changed, 26 insertions, 17 deletions
diff --git a/src/waveform/renderers/allshader/waveformrendermark.cpp b/src/waveform/renderers/allshader/waveformrendermark.cpp index 830642a1f2..4f27e4ba80 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.cpp +++ b/src/waveform/renderers/allshader/waveformrendermark.cpp @@ -53,9 +53,9 @@ void allshader::WaveformRenderMark::initializeGL() { m_textureShader.init(); for (const auto& pMark : m_marks) { - generateMarkImage(pMark); + generateMarkImage(pMark, m_waveformRenderer->getBreadth()); } - generatePlayPosMarkTexture(); + generatePlayPosMarkTexture(m_waveformRenderer->getBreadth()); } void allshader::WaveformRenderMark::drawTexture(float x, float y, QOpenGLTexture* texture) { @@ -172,7 +172,7 @@ void allshader::WaveformRenderMark::paintGL() { } if (pMark->m_image.isNull()) { - generateMarkImage(pMark); + generateMarkImage(pMark, m_waveformRenderer->getBreadth()); } const double samplePosition = pMark->getSamplePosition(); @@ -237,11 +237,11 @@ void allshader::WaveformRenderMark::paintGL() { drawTexture(drawOffset, 0.f, m_pPlayPosMarkTexture.get()); } -void allshader::WaveformRenderMark::generatePlayPosMarkTexture() { +void allshader::WaveformRenderMark::generatePlayPosMarkTexture(float breadth) { float imgwidth; float imgheight; - const float height = m_waveformRenderer->getBreadth(); + const float height = breadth; const float devicePixelRatio = m_waveformRenderer->getDevicePixelRatio(); const float lineX = 5.5f; @@ -316,11 +316,18 @@ void allshader::WaveformRenderMark::drawTriangle(QPainter* painter, painter->fillPath(triangle, fillColor); } -void allshader::WaveformRenderMark::resizeGL(int, int) { +void allshader::WaveformRenderMark::resizeGL(int w, int h) { + const float devicePixelRatio = m_waveformRenderer->getDevicePixelRatio(); + const float breadth = + static_cast<float>( + m_waveformRenderer->getOrientation() == Qt::Vertical ? w + : h) / + devicePixelRatio; + for (const auto& pMark : m_marks) { - generateMarkImage(pMark); + generateMarkImage(pMark, breadth); } - generatePlayPosMarkTexture(); + generatePlayPosMarkTexture(breadth); } void allshader::WaveformRenderMark::onSetTrack() { @@ -373,12 +380,12 @@ void allshader::WaveformRenderMark::checkCuesUpdated() { pMark->m_text = newLabel; int dimBrightThreshold = m_waveformRenderer->getDimBrightThreshold(); pMark->setBaseColor(newColor, dimBrightThreshold); - generateMarkImage(pMark); + generateMarkImage(pMark, m_waveformRenderer->getBreadth()); } } } -void allshader::WaveformRenderMark::generateMarkImage(WaveformMarkPointer pMark) { +void allshader::WaveformRenderMark::generateMarkImage(WaveformMarkPointer pMark, float breadth) { // Load the pixmap from file. // If that succeeds loading the text and stroke is skipped. const float devicePixelRatio = m_waveformRenderer->getDevicePixelRatio(); @@ -463,7 +470,7 @@ void allshader::WaveformRenderMark::generateMarkImage(WaveformMarkPointer pMark) float height; width = 2.f * labelRectWidth + 1.f; - height = m_waveformRenderer->getBreadth(); + height = breadth; pMark->m_image = QImage( static_cast<int>(width * devicePixelRatio), diff --git a/src/waveform/renderers/allshader/waveformrendermark.h b/src/waveform/renderers/allshader/waveformrendermark.h index 32188cd352..4f77e5f821 100644 --- a/src/waveform/renderers/allshader/waveformrendermark.h +++ b/src/waveform/renderers/allshader/waveformrendermark.h @@ -42,8 +42,8 @@ class allshader::WaveformRenderMark final : public QObject, public allshader::Wa private: void checkCuesUpdated(); - void generateMarkImage(WaveformMarkPointer pMark); - void generatePlayPosMarkTexture(); + void generateMarkImage(WaveformMarkPointer pMark, float breadth); + void generatePlayPosMarkTexture(float breadth); void drawTriangle(QPainter* painter, const QBrush& fillColor, diff --git a/src/widget/openglwindow.cpp b/src/widget/openglwindow.cpp index 4e701db1bc..89ea1a9aa9 100644 --- a/src/widget/openglwindow.cpp +++ b/src/widget/openglwindow.cpp @@ -38,7 +38,9 @@ void OpenGLWindow::paintGL() { void OpenGLWindow::resizeGL(int w, int h) { if (m_pWidget) { - m_pWidget->resizeGL(w, h); + // QGLWidget::resizeGL has devicePixelRatio applied, so we mimic the same behaviour + m_pWidget->resizeGL(static_cast<int>(static_cast<float>(w) * devicePixelRatio()), + static_cast<int>(static_cast<float>(h) * devicePixelRatio())); m_dirty = true; } } diff --git a/src/widget/wglwidgetqopengl.cpp b/src/widget/wglwidgetqopengl.cpp index fc7810b3e8..9e5bd33d72 100644 --- a/src/widget/wglwidgetqopengl.cpp +++ b/src/widget/wglwidgetqopengl.cpp @@ -25,8 +25,8 @@ QPaintDevice* WGLWidget::paintDevice() { return m_pOpenGLWindow; } -void WGLWidget::setTrackDropTarget(TrackDropTarget* target) { - m_pTrackDropTarget = target; +void WGLWidget::setTrackDropTarget(TrackDropTarget* pTarget) { + m_pTrackDropTarget = pTarget; } TrackDropTarget* WGLWidget::trackDropTarget() const { diff --git a/src/widget/wglwidgetqopengl.h b/src/widget/wglwidgetqopengl.h index 68b94b7921..7666d823f8 100644 --- a/src/widget/wglwidgetqopengl.h +++ b/src/widget/wglwidgetqopengl.h @@ -40,7 +40,7 @@ class WGLWidget : public QWidget { virtual void resizeGL(int w, int h); virtual void initializeGL(); - void setTrackDropTarget(TrackDropTarget* target); + void setTrackDropTarget(TrackDropTarget* pTarget); TrackDropTarget* trackDropTarget() const; protected: |