From 796f5ab3281cfe5feefa21e9bbc6717e54c06f0c Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 24 Jan 2020 10:38:31 +0000 Subject: [PATCH] Make sure scintilla margin is updated when text is updated --- qrenderdoc/Windows/ShaderViewer.cpp | 38 +++++++++++++++++------------ qrenderdoc/Windows/ShaderViewer.h | 2 ++ 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index 941f9a594..90a6582ae 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -384,7 +384,7 @@ void ShaderViewer::debugShader(const ShaderBindpointMapping *bind, const ShaderR // read-only applies to us too! m_DisassemblyView->setReadOnly(false); - m_DisassemblyView->setText(disasm.c_str()); + SetTextAndUpdateMargin0(m_DisassemblyView, disasm); m_DisassemblyView->setReadOnly(true); bool preferSourceDebug = false; @@ -886,20 +886,9 @@ ScintillaEdit *ShaderViewer::MakeEditor(const QString &name, const QString &text { ScintillaEdit *ret = new ScintillaEdit(this); - ret->setText(text.toUtf8().data()); - - sptr_t numlines = ret->lineCount(); - - int margin0width = 30; - if(numlines > 1000) - margin0width += 6; - if(numlines > 10000) - margin0width += 6; - - margin0width = int(margin0width * devicePixelRatioF()); + SetTextAndUpdateMargin0(ret, text); ret->setMarginLeft(4.0 * devicePixelRatioF()); - ret->setMarginWidthN(0, margin0width); ret->setMarginWidthN(1, 0); ret->setMarginWidthN(2, 16.0 * devicePixelRatioF()); ret->setObjectName(name); @@ -931,6 +920,23 @@ ScintillaEdit *ShaderViewer::MakeEditor(const QString &name, const QString &text return ret; } +void ShaderViewer::SetTextAndUpdateMargin0(ScintillaEdit *sc, const QString &text) +{ + sc->setText(text.toUtf8().data()); + + sptr_t numlines = sc->lineCount(); + + int margin0width = 30; + if(numlines > 1000) + margin0width += 6; + if(numlines > 10000) + margin0width += 6; + + margin0width = int(margin0width * devicePixelRatioF()); + + sc->setMarginWidthN(0, margin0width); +} + void ShaderViewer::readonly_keyPressed(QKeyEvent *event) { if(event->key() == Qt::Key_F && (event->modifiers() & Qt::ControlModifier)) @@ -1217,7 +1223,7 @@ void ShaderViewer::disassemble_typeChanged(int index) text.assign((const char *)out.result.data(), out.result.size()); m_DisassemblyView->setReadOnly(false); - m_DisassemblyView->setText(text.c_str()); + SetTextAndUpdateMargin0(m_DisassemblyView, text); m_DisassemblyView->setReadOnly(true); m_DisassemblyView->emptyUndoBuffer(); return; @@ -1237,7 +1243,7 @@ void ShaderViewer::disassemble_typeChanged(int index) GUIInvoke::call(this, [this, disasm]() { m_DisassemblyView->setReadOnly(false); - m_DisassemblyView->setText(disasm.c_str()); + SetTextAndUpdateMargin0(m_DisassemblyView, disasm); m_DisassemblyView->setReadOnly(true); m_DisassemblyView->emptyUndoBuffer(); }); @@ -2604,7 +2610,7 @@ void ShaderViewer::ShowErrors(const rdcstr &errors) if(m_Errors) { m_Errors->setReadOnly(false); - m_Errors->setText(errors.c_str()); + SetTextAndUpdateMargin0(m_Errors, errors); m_Errors->setReadOnly(true); if(!errors.isEmpty()) diff --git a/qrenderdoc/Windows/ShaderViewer.h b/qrenderdoc/Windows/ShaderViewer.h index 9b4a7f53b..c8527783f 100644 --- a/qrenderdoc/Windows/ShaderViewer.h +++ b/qrenderdoc/Windows/ShaderViewer.h @@ -252,6 +252,8 @@ private: void addFileList(); ScintillaEdit *MakeEditor(const QString &name, const QString &text, int lang); + void SetTextAndUpdateMargin0(ScintillaEdit *ret, const QString &text); + ScintillaEdit *AddFileScintilla(const QString &name, const QString &text, ShaderEncoding encoding); ScintillaEdit *currentScintilla();