@@ -751,26 +751,21 @@ static FontRange* AppendFontRange(nsTArray<FontRange>& aFontRanges,
751
751
752
752
/* static */
753
753
uint32_t ContentEventHandler::GetTextLengthInRange (
754
- nsIContent* aContent , uint32_t aXPStartOffset, uint32_t aXPEndOffset,
754
+ const Text& aTextNode , uint32_t aXPStartOffset, uint32_t aXPEndOffset,
755
755
LineBreakType aLineBreakType) {
756
- MOZ_ASSERT (aContent->IsText ());
757
-
758
756
return aLineBreakType == LINE_BREAK_TYPE_NATIVE
759
- ? GetNativeTextLength (*aContent->AsText (), aXPStartOffset,
760
- aXPEndOffset)
757
+ ? GetNativeTextLength (aTextNode, aXPStartOffset, aXPEndOffset)
761
758
: aXPEndOffset - aXPStartOffset;
762
759
}
763
760
764
761
/* static */
765
762
void ContentEventHandler::AppendFontRanges (FontRangeArray& aFontRanges,
766
- nsIContent* aContent ,
763
+ const Text& aTextNode ,
767
764
uint32_t aBaseOffset,
768
765
uint32_t aXPStartOffset,
769
766
uint32_t aXPEndOffset,
770
767
LineBreakType aLineBreakType) {
771
- MOZ_ASSERT (aContent->IsText ());
772
-
773
- nsIFrame* frame = aContent->GetPrimaryFrame ();
768
+ nsIFrame* frame = aTextNode.GetPrimaryFrame ();
774
769
if (!frame) {
775
770
// It is a non-rendered content, create an empty range for it.
776
771
AppendFontRange (aFontRanges, aBaseOffset);
@@ -826,7 +821,7 @@ void ContentEventHandler::AppendFontRanges(FontRangeArray& aFontRanges,
826
821
if (startXPOffset > lastXPEndOffset) {
827
822
// Create range for skipped leading chars.
828
823
AppendFontRange (aFontRanges, baseOffset);
829
- baseOffset += GetTextLengthInRange (aContent , lastXPEndOffset,
824
+ baseOffset += GetTextLengthInRange (aTextNode , lastXPEndOffset,
830
825
startXPOffset, aLineBreakType);
831
826
}
832
827
@@ -848,15 +843,15 @@ void ContentEventHandler::AppendFontRanges(FontRangeArray& aFontRanges,
848
843
uint32_t endXPOffset =
849
844
iter.ConvertSkippedToOriginal (runIter.GetStringEnd ());
850
845
endXPOffset = std::min (frameXPEnd, endXPOffset);
851
- baseOffset += GetTextLengthInRange (aContent , startXPOffset, endXPOffset,
846
+ baseOffset += GetTextLengthInRange (aTextNode , startXPOffset, endXPOffset,
852
847
aLineBreakType);
853
848
lastXPEndOffset = endXPOffset;
854
849
}
855
850
if (lastXPEndOffset < frameXPEnd) {
856
851
// Create range for skipped trailing chars. It also handles case
857
852
// that the whole frame contains only skipped chars.
858
853
AppendFontRange (aFontRanges, baseOffset);
859
- baseOffset += GetTextLengthInRange (aContent , lastXPEndOffset, frameXPEnd,
854
+ baseOffset += GetTextLengthInRange (aTextNode , lastXPEndOffset, frameXPEnd,
860
855
aLineBreakType);
861
856
}
862
857
@@ -880,7 +875,7 @@ nsresult ContentEventHandler::GenerateFlatFontRanges(
880
875
}
881
876
882
877
// baseOffset is the flattened offset of each content node.
883
- int32_t baseOffset = 0 ;
878
+ uint32_t baseOffset = 0 ;
884
879
PreContentIterator preOrderIter;
885
880
nsresult rv =
886
881
preOrderIter.Init (aRawRange.Start ().AsRaw (), aRawRange.End ().AsRaw ());
@@ -897,14 +892,15 @@ nsresult ContentEventHandler::GenerateFlatFontRanges(
897
892
}
898
893
nsIContent* content = node->AsContent ();
899
894
900
- if (content->IsText ()) {
901
- uint32_t startOffset = content != startNode ? 0 : aRawRange.StartOffset ();
902
- uint32_t endOffset =
903
- content != endNode ? content->TextLength () : aRawRange.EndOffset ();
904
- AppendFontRanges (aFontRanges, content, baseOffset, startOffset, endOffset,
905
- aLineBreakType);
906
- baseOffset +=
907
- GetTextLengthInRange (content, startOffset, endOffset, aLineBreakType);
895
+ if (const Text* textNode = Text::FromNode (content)) {
896
+ const uint32_t startOffset =
897
+ textNode != startNode ? 0 : aRawRange.StartOffset ();
898
+ const uint32_t endOffset =
899
+ textNode != endNode ? textNode->TextLength () : aRawRange.EndOffset ();
900
+ AppendFontRanges (aFontRanges, *textNode, baseOffset, startOffset,
901
+ endOffset, aLineBreakType);
902
+ baseOffset += GetTextLengthInRange (*textNode, startOffset, endOffset,
903
+ aLineBreakType);
908
904
} else if (ShouldBreakLineBefore (*content, mRootContent )) {
909
905
if (aFontRanges.IsEmpty ()) {
910
906
MOZ_ASSERT (baseOffset == 0 );
0 commit comments