More selection fixes

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@8451 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2000-12-27 07:39:25 +00:00
parent 7fdaabcdde
commit afc3dfd686
3 changed files with 36 additions and 10 deletions

View file

@ -3,10 +3,14 @@
* Source/NSAttributedString.m: ([-doubleClickAtIndex:]),
Fixed infinite loop. Added code to cope with double click on the
space between words.
* Source/GSSimpleLayoutManager.m: Implemented
([-glyphIndexForPoint:inTextContainer:fractionOfDistanceThroughGlyph:])
* Source/NSTextView.m: ([-selectionRangeForProposedRange:granularity])
Re-implemented word selection using ([-doubleClickAtIndex:])
([-mouseDown:]) creatre proposed range for selection by merging old
selectin range with new location.
selection range with new location.
Modified ([-characterIndexForPoint:]) to take into account where the
character/glyph was clicked on.
2000-12-24 Fred Kiefer <FredKiefer@gmx.de>

View file

@ -195,8 +195,9 @@ static NSCharacterSet *invSelectionWordGranularitySet;
return NSZeroRect;
}
- (unsigned)glyphIndexForPoint:(NSPoint)point
inTextContainer:(NSTextContainer *)aTextContainer
- (unsigned) glyphIndexForPoint: (NSPoint)point
inTextContainer: (NSTextContainer*)aTextContainer
fractionOfDistanceThroughGlyph: (float*)partialFraction
{
_GNULineLayoutInfo *currentInfo = [_lineLayoutInformation
objectAtIndex:
@ -211,12 +212,22 @@ static NSCharacterSet *invSelectionWordGranularitySet;
float fmax = NSMaxX(rect);
float w1, w2;
if (partialFraction != 0)
{
*partialFraction = 0.0;
}
if (x <= fmin)
return MAX(0, min - 1);
{
return MAX(0, min - 1);
}
if (x >= fmax)
return MAX(0, max);
{
return MAX(0, max);
}
if (range.length == 1)
return min;
{
return min;
}
// this should give a good starting index for binary search
i = (int)((max - min) * (x - fmin) / (fmax - fmin)) + min;
@ -244,6 +255,10 @@ static NSCharacterSet *invSelectionWordGranularitySet;
i = (max + min) / 2;
continue;
}
if (w1 > x)
{
*partialFraction = 1.0 - (w1 - x)/(w1 - w2);
}
return MAX(0, i-1);
}
return MAX(0, min - 1);

View file

@ -3114,12 +3114,19 @@ other than copy/paste or dragging. */
- (unsigned) characterIndexForPoint: (NSPoint) point
{
unsigned glyphIndex;
unsigned index;
float fraction;
glyphIndex = [_layoutManager glyphIndexForPoint: point
inTextContainer: _textContainer];
index = [_layoutManager glyphIndexForPoint: point
inTextContainer: _textContainer
fractionOfDistanceThroughGlyph: &fraction];
return [_layoutManager characterIndexForGlyphAtIndex: glyphIndex];
index = [_layoutManager characterIndexForGlyphAtIndex: index];
if (fraction > 0.5)
{
index++;
}
return index;
}
- (NSRect) rectForCharacterIndex: (unsigned)index