mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-24 16:20:49 +01:00
[poincare] PrintFloat: take into account the distinction between char
and glyph length in ConvertFloatToText
This commit is contained in:
committed by
LeaNumworks
parent
d6ad694b76
commit
4d593a6149
@@ -53,21 +53,22 @@ char intervalBracket(double value, bool opening) {
|
||||
return std::isinf(value) == opening ? ']' : '[';
|
||||
}
|
||||
|
||||
void writeInterval(char * buffer, int bufferSize, double min, double max, int numberOfSignificantDigits, Preferences::PrintFloatMode mode) {
|
||||
int writeInterval(char * buffer, int bufferSize, double min, double max, int numberOfSignificantDigits, Preferences::PrintFloatMode mode) {
|
||||
int numberOfChar = 0;
|
||||
assert(bufferSize-1 > numberOfChar);
|
||||
buffer[numberOfChar++] = intervalBracket(min, true);
|
||||
int sizeRequiredForFloat = PrintFloat::bufferSizeForFloatsWithPrecision(numberOfSignificantDigits);
|
||||
assert(sizeRequiredForFloat < bufferSize - numberOfChar);
|
||||
numberOfChar += PrintFloat::ConvertFloatToText<double>(min, buffer+numberOfChar, sizeRequiredForFloat, numberOfSignificantDigits, mode);
|
||||
int glyphLengthRequiredForFloat = PrintFloat::glyphLengthForFloatWithPrecision(numberOfSignificantDigits);
|
||||
PrintFloat::TextLengths minLengths = PrintFloat::ConvertFloatToText<double>(min, buffer+numberOfChar, bufferSize - numberOfChar, glyphLengthRequiredForFloat, numberOfSignificantDigits, mode);
|
||||
numberOfChar += minLengths.CharLength;
|
||||
assert(bufferSize > numberOfChar);
|
||||
numberOfChar += strlcpy(buffer+numberOfChar, ",", bufferSize-numberOfChar);
|
||||
assert(sizeRequiredForFloat < bufferSize - numberOfChar);
|
||||
numberOfChar += PrintFloat::ConvertFloatToText<double>(max, buffer+numberOfChar, sizeRequiredForFloat, numberOfSignificantDigits, mode);
|
||||
PrintFloat::TextLengths maxLengths = PrintFloat::ConvertFloatToText<double>(max, buffer+numberOfChar, bufferSize - numberOfChar, glyphLengthRequiredForFloat, numberOfSignificantDigits, mode);
|
||||
numberOfChar += maxLengths.CharLength;
|
||||
assert(bufferSize-1 > numberOfChar);
|
||||
buffer[numberOfChar++] = intervalBracket(max, false);
|
||||
assert(bufferSize > numberOfChar);
|
||||
strlcpy(buffer+numberOfChar, " ", bufferSize-numberOfChar);
|
||||
return minLengths.GlyphLength + maxLengths. GlyphLength + 3 + 1; // Count "[,] " glyphs
|
||||
}
|
||||
|
||||
void ListParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) {
|
||||
@@ -87,9 +88,9 @@ void ListParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
||||
double max = function->tMax();
|
||||
constexpr int bufferSize = BufferTextView::k_maxNumberOfChar;
|
||||
char buffer[bufferSize];
|
||||
writeInterval(buffer, bufferSize, min, max, Preferences::VeryShortNumberOfSignificantDigits, Preferences::sharedPreferences()->displayMode());
|
||||
int numberOfAvailableChar = (m_functionDomain.bounds().width() - m_functionDomain.labelView()->bounds().width() - m_functionDomain.accessoryView()->bounds().width() - TableCell::k_labelMargin - TableCell::k_accessoryMargin)/KDFont::SmallFont->glyphSize().width();
|
||||
if (UTF8Helper::StringGlyphLength(buffer) > numberOfAvailableChar) {
|
||||
int glyphLength = writeInterval(buffer, bufferSize, min, max, Preferences::VeryShortNumberOfSignificantDigits, Preferences::sharedPreferences()->displayMode());
|
||||
int numberOfAvailableGlyphs = (m_functionDomain.bounds().width() - m_functionDomain.labelView()->bounds().width() - m_functionDomain.accessoryView()->bounds().width() - TableCell::k_labelMargin - TableCell::k_accessoryMargin)/KDFont::SmallFont->glyphSize().width();
|
||||
if (glyphLength > numberOfAvailableGlyphs) {
|
||||
writeInterval(buffer, bufferSize, min, max, Preferences::VeryShortNumberOfSignificantDigits-1, Preferences::PrintFloatMode::Scientific);
|
||||
}
|
||||
m_functionDomain.setAccessoryText(buffer);
|
||||
|
||||
Reference in New Issue
Block a user