From 48169536f56bc3dc44a3e73c30d762759c7bf47b Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 25 Nov 2016 15:43:25 +0100 Subject: [PATCH] Implement float formatting rules --- qrenderdoc/Code/PersistantConfig.cpp | 7 ++--- qrenderdoc/Code/QRDUtils.cpp | 43 ++++++++++++++++++++++++++++ qrenderdoc/Code/QRDUtils.h | 20 +++++++++---- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/qrenderdoc/Code/PersistantConfig.cpp b/qrenderdoc/Code/PersistantConfig.cpp index 2b342f4dd..f85b32a05 100644 --- a/qrenderdoc/Code/PersistantConfig.cpp +++ b/qrenderdoc/Code/PersistantConfig.cpp @@ -160,12 +160,9 @@ void PersistantConfig::applyValues(const QVariantMap &values) void PersistantConfig::SetupFormatting() { + Formatter::setParams(Formatter_MinFigures, Formatter_MaxFigures, Formatter_NegExp, + Formatter_PosExp); /* - Formatter.MinFigures = Formatter_MinFigures; - Formatter.MaxFigures = Formatter_MaxFigures; - Formatter.ExponentialNegCutoff = Formatter_NegExp; - Formatter.ExponentialPosCutoff = Formatter_PosExp; - PreferredFont = Font_PreferMonospaced ? new System.Drawing.Font("Consolas", 9.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))) diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index e4d48e35c..1bab5b7ff 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -30,6 +30,7 @@ #include #include #include +#include QString ToQStr(const ResourceUsage usage, const GraphicsAPI apitype) { @@ -501,3 +502,45 @@ QTreeWidgetItem *makeTreeNode(const QVariantList &values) return ret; } + +int Formatter::m_minFigures = 2, Formatter::m_maxFigures = 5, Formatter::m_expNegCutoff = 5, + Formatter::m_expPosCutoff = 7; +double Formatter::m_expNegValue = 0.00001; // 10^(-5) +double Formatter::m_expPosValue = 10000000.0; // 10^7 + +void Formatter::setParams(int minFigures, int maxFigures, int expNegCutoff, int expPosCutoff) +{ + m_minFigures = qMax(0, minFigures); + m_maxFigures = qMax(2, maxFigures); + m_expNegCutoff = qMax(0, expNegCutoff); + m_expPosCutoff = qMax(0, expPosCutoff); + + m_expNegValue = qPow(10.0, -m_expNegCutoff); + m_expPosValue = qPow(10.0, m_expPosCutoff); +} + +QString Formatter::Format(double f, bool) +{ + if(f != 0.0 && (qAbs(f) < m_expNegValue || qAbs(f) > m_expPosValue)) + return QString("%1").arg(f, -m_minFigures, 'E', m_maxFigures); + + QString ret = QString("%1").arg(f, 0, 'f', m_maxFigures); + + // trim excess trailing 0s + int decimal = ret.lastIndexOf(QChar('.')); + if(decimal > 0) + { + decimal += m_minFigures; + + const int len = ret.count(); + + int remove = 0; + while(len - remove - 1 > decimal && ret.at(len - remove - 1) == QChar('0')) + remove++; + + if(remove > 0) + ret.chop(remove); + } + + return ret; +} diff --git a/qrenderdoc/Code/QRDUtils.h b/qrenderdoc/Code/QRDUtils.h index 1f35dc1f6..0e985cb8c 100644 --- a/qrenderdoc/Code/QRDUtils.h +++ b/qrenderdoc/Code/QRDUtils.h @@ -349,11 +349,21 @@ QString RowTypeString(const ShaderVariable &v); struct Formatter { - static QString Format(float f) { return QString::number(f); } - static QString Format(double d) { return QString::number(d); } - static QString Format(uint32_t u) { return QString::number(u); } - static QString Format(uint16_t u) { return QString::number(u); } - static QString Format(int32_t i) { return QString::number(i); } + static void setParams(int minFigures, int maxFigures, int expNegCutoff, int expPosCutoff); + + static QString Format(double f, bool hex = false); + static QString Format(uint32_t u, bool hex = false) + { + return QString("%1").arg(u, hex ? 8 : 0, hex ? 16 : 10, QChar('0')); + } + static QString Format(uint16_t u, bool hex = false) + { + return QString("%1").arg(u, hex ? 8 : 0, hex ? 16 : 10, QChar('0')); + } + static QString Format(int32_t i, bool hex = false) { return QString::number(i); } +private: + static int m_minFigures, m_maxFigures, m_expNegCutoff, m_expPosCutoff; + static double m_expNegValue, m_expPosValue; }; bool SaveToJSON(QVariantMap &data, QIODevice &f, const char *magicIdentifier, uint32_t magicVersion);