#include "function_banner_delegate.h" #include "poincare_helpers.h" #include using namespace Poincare; namespace Shared { void FunctionBannerDelegate::reloadBannerViewForCursorOnFunction(CurveViewCursor * cursor, Ion::Storage::Record record, FunctionStore * functionStore) { CodePoint symbol = functionStore->symbol(); ExpiringPointer function = functionStore->modelForRecord(record); constexpr int bufferSize = k_maxNumberOfCharacters+PrintFloat::bufferSizeForFloatsWithPrecision(Preferences::LargeNumberOfSignificantDigits); char buffer[bufferSize]; const char * space = " "; int numberOfChar = 0; buffer[numberOfChar++] = symbol; assert(numberOfChar <= bufferSize); strlcpy(buffer + numberOfChar, "=", bufferSize - numberOfChar); bannerView()->abscissaSymbol()->setText(buffer); constexpr int precision = Preferences::MediumNumberOfSignificantDigits; numberOfChar = PoincareHelpers::ConvertFloatToText(cursor->x(), buffer, PrintFloat::bufferSizeForFloatsWithPrecision(precision), precision); assert(numberOfChar <= bufferSize); strlcpy(buffer+numberOfChar, space, bufferSize - numberOfChar); bannerView()->abscissaValue()->setText(buffer); numberOfChar = function->nameWithArgument(buffer, bufferSize, symbol); assert(numberOfChar <= bufferSize); numberOfChar += strlcpy(buffer+numberOfChar, "=", bufferSize-numberOfChar); numberOfChar += PoincareHelpers::ConvertFloatToText(cursor->y(), buffer+numberOfChar, bufferSize-numberOfChar, precision); assert(numberOfChar <= bufferSize); strlcpy(buffer+numberOfChar, space, bufferSize-numberOfChar); bannerView()->ordinateView()->setText(buffer); bannerView()->reload(); } }