[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
rjw
rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:57:26 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit a01b708ef707155cbaab284dc15b6c81c51e33bd
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Mar 14 20:30:26 2002 +0000
Implemented a progressively cache fragment.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@738 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index 86568da..d0ad12a 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,20 @@
+2002-03-14 Richard Williamson <rjw at apple.com>
+
+ Implemented a progressively cache fragment.
+
+ * src/kwq/KWQFontMetrics.mm: (-[KWQSmallLayoutFragment setGlyphRange:]),
+ (-[KWQSmallLayoutFragment setBoundingRect:]), (-[KWQSmallLayoutFragment
+ boundingRect]), (-[KWQLargeLayoutFragment glyphRange]), (-[KWQLargeLayoutFragment
+ setGlyphRange:]), (-[KWQLargeLayoutFragment setBoundingRect:]),
+ (-[KWQLargeLayoutFragment boundingRect]), (-[KWQLargeLayoutFragment compare:]),
+ (+[KWQLayoutInfo drawString:atPoint:withFont:color:]), (+[KWQLayoutInfo
+ drawUnderlineForString:atPoint:withFont:color:]), (+[KWQLayoutInfo
+ _dumpLayoutCache:]), (-[KWQLayoutInfo rectForString:]):
+ * src/kwq/KWQMetrics.h:
+ * src/kwq/KWQTextStorage.h:
+ * src/kwq/KWQTextStorage.mm: (-[KWQTextStorage getFragmentForString:]),
+ (-[KWQTextStorage addFragmentForString:]):
+
2002-03-13 Richard Williamson <rjw at apple.com>
Added font cache. Attempted to reduce size of fragment cache, but
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 86568da..d0ad12a 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,20 @@
+2002-03-14 Richard Williamson <rjw at apple.com>
+
+ Implemented a progressively cache fragment.
+
+ * src/kwq/KWQFontMetrics.mm: (-[KWQSmallLayoutFragment setGlyphRange:]),
+ (-[KWQSmallLayoutFragment setBoundingRect:]), (-[KWQSmallLayoutFragment
+ boundingRect]), (-[KWQLargeLayoutFragment glyphRange]), (-[KWQLargeLayoutFragment
+ setGlyphRange:]), (-[KWQLargeLayoutFragment setBoundingRect:]),
+ (-[KWQLargeLayoutFragment boundingRect]), (-[KWQLargeLayoutFragment compare:]),
+ (+[KWQLayoutInfo drawString:atPoint:withFont:color:]), (+[KWQLayoutInfo
+ drawUnderlineForString:atPoint:withFont:color:]), (+[KWQLayoutInfo
+ _dumpLayoutCache:]), (-[KWQLayoutInfo rectForString:]):
+ * src/kwq/KWQMetrics.h:
+ * src/kwq/KWQTextStorage.h:
+ * src/kwq/KWQTextStorage.mm: (-[KWQTextStorage getFragmentForString:]),
+ (-[KWQTextStorage addFragmentForString:]):
+
2002-03-13 Richard Williamson <rjw at apple.com>
Added font cache. Attempted to reduce size of fragment cache, but
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 86568da..d0ad12a 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,20 @@
+2002-03-14 Richard Williamson <rjw at apple.com>
+
+ Implemented a progressively cache fragment.
+
+ * src/kwq/KWQFontMetrics.mm: (-[KWQSmallLayoutFragment setGlyphRange:]),
+ (-[KWQSmallLayoutFragment setBoundingRect:]), (-[KWQSmallLayoutFragment
+ boundingRect]), (-[KWQLargeLayoutFragment glyphRange]), (-[KWQLargeLayoutFragment
+ setGlyphRange:]), (-[KWQLargeLayoutFragment setBoundingRect:]),
+ (-[KWQLargeLayoutFragment boundingRect]), (-[KWQLargeLayoutFragment compare:]),
+ (+[KWQLayoutInfo drawString:atPoint:withFont:color:]), (+[KWQLayoutInfo
+ drawUnderlineForString:atPoint:withFont:color:]), (+[KWQLayoutInfo
+ _dumpLayoutCache:]), (-[KWQLayoutInfo rectForString:]):
+ * src/kwq/KWQMetrics.h:
+ * src/kwq/KWQTextStorage.h:
+ * src/kwq/KWQTextStorage.mm: (-[KWQTextStorage getFragmentForString:]),
+ (-[KWQTextStorage addFragmentForString:]):
+
2002-03-13 Richard Williamson <rjw at apple.com>
Added font cache. Attempted to reduce size of fragment cache, but
diff --git a/WebCore/kwq/KWQFontMetrics.mm b/WebCore/kwq/KWQFontMetrics.mm
index 6ed1589..5c70d7e 100644
--- a/WebCore/kwq/KWQFontMetrics.mm
+++ b/WebCore/kwq/KWQFontMetrics.mm
@@ -38,7 +38,7 @@
const float LargeNumberForText = 1.0e7;
- at implementation KWQLayoutFragment
+ at implementation KWQSmallLayoutFragment
- (NSRange)glyphRange
{
NSRange glyphRange;
@@ -49,14 +49,15 @@ const float LargeNumberForText = 1.0e7;
return glyphRange;
}
-- (void)setGlyphRangeLength: (unsigned short)l
+- (void)setGlyphRange: (NSRange)r
{
- glyphRangeLength = l;
+ glyphRangeLength = r.length;
}
-- (void)setBoundingRectSize: (NSSize)s
+- (void)setBoundingRect: (NSRect)r
{
- boundingRectSize = s;
+ width = (unsigned short)r.size.width;
+ height = (unsigned short)r.size.height;
}
- (NSRect)boundingRect
@@ -65,7 +66,8 @@ const float LargeNumberForText = 1.0e7;
boundingRect.origin.x = 0;
boundingRect.origin.y = 0;
- boundingRect.size = boundingRectSize;
+ boundingRect.size.width = (float)width;
+ boundingRect.size.height = (float)height;
#ifdef _DEBUG_LAYOUT_FRAGMENT
accessCount++;
@@ -92,6 +94,48 @@ const float LargeNumberForText = 1.0e7;
@end
+ at implementation KWQLargeLayoutFragment
+- (NSRange)glyphRange
+{
+ return glyphRange;
+}
+
+- (void)setGlyphRange: (NSRange)r
+{
+ glyphRange = r;
+}
+
+- (void)setBoundingRect: (NSRect)r
+{
+ boundingRect = r;
+}
+
+- (NSRect)boundingRect
+{
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+ accessCount++;
+#endif
+
+ return boundingRect;
+}
+
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+- (int)accessCount { return accessCount; }
+#endif
+
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+- (NSComparisonResult)compare: (id)val
+{
+ if ([val accessCount] > accessCount)
+ return NSOrderedDescending;
+ else if ([val accessCount] < accessCount)
+ return NSOrderedAscending;
+ return NSOrderedSame;
+}
+
+#endif
+
+ at end
static NSMutableDictionary *metricsCache = nil;
@@ -107,7 +151,7 @@ static NSMutableDictionary *metricsCache = nil;
KWQTextStorage *storage = [layoutInfo textStorage];
if (manager != nil){
- KWQLayoutFragment *frag = [storage getFragmentForString: (NSString *)string];
+ id <KWQLayoutFragment> frag = [storage getFragmentForString: (NSString *)string];
[layoutInfo setColor: color];
[layoutInfo setFont: font];
@@ -124,7 +168,7 @@ static NSMutableDictionary *metricsCache = nil;
KWQTextStorage *storage = [layoutInfo textStorage];
if (manager != nil){
- KWQLayoutFragment *frag = [storage getFragmentForString: (NSString *)string];
+ id <KWQLayoutFragment>frag = [storage getFragmentForString: (NSString *)string];
[layoutInfo setColor: color];
[layoutInfo setFont: font];
@@ -141,7 +185,7 @@ static NSMutableDictionary *metricsCache = nil;
int i, count;
NSArray *stringKeys;
NSString *string;
- KWQLayoutFragment *fragment;
+ id KWQLayoutFragment>fragment;
if (fragCache == nil){
fprintf (stdout, "Fragment cache empty\n");
@@ -230,7 +274,7 @@ static NSMutableDictionary *metricsCache = nil;
- (NSRect)rectForString:(NSString *)string
{
- KWQLayoutFragment *cachedFragment, *fragment;
+ id <KWQLayoutFragment> cachedFragment, fragment;
cachedFragment = [textStorage getFragmentForString: string];
if (cachedFragment != nil){
diff --git a/WebCore/kwq/KWQMetrics.h b/WebCore/kwq/KWQMetrics.h
index 75c5ea4..3b499ce 100644
--- a/WebCore/kwq/KWQMetrics.h
+++ b/WebCore/kwq/KWQMetrics.h
@@ -49,25 +49,37 @@
- (NSDictionary *)attributes;
@end
- at interface KWQLayoutFragment : NSObject
+ at protocol KWQLayoutFragment
+- (void)setGlyphRange: (NSRange)r;
+- (NSRange)glyphRange;
+- (void)setBoundingRect: (NSRect)r;
+- (NSRect)boundingRect;
+
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+- (int)accessCount;
+#endif
+
+ at end
+
+ at interface KWQSmallLayoutFragment : NSObject <KWQLayoutFragment>
{
- NSSize boundingRectSize;
+ unsigned short width;
+ unsigned short height;
unsigned short glyphRangeLength; // Is location always zero? Only need length.
#ifdef _DEBUG_LAYOUT_FRAGMENT
int accessCount;
#endif
}
+ at end
-
-- (void)setGlyphRangeLength: (unsigned short)l;
-- (NSRange)glyphRange;
-- (void)setBoundingRectSize: (NSSize)s;
-- (NSRect)boundingRect;
-
+ at interface KWQLargeLayoutFragment : NSObject <KWQLayoutFragment>
+{
+ NSRect boundingRect;
+ NSRange glyphRange;
#ifdef _DEBUG_LAYOUT_FRAGMENT
-- (int)accessCount;
+ int accessCount;
#endif
-
+}
@end
#endif
diff --git a/WebCore/kwq/KWQTextStorage.h b/WebCore/kwq/KWQTextStorage.h
index bbb3ae4..3a57bc3 100644
--- a/WebCore/kwq/KWQTextStorage.h
+++ b/WebCore/kwq/KWQTextStorage.h
@@ -40,8 +40,8 @@
- (id)initWithFontAttribute:(NSDictionary *)attrs;
- (void)setAttributes: (NSDictionary *)at;
-- (KWQLayoutFragment *)getFragmentForString: (NSString *)string;
-- (KWQLayoutFragment *)addFragmentForString: (NSString *)string;
+- (id <KWQLayoutFragment>)getFragmentForString: (NSString *)string;
+- (id <KWQLayoutFragment>)addFragmentForString: (NSString *)string;
- (void)setString: (NSString *)dString;
diff --git a/WebCore/kwq/KWQTextStorage.mm b/WebCore/kwq/KWQTextStorage.mm
index 05ae66d..154ec2c 100644
--- a/WebCore/kwq/KWQTextStorage.mm
+++ b/WebCore/kwq/KWQTextStorage.mm
@@ -45,47 +45,71 @@
@implementation KWQTextStorage
-- (KWQLayoutFragment *)getFragmentForString: (NSString *)fragString
+- (id <KWQLayoutFragment>)getFragmentForString: (NSString *)fragString
{
return [fragmentCache objectForKey: fragString];
}
-- (KWQLayoutFragment *)addFragmentForString: (NSString *)fragString
+#ifdef DEBUG_SPACE_OPTIMIZATION
+static int totalMeasurements = 0;
+static int leadingSpace = 0;
+static int trailingSpace = 0;
+#endif
+
+- (id <KWQLayoutFragment>)addFragmentForString: (NSString *)fragString
{
- KWQLayoutFragment *fragment;
+ id <KWQLayoutFragment> fragment;
+ bool useLargeFragment = NO;
if (fragmentCache == nil)
fragmentCache = [[NSMutableDictionary alloc] init];
int fragStringLength = [fragString length];
- fragment = [[KWQLayoutFragment alloc] init];
-
- [fragmentCache setObject: fragment forKey: fragString];
+#ifdef DEBUG_SPACE_OPTIMIZATION
+ totalMeasurements++;
+ if (fragStringLength > 1){
+
+ [fragString rangeOfString: @" " options: NSLiteralSearch range: NSMakeRange (0,1)].location = 0;
+
+ or
+
+ [fragString rangeOfString: @" " options: NSLiteralSearch range: NSMakeRange (fragStringLength,1)].location = fragStringLength
+
+ if ([[fragString substringWithRange:NSMakeRange (fragStringLength-1,1)] isEqual: @" "])
+ trailingSpace++;
+ if ([[fragString substringWithRange:NSMakeRange (0,1)] isEqual: @" "])
+ leadingSpace++;
+ if (totalMeasurements % 500 == 0){
+ fprintf (stdout, "totalMeasurements = %d, trailingSpace = %d, leadingSpace = %d\n", totalMeasurements, trailingSpace, leadingSpace);
+ }
+ }
+#endif
[self setString: fragString];
NSRange range = NSMakeRange (0, fragStringLength);
NSRange glyphRange = [_layoutManager glyphRangeForCharacterRange:range actualCharacterRange:nil];
-
- if (glyphRange.location != 0){
- [NSException raise:@"OPTIMIZATION ASSUMPTION VIOLATED" format:@"glyphRange.location != 0"];
- }
-
- if (glyphRange.length > UINT16_MAX){
- [NSException raise:@"OPTIMIZATION ASSUMPTION VIOLATED" format:@"glyphRange.length > UINT16_MAX"];
- }
-
- [fragment setGlyphRangeLength: glyphRange.length];
-
NSRect boundingRect = [_layoutManager boundingRectForGlyphRange: glyphRange inTextContainer: [KWQTextContainer sharedInstance]];
if (boundingRect.origin.x != 0 || boundingRect.origin.y != 0){
[NSException raise:@"OPTIMIZATION ASSUMPTION VIOLATED" format:@"bounding rect origin not 0,0"];
}
-
- [fragment setBoundingRectSize: boundingRect.size];
+ if (glyphRange.location != 0 ||
+ glyphRange.length > UINT16_MAX ||
+ boundingRect.size.width > (float)UINT16_MAX ||
+ boundingRect.size.height > (float)UINT16_MAX){
+ useLargeFragment = YES;
+ }
+ if (useLargeFragment)
+ fragment = [[KWQLargeLayoutFragment alloc] init];
+ else
+ fragment = [[KWQSmallLayoutFragment alloc] init];
+
+ [fragment setGlyphRange: glyphRange];
+ [fragment setBoundingRect: boundingRect];
+ [fragmentCache setObject: fragment forKey: fragString];
[fragment release];
return fragment;
diff --git a/WebCore/src/kwq/KWQFontMetrics.mm b/WebCore/src/kwq/KWQFontMetrics.mm
index 6ed1589..5c70d7e 100644
--- a/WebCore/src/kwq/KWQFontMetrics.mm
+++ b/WebCore/src/kwq/KWQFontMetrics.mm
@@ -38,7 +38,7 @@
const float LargeNumberForText = 1.0e7;
- at implementation KWQLayoutFragment
+ at implementation KWQSmallLayoutFragment
- (NSRange)glyphRange
{
NSRange glyphRange;
@@ -49,14 +49,15 @@ const float LargeNumberForText = 1.0e7;
return glyphRange;
}
-- (void)setGlyphRangeLength: (unsigned short)l
+- (void)setGlyphRange: (NSRange)r
{
- glyphRangeLength = l;
+ glyphRangeLength = r.length;
}
-- (void)setBoundingRectSize: (NSSize)s
+- (void)setBoundingRect: (NSRect)r
{
- boundingRectSize = s;
+ width = (unsigned short)r.size.width;
+ height = (unsigned short)r.size.height;
}
- (NSRect)boundingRect
@@ -65,7 +66,8 @@ const float LargeNumberForText = 1.0e7;
boundingRect.origin.x = 0;
boundingRect.origin.y = 0;
- boundingRect.size = boundingRectSize;
+ boundingRect.size.width = (float)width;
+ boundingRect.size.height = (float)height;
#ifdef _DEBUG_LAYOUT_FRAGMENT
accessCount++;
@@ -92,6 +94,48 @@ const float LargeNumberForText = 1.0e7;
@end
+ at implementation KWQLargeLayoutFragment
+- (NSRange)glyphRange
+{
+ return glyphRange;
+}
+
+- (void)setGlyphRange: (NSRange)r
+{
+ glyphRange = r;
+}
+
+- (void)setBoundingRect: (NSRect)r
+{
+ boundingRect = r;
+}
+
+- (NSRect)boundingRect
+{
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+ accessCount++;
+#endif
+
+ return boundingRect;
+}
+
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+- (int)accessCount { return accessCount; }
+#endif
+
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+- (NSComparisonResult)compare: (id)val
+{
+ if ([val accessCount] > accessCount)
+ return NSOrderedDescending;
+ else if ([val accessCount] < accessCount)
+ return NSOrderedAscending;
+ return NSOrderedSame;
+}
+
+#endif
+
+ at end
static NSMutableDictionary *metricsCache = nil;
@@ -107,7 +151,7 @@ static NSMutableDictionary *metricsCache = nil;
KWQTextStorage *storage = [layoutInfo textStorage];
if (manager != nil){
- KWQLayoutFragment *frag = [storage getFragmentForString: (NSString *)string];
+ id <KWQLayoutFragment> frag = [storage getFragmentForString: (NSString *)string];
[layoutInfo setColor: color];
[layoutInfo setFont: font];
@@ -124,7 +168,7 @@ static NSMutableDictionary *metricsCache = nil;
KWQTextStorage *storage = [layoutInfo textStorage];
if (manager != nil){
- KWQLayoutFragment *frag = [storage getFragmentForString: (NSString *)string];
+ id <KWQLayoutFragment>frag = [storage getFragmentForString: (NSString *)string];
[layoutInfo setColor: color];
[layoutInfo setFont: font];
@@ -141,7 +185,7 @@ static NSMutableDictionary *metricsCache = nil;
int i, count;
NSArray *stringKeys;
NSString *string;
- KWQLayoutFragment *fragment;
+ id KWQLayoutFragment>fragment;
if (fragCache == nil){
fprintf (stdout, "Fragment cache empty\n");
@@ -230,7 +274,7 @@ static NSMutableDictionary *metricsCache = nil;
- (NSRect)rectForString:(NSString *)string
{
- KWQLayoutFragment *cachedFragment, *fragment;
+ id <KWQLayoutFragment> cachedFragment, fragment;
cachedFragment = [textStorage getFragmentForString: string];
if (cachedFragment != nil){
diff --git a/WebCore/src/kwq/KWQMetrics.h b/WebCore/src/kwq/KWQMetrics.h
index 75c5ea4..3b499ce 100644
--- a/WebCore/src/kwq/KWQMetrics.h
+++ b/WebCore/src/kwq/KWQMetrics.h
@@ -49,25 +49,37 @@
- (NSDictionary *)attributes;
@end
- at interface KWQLayoutFragment : NSObject
+ at protocol KWQLayoutFragment
+- (void)setGlyphRange: (NSRange)r;
+- (NSRange)glyphRange;
+- (void)setBoundingRect: (NSRect)r;
+- (NSRect)boundingRect;
+
+#ifdef _DEBUG_LAYOUT_FRAGMENT
+- (int)accessCount;
+#endif
+
+ at end
+
+ at interface KWQSmallLayoutFragment : NSObject <KWQLayoutFragment>
{
- NSSize boundingRectSize;
+ unsigned short width;
+ unsigned short height;
unsigned short glyphRangeLength; // Is location always zero? Only need length.
#ifdef _DEBUG_LAYOUT_FRAGMENT
int accessCount;
#endif
}
+ at end
-
-- (void)setGlyphRangeLength: (unsigned short)l;
-- (NSRange)glyphRange;
-- (void)setBoundingRectSize: (NSSize)s;
-- (NSRect)boundingRect;
-
+ at interface KWQLargeLayoutFragment : NSObject <KWQLayoutFragment>
+{
+ NSRect boundingRect;
+ NSRange glyphRange;
#ifdef _DEBUG_LAYOUT_FRAGMENT
-- (int)accessCount;
+ int accessCount;
#endif
-
+}
@end
#endif
diff --git a/WebCore/src/kwq/KWQTextStorage.h b/WebCore/src/kwq/KWQTextStorage.h
index bbb3ae4..3a57bc3 100644
--- a/WebCore/src/kwq/KWQTextStorage.h
+++ b/WebCore/src/kwq/KWQTextStorage.h
@@ -40,8 +40,8 @@
- (id)initWithFontAttribute:(NSDictionary *)attrs;
- (void)setAttributes: (NSDictionary *)at;
-- (KWQLayoutFragment *)getFragmentForString: (NSString *)string;
-- (KWQLayoutFragment *)addFragmentForString: (NSString *)string;
+- (id <KWQLayoutFragment>)getFragmentForString: (NSString *)string;
+- (id <KWQLayoutFragment>)addFragmentForString: (NSString *)string;
- (void)setString: (NSString *)dString;
diff --git a/WebCore/src/kwq/KWQTextStorage.mm b/WebCore/src/kwq/KWQTextStorage.mm
index 05ae66d..154ec2c 100644
--- a/WebCore/src/kwq/KWQTextStorage.mm
+++ b/WebCore/src/kwq/KWQTextStorage.mm
@@ -45,47 +45,71 @@
@implementation KWQTextStorage
-- (KWQLayoutFragment *)getFragmentForString: (NSString *)fragString
+- (id <KWQLayoutFragment>)getFragmentForString: (NSString *)fragString
{
return [fragmentCache objectForKey: fragString];
}
-- (KWQLayoutFragment *)addFragmentForString: (NSString *)fragString
+#ifdef DEBUG_SPACE_OPTIMIZATION
+static int totalMeasurements = 0;
+static int leadingSpace = 0;
+static int trailingSpace = 0;
+#endif
+
+- (id <KWQLayoutFragment>)addFragmentForString: (NSString *)fragString
{
- KWQLayoutFragment *fragment;
+ id <KWQLayoutFragment> fragment;
+ bool useLargeFragment = NO;
if (fragmentCache == nil)
fragmentCache = [[NSMutableDictionary alloc] init];
int fragStringLength = [fragString length];
- fragment = [[KWQLayoutFragment alloc] init];
-
- [fragmentCache setObject: fragment forKey: fragString];
+#ifdef DEBUG_SPACE_OPTIMIZATION
+ totalMeasurements++;
+ if (fragStringLength > 1){
+
+ [fragString rangeOfString: @" " options: NSLiteralSearch range: NSMakeRange (0,1)].location = 0;
+
+ or
+
+ [fragString rangeOfString: @" " options: NSLiteralSearch range: NSMakeRange (fragStringLength,1)].location = fragStringLength
+
+ if ([[fragString substringWithRange:NSMakeRange (fragStringLength-1,1)] isEqual: @" "])
+ trailingSpace++;
+ if ([[fragString substringWithRange:NSMakeRange (0,1)] isEqual: @" "])
+ leadingSpace++;
+ if (totalMeasurements % 500 == 0){
+ fprintf (stdout, "totalMeasurements = %d, trailingSpace = %d, leadingSpace = %d\n", totalMeasurements, trailingSpace, leadingSpace);
+ }
+ }
+#endif
[self setString: fragString];
NSRange range = NSMakeRange (0, fragStringLength);
NSRange glyphRange = [_layoutManager glyphRangeForCharacterRange:range actualCharacterRange:nil];
-
- if (glyphRange.location != 0){
- [NSException raise:@"OPTIMIZATION ASSUMPTION VIOLATED" format:@"glyphRange.location != 0"];
- }
-
- if (glyphRange.length > UINT16_MAX){
- [NSException raise:@"OPTIMIZATION ASSUMPTION VIOLATED" format:@"glyphRange.length > UINT16_MAX"];
- }
-
- [fragment setGlyphRangeLength: glyphRange.length];
-
NSRect boundingRect = [_layoutManager boundingRectForGlyphRange: glyphRange inTextContainer: [KWQTextContainer sharedInstance]];
if (boundingRect.origin.x != 0 || boundingRect.origin.y != 0){
[NSException raise:@"OPTIMIZATION ASSUMPTION VIOLATED" format:@"bounding rect origin not 0,0"];
}
-
- [fragment setBoundingRectSize: boundingRect.size];
+ if (glyphRange.location != 0 ||
+ glyphRange.length > UINT16_MAX ||
+ boundingRect.size.width > (float)UINT16_MAX ||
+ boundingRect.size.height > (float)UINT16_MAX){
+ useLargeFragment = YES;
+ }
+ if (useLargeFragment)
+ fragment = [[KWQLargeLayoutFragment alloc] init];
+ else
+ fragment = [[KWQSmallLayoutFragment alloc] init];
+
+ [fragment setGlyphRange: glyphRange];
+ [fragment setBoundingRect: boundingRect];
+ [fragmentCache setObject: fragment forKey: fragString];
[fragment release];
return fragment;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list