Keep track of the original index of a sequence of moves in one dimension. Pass it to the layout manager when moving the insertion point to prevent drifting.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@15956 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
alexm 2003-02-14 16:58:59 +00:00
parent 1ae44e7270
commit 174f81dd1e
4 changed files with 77 additions and 25 deletions

View file

@ -22,6 +22,9 @@
Author: Pierre-Yves Rivaille <pyrivail@ens-lyon.fr>
Date: September 2002
Extensive reworking: Alexander Malmberg <alexander@malmberg.org>
Date: December 2002 - February 2003
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
@ -723,14 +726,40 @@ added to the selection (1,3).
select: (BOOL)select
{
unsigned int cindex;
int new_direction;
if (direction == GSInsertionPointMoveUp ||
direction == GSInsertionPointMoveDown)
{
new_direction = 2;
}
else if (direction == GSInsertionPointMoveLeft ||
direction == GSInsertionPointMoveRight)
{
new_direction = 1;
}
else
{
new_direction = 0;
}
cindex = [self _movementOrigin];
if (new_direction != _currentInsertionPointMovementDirection ||
!new_direction)
{
_originalInsertionPointCharacterIndex = cindex;
}
cindex = [_layoutManager characterIndexMoving: direction
fromCharacterIndex: cindex
originalCharacterIndex: cindex /* TODO */
originalCharacterIndex: _originalInsertionPointCharacterIndex
distance: distance];
[self _moveTo: cindex
select: select];
/* Setting the selected range will clear out the current direction, but
not the index. Thus, we always set the direction here. */
_currentInsertionPointMovementDirection = new_direction;
}