X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller-relayouter.cpp;h=fa71759c608a90f22e0b8a366ab7386f7521f277;hp=63aa2adaa6de00f3c342c85e47fda1527c9e89b3;hb=dfd3018cbcc4e2a9c61b3cd165a0bd9b538b9d0c;hpb=5075ccc3be07ba0da557493efc026ecb2a5373fe diff --git a/dali-toolkit/internal/text/text-controller-relayouter.cpp b/dali-toolkit/internal/text/text-controller-relayouter.cpp index 63aa2ad..fa71759 100644 --- a/dali-toolkit/internal/text/text-controller-relayouter.cpp +++ b/dali-toolkit/internal/text/text-controller-relayouter.cpp @@ -174,6 +174,64 @@ bool Controller::Relayouter::CheckForTextFit(Controller& controller, float point return true; } +void Controller::Relayouter::FitPointSizeforLayout(Controller& controller, const Size& layoutSize) +{ + Controller::Impl& impl = *controller.mImpl; + + const OperationsMask operations = impl.mOperationsPending; + if( NO_OPERATION != ( UPDATE_LAYOUT_SIZE & operations ) || impl.mTextFitContentSize != layoutSize ) + { + ModelPtr& model = impl.mModel; + + bool actualellipsis = model->mElideEnabled; + float minPointSize = impl.mTextFitMinSize; + float maxPointSize = impl.mTextFitMaxSize; + float pointInterval = impl.mTextFitStepSize; + + model->mElideEnabled = false; + Vector pointSizeArray; + + // check zero value + if( pointInterval < 1.f ) + { + impl.mTextFitStepSize = pointInterval = 1.0f; + } + + pointSizeArray.Reserve( static_cast< unsigned int >( ceil( ( maxPointSize - minPointSize ) / pointInterval ) ) ); + + for( float i = minPointSize; i < maxPointSize; i += pointInterval ) + { + pointSizeArray.PushBack( i ); + } + + pointSizeArray.PushBack( maxPointSize ); + + int bestSizeIndex = 0; + int min = bestSizeIndex + 1; + int max = pointSizeArray.Size() - 1; + while( min <= max ) + { + int destI = ( min + max ) / 2; + + if( CheckForTextFit( controller, pointSizeArray[destI], layoutSize ) ) + { + bestSizeIndex = min; + min = destI + 1; + } + else + { + max = destI - 1; + bestSizeIndex = max; + } + } + + model->mElideEnabled = actualellipsis; + impl.mFontDefaults->mFitPointSize = pointSizeArray[bestSizeIndex]; + impl.mFontDefaults->sizeDefined = true; + controller.ClearFontData(); + } +} + float Controller::Relayouter::GetHeightForWidth(Controller& controller, float width) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "-->Controller::GetHeightForWidth %p width %f\n", &controller, width );