{
ChangeState( EventData::EDITING );
- const float xPosition = event.p2.mFloat - mAlignmentOffset.x;
- const float yPosition = event.p3.mFloat - mAlignmentOffset.y;
+ const float xPosition = event.p2.mFloat - mEventData->mScrollPosition.x - mAlignmentOffset.x;
+ const float yPosition = event.p3.mFloat - mEventData->mScrollPosition.y - mAlignmentOffset.y;
mEventData->mPrimaryCursorPosition = GetClosestCursorIndex( xPosition,
yPosition );
Gesture::Continuing == state )
{
const Vector2& actualSize = mVisualModel->GetActualSize();
+ const Vector2 currentScroll = mEventData->mScrollPosition;
if( mEventData->mHorizontalScrollingEnabled )
{
mEventData->mScrollPosition.y = 0.f;
}
}
+
+ if( mEventData->mDecorator )
+ {
+ mEventData->mDecorator->UpdatePositions( mEventData->mScrollPosition - currentScroll );
+ }
}
}
if( GRAB_HANDLE_PRESSED == state )
{
- float xPosition = event.p2.mFloat + mEventData->mScrollPosition.x;
- float yPosition = event.p3.mFloat + mEventData->mScrollPosition.y;
+ // The event.p2 and event.p3 are in decorator coords. Need to transforms to text coords.
+ const float xPosition = event.p2.mFloat - mEventData->mScrollPosition.x - mAlignmentOffset.x;
+ const float yPosition = event.p3.mFloat - mEventData->mScrollPosition.y - mAlignmentOffset.y;
- mEventData->mPrimaryCursorPosition = GetClosestCursorIndex( xPosition,
- yPosition );
+ mEventData->mPrimaryCursorPosition = GetClosestCursorIndex( xPosition, yPosition );
UpdateCursorPosition();
if( count )
{
- float primaryX = positions[0].x;
- float secondaryX = positions[count-1].x + glyphs[count-1].width;
+ float primaryX = positions[0].x + mEventData->mScrollPosition.x;
+ float secondaryX = positions[count-1].x + glyphs[count-1].width + mEventData->mScrollPosition.x;
// TODO - multi-line selection
const Vector<LineRun>& lines = mVisualModel->mLines;
float height = lines.Count() ? lines[0].ascender + -lines[0].descender : 0.0f;
- mEventData->mDecorator->SetPosition( PRIMARY_SELECTION_HANDLE, primaryX, 0.0f, height );
- mEventData->mDecorator->SetPosition( SECONDARY_SELECTION_HANDLE, secondaryX, 0.0f, height );
+ mEventData->mDecorator->SetPosition( PRIMARY_SELECTION_HANDLE, primaryX, mEventData->mScrollPosition.y, height );
+ mEventData->mDecorator->SetPosition( SECONDARY_SELECTION_HANDLE, secondaryX, mEventData->mScrollPosition.y, height );
mEventData->mDecorator->ClearHighlights();
- mEventData->mDecorator->AddHighlight( primaryX, 0.0f, secondaryX, height );
+ mEventData->mDecorator->AddHighlight( primaryX, mEventData->mScrollPosition.y, secondaryX, height + mEventData->mScrollPosition.y );
}
}
return logicalIndex;
}
- // Transform to visual model coords
- visualX -= mEventData->mScrollPosition.x;
- visualY -= mEventData->mScrollPosition.y;
-
// Find which line is closest
const LineIndex lineIndex = GetClosestLine( visualY );
const LineRun& line = mVisualModel->mLines[lineIndex];
cursorInfo );
mEventData->mDecorator->SetPosition( PRIMARY_CURSOR,
- cursorInfo.primaryPosition.x,
- cursorInfo.primaryPosition.y,
+ cursorInfo.primaryPosition.x + mEventData->mScrollPosition.x + mAlignmentOffset.x,
+ cursorInfo.primaryPosition.y + mEventData->mScrollPosition.y + mAlignmentOffset.y,
cursorInfo.primaryCursorHeight,
cursorInfo.lineHeight );
{
mEventData->mDecorator->SetActiveCursor( ACTIVE_CURSOR_BOTH );
mEventData->mDecorator->SetPosition( SECONDARY_CURSOR,
- cursorInfo.secondaryPosition.x,
- cursorInfo.secondaryPosition.y,
+ cursorInfo.secondaryPosition.x + mEventData->mScrollPosition.x + mAlignmentOffset.x,
+ cursorInfo.secondaryPosition.y + mEventData->mScrollPosition.y + mAlignmentOffset.y,
cursorInfo.secondaryCursorHeight,
cursorInfo.lineHeight );
}