Bug 1286464 part.11 nsTextFrame::GetCharacterRectsInRange() shouldn't compute character rect at the first character in next nsTextFrame r?jfkthame draft
authorMasayuki Nakano <masayuki@d-toybox.com>
Thu, 21 Jul 2016 16:24:37 +0900
changeset 394873 0358bd96836b4297105dbe867127efbb753157c7
parent 394872 f29395f00fd95844559aa2daa18abc0a721baede
child 394874 b124e0a1046d81af949f4842d4228dad6185ae24
push id24655
push usermasayuki@d-toybox.com
push dateMon, 01 Aug 2016 08:00:00 +0000
reviewersjfkthame
bugs1286464
milestone50.0a1
Bug 1286464 part.11 nsTextFrame::GetCharacterRectsInRange() shouldn't compute character rect at the first character in next nsTextFrame r?jfkthame nsTextFrame::GetCharacterRectsInRange() handles a character at the end offset of its content as in it. However, it causes odd result when the caller wants first text rect in the next nsTextFrame. E.g., if end of query range is at the next nsTextFrame's first character, currently, it returns the last character as in same line. So, it should stop handling next frame's first character as in it. MozReview-Commit-ID: 7WteerisrZp
layout/generic/nsTextFrame.cpp
--- a/layout/generic/nsTextFrame.cpp
+++ b/layout/generic/nsTextFrame.cpp
@@ -7317,17 +7317,17 @@ nsTextFrame::GetCharacterRectsInRange(in
   PropertyProvider properties(this, iter, nsTextFrame::eInflated);
   // Don't trim trailing whitespace, we want the caret to appear in the right
   // place if it's positioned there
   properties.InitializeForDisplay(false);
 
   UpdateIteratorFromOffset(properties, aInOffset, iter);
 
   const int32_t kContentEnd = GetContentEnd();
-  const int32_t kEndOffset = std::min(aInOffset + aLength, kContentEnd + 1);
+  const int32_t kEndOffset = std::min(aInOffset + aLength, kContentEnd);
   while (aInOffset < kEndOffset) {
     if (!iter.IsOriginalCharSkipped() &&
         !mTextRun->IsClusterStart(iter.GetSkippedOffset())) {
       FindClusterStart(mTextRun,
                        properties.GetStart().GetOriginalOffset() +
                          properties.GetOriginalLength(),
                        &iter);
     }