From 1af7d01d9633ea652d3d483d4d6bad4022b769f4 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Mon, 15 Sep 2014 18:20:53 +0200 Subject: [PATCH] fix of resizing regression --- AppKit/CPTextView/CPTextContainer.j | 3 +++ AppKit/CPTextView/CPTypesetter.j | 15 ++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/AppKit/CPTextView/CPTextContainer.j b/AppKit/CPTextView/CPTextContainer.j index 32f153d46..dd199140c 100755 --- a/AppKit/CPTextView/CPTextContainer.j +++ b/AppKit/CPTextView/CPTextContainer.j @@ -80,6 +80,7 @@ CPLineMovesUp = 4; CGSize _size @accessors(property=containerSize) CPLayoutManager _layoutManager @accessors(property=layoutManager); CPTextView _textView @accessors(property=textView); + BOOL _inResizing; } @@ -115,12 +116,14 @@ CPLineMovesUp = 4; if (oldSize.width != _size.width) { + _inResizing = YES; [_layoutManager invalidateLayoutForCharacterRange:CPMakeRange(0, [[_layoutManager textStorage] length]) isSoft:NO actualCharacterRange:NULL]; [_layoutManager _validateLayoutAndGlyphs]; [_textView sizeToFit]; // this is necessary to adopt the height of CPTextView in case of rewrapping + _inResizing = NO; } } diff --git a/AppKit/CPTextView/CPTypesetter.j b/AppKit/CPTextView/CPTypesetter.j index ff304b281..3372269b6 100755 --- a/AppKit/CPTextView/CPTypesetter.j +++ b/AppKit/CPTextView/CPTypesetter.j @@ -70,6 +70,7 @@ function _widthOfStringForFont(aString, aFont) _measuringContextFont = aFont; _measuringContext.font = [aFont cssString]; } + return _measuringContext.measureText(aString); } @@ -188,12 +189,13 @@ var CPSystemTypesetterFactory; - (BOOL)_flushRange:(CPRange)lineRange lineOrigin:(CGPoint)lineOrigin - currentContainerSize:(CGSize)containerSize + currentContainer:(CPTextContainer)aContainer advancements:(CPArray)advancements lineCount:(unsigned)lineCount { var myX = 0, - rect = CGRectMake(lineOrigin.x, lineOrigin.y, _lineWidth, _lineHeight); + rect = CGRectMake(lineOrigin.x, lineOrigin.y, _lineWidth, _lineHeight), + containerSize=aContainer._size; [_layoutManager setTextContainer:_currentTextContainer forGlyphRange:lineRange]; // creates a new lineFragment [_layoutManager setLineFragmentRect:rect forGlyphRange:lineRange usedRect:rect]; @@ -220,6 +222,9 @@ var CPSystemTypesetterFactory; if (!lineCount) // do not rescue on first line return NO; + if (aContainer._inResizing) + return NO; + return ([_layoutManager _rescuingInvalidFragmentsWasPossibleForGlyphRange:lineRange]); } @@ -370,7 +375,7 @@ var CPSystemTypesetterFactory; if (isNewline || isTabStop) { - if ([self _flushRange:lineRange lineOrigin:lineOrigin currentContainerSize:containerSize advancements:advancements lineCount:numLines]) + if ([self _flushRange:lineRange lineOrigin:lineOrigin currentContainer:_currentTextContainer advancements:advancements lineCount:numLines]) return; if (isTabStop) @@ -396,7 +401,7 @@ var CPSystemTypesetterFactory; { _indexOfCurrentContainer++; _indexOfCurrentContainer = MAX(_indexOfCurrentContainer, [[_layoutManager textContainers] count] - 1); - _currentTextContainer = [[_layoutManager textContainers] objectAtIndex: _indexOfCurrentContainer]; + _currentTextContainer = [[_layoutManager textContainers] objectAtIndex:_indexOfCurrentContainer]; } lineOrigin.x = 0; @@ -422,7 +427,7 @@ var CPSystemTypesetterFactory; // this is to "flush" the remaining characters if (lineRange.length) { - [self _flushRange:lineRange lineOrigin:lineOrigin currentContainerSize:containerSize advancements:advancements lineCount:numLines]; + [self _flushRange:lineRange lineOrigin:lineOrigin currentContainer:_currentTextContainer advancements:advancements lineCount:numLines]; [self _fixupLineFragmentsOfCurrentLine] }