// INTERNAL INCLUDES
using namespace Dali;
-using namespace std;
namespace
{
TextHighlight::HighlightInfo TextHighlight::CalculateHighlightInfo( std::size_t handlePositionStart, std::size_t handlePositionEnd, Toolkit::TextView::TextLayoutInfo& textLayoutInfo )
{
// At the moment there is no public API to modify the block alignment option.
- const bool blockAlignEnabled = true;
TextHighlight::HighlightInfo newHighlightInfo;
//newHighlightInfo.mQuadList.clear(); // clear last quad information.
float rowTop = rowBottom - rowSize.height;
// Still selected, and block-align mode then set rowRight to max, so it can be clamped afterwards
- if(charSelected && blockAlignEnabled)
+ if(charSelected)
{
rowRight = std::numeric_limits<float>::max();
}
if( charSelected )
{
// if block-align mode then set rowLeft to min, so it can be clamped afterwards
- rowLeft = blockAlignEnabled ? 0.0f : charInfo.mPosition.x - textLayoutInfo.mScrollOffset.x;
+ rowLeft = 0.0f;
rowRight = ( charInfo.mPosition.x - textLayoutInfo.mScrollOffset.x ) + charInfo.mSize.width;
selectionState = SelectionStarted;
}
{
// finished selection.
Vector2 min, max;
- if(lastIt->mIsNewParagraphChar)
+ if(lastIt != end && lastIt->mIsNewParagraphChar)
{
lastIt = std::max( textLayoutInfo.mCharacterLayoutInfoTable.begin(), lastIt - 1 );
}
- const Size rowSize( mTextViewCharacterPositioning.GetRowRectFromCharacterPosition( lastIt - textLayoutInfo.mCharacterLayoutInfoTable.begin(), min, max ) );
- maxRowLeft = std::min(maxRowLeft, min.x);
- maxRowRight = std::max(maxRowRight, max.x);
- float rowBottom = lastIt->mPosition.y - textLayoutInfo.mScrollOffset.y;
- float rowTop = rowBottom - rowSize.height;
- newHighlightInfo.AddQuad( rowLeft, rowTop, rowRight, rowBottom );
+ if( lastIt != end )
+ {
+ const Size rowSize( mTextViewCharacterPositioning.GetRowRectFromCharacterPosition( lastIt - textLayoutInfo.mCharacterLayoutInfoTable.begin(), min, max ) );
+ maxRowLeft = std::min(maxRowLeft, min.x);
+ maxRowRight = std::max(maxRowRight, max.x);
+ float rowBottom = lastIt->mPosition.y - textLayoutInfo.mScrollOffset.y;
+ float rowTop = rowBottom - rowSize.height;
+ newHighlightInfo.AddQuad( rowLeft, rowTop, rowRight, rowBottom );
+ }
}
}
newHighlightInfo.Clamp2D( topLeft, bottomRight );
// For block-align align Further Clamp quads to max left and right extents
- if(blockAlignEnabled)
- {
// BlockAlign: Will adjust highlight to block:
// i.e.
// H[ello] (top row right = max of all rows right)
// [is some]
// [text]
// (common in regular text editors/web browser selection)
-
newHighlightInfo.Clamp2D( Vector2(maxRowLeft, topLeft.y), Vector2(maxRowRight, bottomRight.y ) );
- }
+
}
return newHighlightInfo;