# HG changeset patch # User Teemu Piippo # Date 1522149238 -10800 # Node ID eb2d3bc4fc7353801365a0241615ac235b486c9a # Parent 45d8eec8bd52dd3df433c5c987323ba193978367 better representation of fractions and large numbers diff -r 45d8eec8bd52 -r eb2d3bc4fc73 src/basics.cpp --- a/src/basics.cpp Tue Mar 27 13:01:02 2018 +0300 +++ b/src/basics.cpp Tue Mar 27 14:13:58 2018 +0300 @@ -87,3 +87,61 @@ }; return settings; } + +QString largeNumberRep(int number) +{ + if (number < 0) + { + return "-" + largeNumberRep(-number); + } + else + { + QString rep; + + while (number >= 1000) + { + rep = " " + QString::number(number % 1000); + number /= 1000; + } + + return QString::number(number) + rep; + } +} + +static const QString superscripts = "⁰¹²³⁴⁵⁶⁷⁸⁹"; +static const QString subscripts = "₀₁₂₃₄₅₆₇₈₉"; + +static QString customNumberRep(int number, const QString& script, const QString& minus) +{ + if (number < 0) + { + return minus + customNumberRep(-number, script, minus); + } + else + { + QString rep = ""; + for (QChar character : QString::number(number)) + { + if (character >= '0' and character <= '9') + rep += script[character.unicode() - '0']; + else + rep += character; + } + return rep; + } +} + +QString superscript(int number) +{ + return customNumberRep(number, superscripts, "⁻"); +} + +QString subscript(int number) +{ + return customNumberRep(number, subscripts, "₋"); +} + +QString fractionRep(int numerator, int denominator) +{ + return superscript(numerator) + "⁄" + subscript(denominator); +} diff -r 45d8eec8bd52 -r eb2d3bc4fc73 src/basics.h --- a/src/basics.h Tue Mar 27 13:01:02 2018 +0300 +++ b/src/basics.h Tue Mar 27 14:13:58 2018 +0300 @@ -90,6 +90,10 @@ QString formatFileSize(qint64 size); int gcd(int a, int b); QString joinStrings(const QList& values, QString delimeter = " "); +QString largeNumberRep(int number); double roundToDecimals(double value, int decimals); class QSettings& settingsObject(); void simplify(int& numerator, int& denominator); +QString superscript(int number); +QString subscript(int number); +QString fractionRep(int numerator, int denominator); diff -r 45d8eec8bd52 -r eb2d3bc4fc73 src/canvas.cpp --- a/src/canvas.cpp Tue Mar 27 13:01:02 2018 +0300 +++ b/src/canvas.cpp Tue Mar 27 14:13:58 2018 +0300 @@ -57,7 +57,7 @@ // Render triangle count { QPoint renderPoint {4, height() - 4 - metrics.height() - metrics.descent()}; - painter.drawText(renderPoint, format("△ %1", m_document.triangleCount())); + painter.drawText(renderPoint, format("△ %1", largeNumberRep(m_document.triangleCount()))); } // Message log diff -r 45d8eec8bd52 -r eb2d3bc4fc73 src/mainwindow.cpp --- a/src/mainwindow.cpp Tue Mar 27 13:01:02 2018 +0300 +++ b/src/mainwindow.cpp Tue Mar 27 14:13:58 2018 +0300 @@ -839,7 +839,7 @@ int numerator = this->ringToolSegments(); int denominator = this->ringToolDivisions(); simplify (numerator, denominator); - ui.ringToolSegmentsLabel->setText (format ("%1 / %2", numerator, denominator)); + ui.ringToolSegmentsLabel->setText(fractionRep(numerator, denominator)); } // ---------------------------------------------------------------------------------------------------------------------