diff --git a/apps/statistics/histogram_controller.cpp b/apps/statistics/histogram_controller.cpp index 70d02ac1d..fcd94ed73 100644 --- a/apps/statistics/histogram_controller.cpp +++ b/apps/statistics/histogram_controller.cpp @@ -90,6 +90,20 @@ Responder * HistogramController::tabController() const { return (parentResponder()->parentResponder()->parentResponder()->parentResponder()); } +void pad(char * buffer, int bufferSize, int * currentNumberOfChar, int maxGlyphLengthWithPadding) { + assert(*currentNumberOfChar <= bufferSize); + size_t currentGlyphLength = UTF8Helper::StringGlyphLength(buffer, *currentNumberOfChar); + bool addedPadding = false; + while (currentGlyphLength < maxGlyphLengthWithPadding && *currentNumberOfChar < bufferSize) { + *currentNumberOfChar = *currentNumberOfChar + UTF8Decoder::CodePointToChars(' ', buffer + *currentNumberOfChar, bufferSize - *currentNumberOfChar); + addedPadding = true; + currentGlyphLength++; + } + if (addedPadding) { + buffer[*currentNumberOfChar-1] = 0; + } +} + void HistogramController::reloadBannerView() { if (selectedSeriesIndex() < 0) { return; @@ -107,7 +121,7 @@ void HistogramController::reloadBannerView() { // Add lower bound if (selectedSeriesIndex() >= 0) { double lowerBound = m_store->startOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex); - numberOfChar += PoincareHelpers::ConvertFloatToText(lowerBound, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(lowerBound, buffer+numberOfChar, bufferSize-numberOfChar, Constant::LargeNumberOfSignificantDigits); } numberOfChar+= UTF8Decoder::CodePointToChars(';', buffer + numberOfChar, bufferSize - numberOfChar); @@ -115,15 +129,12 @@ void HistogramController::reloadBannerView() { // Add upper bound if (selectedSeriesIndex() >= 0) { double upperBound = m_store->endOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex); - numberOfChar += PoincareHelpers::ConvertFloatToText(upperBound, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(upperBound, buffer+numberOfChar, bufferSize-numberOfChar, Constant::LargeNumberOfSignificantDigits); } numberOfChar+= UTF8Decoder::CodePointToChars('[', buffer + numberOfChar, bufferSize - numberOfChar); // Padding - for (int i = numberOfChar; i < k_maxIntervalLegendLength; i++) { - numberOfChar+= UTF8Decoder::CodePointToChars(' ', buffer + numberOfChar, bufferSize - numberOfChar); - } - buffer[k_maxIntervalLegendLength] = 0; + pad(buffer, bufferSize, &numberOfChar, k_maxIntervalLegendLength); m_view.bannerView()->intervalView()->setText(buffer); // Add Size Data @@ -135,13 +146,10 @@ void HistogramController::reloadBannerView() { double size = 0; if (selectedSeriesIndex() >= 0) { size = m_store->heightOfBarAtIndex(selectedSeriesIndex(), *m_selectedBarIndex); - numberOfChar += PoincareHelpers::ConvertFloatToText(size, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(size, buffer+numberOfChar, bufferSize-numberOfChar, Constant::LargeNumberOfSignificantDigits); } // Padding - for (int i = numberOfChar; i < k_maxLegendLength; i++) { - numberOfChar+= UTF8Decoder::CodePointToChars(' ', buffer + numberOfChar, bufferSize - numberOfChar); - } - buffer[k_maxLegendLength] = 0; + pad(buffer, bufferSize, &numberOfChar, k_maxLegendLength); m_view.bannerView()->sizeView()->setText(buffer); // Add Frequency Data @@ -152,13 +160,10 @@ void HistogramController::reloadBannerView() { numberOfChar += legendLength; if (selectedSeriesIndex() >= 0) { double frequency = size/m_store->sumOfOccurrences(selectedSeriesIndex()); - numberOfChar += PoincareHelpers::ConvertFloatToText(frequency, buffer+numberOfChar, PrintFloat::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits); + numberOfChar += PoincareHelpers::ConvertFloatToText(frequency, buffer+numberOfChar, bufferSize - numberOfChar, Constant::LargeNumberOfSignificantDigits); } // Padding - for (int i = numberOfChar; i < k_maxLegendLength; i++) { - numberOfChar+= UTF8Decoder::CodePointToChars(' ', buffer + numberOfChar, bufferSize - numberOfChar); - } - buffer[k_maxLegendLength] = 0; + pad(buffer, bufferSize, &numberOfChar, k_maxLegendLength); m_view.bannerView()->frequencyView()->setText(buffer); m_view.bannerView()->reload();