Fixed 3524430. This was a regression introduced when we added '-' and '?' to the...
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 8 Jan 2004 23:36:45 +0000 (23:36 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 8 Jan 2004 23:36:45 +0000 (23:36 +0000)
Also backed out workaround for 3521759 as it's no longer needed with correct argument passing to ATSUPositionToOffset.

        Reviewed by Hyatt.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):
        (widthForNextCharacter):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@5873 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebTextRenderer.m

index 04076f2ca08bda915919ee049a54a7fef70c2199..0b617e01686508c1f2444b213cafb755da7c4870 100644 (file)
@@ -1,3 +1,15 @@
+2004-01-08  Richard Williamson   <rjw@apple.com>
+
+       Fixed 3524430.  This was a regression introduced when we added '-' and '?' to the word boundary detection.
+
+       Also backed out workaround for 3521759 as it's no longer needed with correct argument passing to ATSUPositionToOffset.
+
+        Reviewed by Hyatt.
+
+        * WebCoreSupport.subproj/WebTextRenderer.m:
+        (-[WebTextRenderer _ATSU_pointToOffset:style:position:reversed:]):
+        (widthForNextCharacter):
+
 2004-01-08  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3522900>: REGRESSION (100-117): Java plug-in description is garbled when displaying Plug-ins.html
index b7453f9f6faba557ea2e3026c604cef11b022b92..eb924b9cb22bfa2e3ace4f1d2aafa3fe1ced6900 100644 (file)
@@ -1588,29 +1588,9 @@ static WebCoreTextRun reverseCharactersInRun(const WebCoreTextRun *run)
         aRun = &swappedRun;
     }
 
-    // Work-around for bug (352175) in ATSUPositionToOffset().  ATSUPositionToOffset will
-    // always return a zero offset if a ATSUTextLayout is created with a non-zero
-    // starting character offset.
-    // The work-around creates a 'sub' run from the run with a starting position
-    // of 0 and creates a ATSUTextLayout with that 'sub' run.
-#define WORKAROUND_3521759 1
-#if WORKAROUND_3521759
-    WebCoreTextRun subRun;
-    if (run->from != 0) {
-        subRun.length = (aRun->length - aRun->from);
-        subRun.from = 0;
-        subRun.to = aRun->to - aRun->from;
-        subRun.characters = (UniChar *)malloc(sizeof(UniChar) * subRun.length);
-        memcpy ((void *)subRun.characters, &aRun->characters[aRun->from], sizeof(UniChar) * subRun.length);
-        aRun = &subRun;
-    }
-    else {
-        subRun.characters = 0;
-    }
-#endif
-    
     layout = [self _createATSUTextLayoutForRun:aRun];
 
+    primaryOffset = aRun->from;
     status = ATSUPositionToOffset(layout, FloatToFixed(x), FloatToFixed(-1), &primaryOffset, &isLeading, &secondaryOffset);
     if (status == noErr){
         offset = (unsigned)primaryOffset;
@@ -1623,12 +1603,7 @@ static WebCoreTextRun reverseCharactersInRun(const WebCoreTextRun *run)
         free ((void *)swappedRun.characters);
     }
 
-#if WORKAROUND_3521759
-    if (subRun.characters != run->characters)
-        free ((void *)subRun.characters);
-#endif
-
-    return offset;
+    return offset - aRun->from;
 }
 
 - (int)_CG_pointToOffset:(const WebCoreTextRun *)run style:(const WebCoreTextStyle *)style position:(int)x reversed:(BOOL)reversed
@@ -1971,6 +1946,12 @@ static float widthForNextCharacter(CharacterWidthIterator *iterator, ATSGlyphRef
     if (!*fontUsed)
         *fontUsed = renderer->font;
 
+    // Force characters that are used to determine word boundaries for the rounding hack
+    // to be integer width, so following words will start on an integer boundary.
+    if (isRoundingHackCharacter(c)) {
+        width = CEIL_TO_INT(width);
+    }
+    
     // Account for letter-spacing
     if (width > 0)
         width += iterator->style->letterSpacing;
@@ -1997,12 +1978,6 @@ static float widthForNextCharacter(CharacterWidthIterator *iterator, ATSGlyphRef
             width += iterator->style->wordSpacing;
     }
 
-    // Force characters that are used to determine word boundaries for the rounding hack
-    // to be integer width, so following words will start on an integer boundary.
-    if (isRoundingHackCharacter(c)) {
-        width = CEIL_TO_INT(width);
-    }
-    
     iterator->runWidthSoFar += width;
 
     // Advance past the character we just dealt with.