// EXTERNAL INCLUDES
#include <limits>
+#include <cmath>
#include <memory.h>
#include <dali/public-api/adaptor-framework/key.h>
#include <dali/integration-api/debug.h>
// Set the flag to redo the alignment operation.
mImpl->mOperationsPending = static_cast<OperationsMask>( mImpl->mOperationsPending | ALIGN );
+ if( mImpl->mEventData )
+ {
+ mImpl->mEventData->mUpdateAlignment = true;
+
+ // Update the cursor if it's in editing mode
+ if( EventData::IsEditingState( mImpl->mEventData->mState ) )
+ {
+ mImpl->ChangeState( EventData::EDITING );
+ mImpl->mEventData->mUpdateCursorPosition = true;
+ }
+ }
+
mImpl->RequestRelayout();
}
}
{
mImpl->mModel->mVisualModel->SetTextColor( color );
+ mImpl->mModel->mLogicalModel->mColorRuns.Clear();
+
+ mImpl->mOperationsPending = static_cast<OperationsMask>( mImpl->mOperationsPending | COLOR );
+
mImpl->RequestRelayout();
}
}
bool Controller::SetDefaultLineSpacing( float lineSpacing )
{
- if( std::abs(lineSpacing - mImpl->mLayoutEngine.GetDefaultLineSpacing()) > Math::MACHINE_EPSILON_1000 )
+ if( std::fabs( lineSpacing - mImpl->mLayoutEngine.GetDefaultLineSpacing() ) > Math::MACHINE_EPSILON_1000 )
{
mImpl->mLayoutEngine.SetDefaultLineSpacing(lineSpacing);
mImpl->mRecalculateNaturalSize = true;
void Controller::FitPointSizeforLayout( Size layoutSize )
{
+ const OperationsMask operations = mImpl->mOperationsPending;
+ if( NO_OPERATION != ( UPDATE_LAYOUT_SIZE & operations ) )
+ {
bool actualellipsis = mImpl->mModel->mElideEnabled;
float minPointSize = mImpl->mTextFitMinSize;
float maxPointSize = mImpl->mTextFitMaxSize;
mImpl->mFontDefaults->mFitPointSize = pointSizeArray[bestSizeIndex];
mImpl->mFontDefaults->sizeDefined = true;
ClearFontData();
+ }
}
float Controller::GetHeightForWidth( float width )
// Clear the update info. This info will be set the next time the text is updated.
mImpl->mTextUpdateInfo.Clear();
+ // FullRelayoutNeeded should be true because DoRelayout is MAX_FLOAT, MAX_FLOAT.
+ mImpl->mTextUpdateInfo.mFullRelayoutNeeded = true;
+
mImpl->mUpdateTextDirection = false;
}
// Make sure the index is not out of bound
if ( charactersToGlyph.Count() != glyphsPerCharacter.Count() ||
requestedNumberOfCharacters > charactersToGlyph.Count() ||
- ( lastIndex >= charactersToGlyph.Count() && charactersToGlyph.Count() > 0u ) )
+ ( lastIndex > charactersToGlyph.Count() && charactersToGlyph.Count() > 0u ) )
{
std::string currentText;
GetText( currentText );
// The laid-out lines.
Vector<LineRun>& lines = mImpl->mModel->mVisualModel->mLines;
+ CharacterIndex alignStartIndex = startIndex;
+ Length alignRequestedNumberOfCharacters = requestedNumberOfCharacters;
+
+ // the whole text needs to be full aligned.
+ // If you do not do a full aligned, only the last line of the multiline input is aligned.
+ if( mImpl->mEventData && mImpl->mEventData->mUpdateAlignment )
+ {
+ alignStartIndex = 0u;
+ alignRequestedNumberOfCharacters = mImpl->mModel->mLogicalModel->mText.Count();
+ mImpl->mEventData->mUpdateAlignment = false;
+ }
+
// Need to align with the control's size as the text may contain lines
// starting either with left to right text or right to left.
mImpl->mLayoutEngine.Align( size,
- startIndex,
- requestedNumberOfCharacters,
+ alignStartIndex,
+ alignRequestedNumberOfCharacters,
mImpl->mModel->mHorizontalAlignment,
lines,
mImpl->mModel->mAlignmentOffset,