diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index a2e36254c..429566ef2 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -812,6 +812,18 @@ bool RichResourceTextMouseEvent(const QWidget *owner, const QVariant &var, QRect return false; } +QString RichResourceTextFormat(ICaptureContext &ctx, QVariant var) +{ + RichResourceTextInitialise(var); + if(var.userType() == qMetaTypeId()) + return GetTruncatedResourceName(ctx, var.value()); + + // either it's something else and wasn't rich resource, in which case just return the string + // representation, or it's a fully formatted rich resource document, where the cached text will do + // the trick with ResIdTextToString. + return var.toString(); +} + RichTextViewDelegate::RichTextViewDelegate(QAbstractItemView *parent) : m_widget(parent), ForwardingDelegate(parent) { diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 5ebe34eb4..0e1847cf3 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -204,6 +204,10 @@ int RichResourceTextWidthHint(const QWidget *owner, const QFont &font, const QVa bool RichResourceTextMouseEvent(const QWidget *owner, const QVariant &var, QRect rect, const QFont &font, QMouseEvent *event); +// immediately format a variant that may contain rich resource text. For use in places where we +// can't paint rich resource text but we still want to display the string nicely +QString RichResourceTextFormat(ICaptureContext &ctx, QVariant var); + // Register runtime conversions for custom Qt metatypes void RegisterMetatypeConversions(); diff --git a/qrenderdoc/Windows/ShaderViewer.cpp b/qrenderdoc/Windows/ShaderViewer.cpp index 05278df3c..c16435f3b 100644 --- a/qrenderdoc/Windows/ShaderViewer.cpp +++ b/qrenderdoc/Windows/ShaderViewer.cpp @@ -3902,11 +3902,21 @@ void ShaderViewer::updateVariableTooltip() if(var.type != VarType::Unknown) { - QString tooltip = QFormatStr("
%1: %2\n").arg(var.name).arg(RowString(var, 0));
-    QString spacing = QString(var.name.count(), QLatin1Char(' '));
-    for(int i = 1; i < var.rows; i++)
-      tooltip += QFormatStr("%1  %2\n").arg(spacing).arg(RowString(var, i));
-    tooltip += lit("
"); + QString tooltip; + + if(var.type == VarType::ReadOnlyResource || var.type == VarType::ReadWriteResource) + { + tooltip = RichResourceTextFormat(m_Ctx, stringRep(var, 0)); + } + else + { + tooltip = QFormatStr("
%1: %2\n").arg(var.name).arg(RowString(var, 0));
+      QString spacing = QString(var.name.count(), QLatin1Char(' '));
+      for(int i = 1; i < var.rows; i++)
+        tooltip += QFormatStr("%1  %2\n").arg(spacing).arg(RowString(var, i));
+      tooltip += lit("
"); + } + QToolTip::showText(m_TooltipPos, tooltip); return; }