Bug 1412110 - Make sure we build a wrap list for the caret frame, since it will have multiple display items. r=miko

--HG--
extra : rebase_source : b59ff089835023c96daa1e1bf1c7f5bde6c75f15
This commit is contained in:
Matt Woodrow 2017-11-08 15:32:27 +13:00
Родитель 0cd1c74fe2
Коммит fca4960b0f
2 изменённых файлов: 10 добавлений и 3 удалений

Просмотреть файл

@ -3644,7 +3644,9 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
child->BuildDisplayListForStackingContext(aBuilder, &list, &canSkipWrapList);
wrapListASR = contASRTracker.GetContainerASR();
aBuilder->DisplayCaret(child, &list);
if (aBuilder->DisplayCaret(child, &list)) {
canSkipWrapList = false;
}
} else {
Maybe<nsRect> clipPropClip =
child->GetClipPropClipRect(disp, effects, child->GetSize());
@ -3710,7 +3712,9 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
aBuilder->AdjustWindowDraggingRegion(child);
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
child->BuildDisplayList(aBuilder, pseudoStack);
aBuilder->DisplayCaret(child, pseudoStack.Content());
if (aBuilder->DisplayCaret(child, pseudoStack.Content())) {
canSkipWrapList = false;
}
wrapListASR = contASRTracker.GetContainerASR();
list.AppendToTop(pseudoStack.BorderBackground());

Просмотреть файл

@ -720,11 +720,14 @@ public:
/**
* Display the caret if needed.
*/
void DisplayCaret(nsIFrame* aFrame, nsDisplayList* aList) {
bool DisplayCaret(nsIFrame* aFrame, nsDisplayList* aList)
{
nsIFrame* frame = GetCaretFrame();
if (aFrame == frame) {
frame->DisplayCaret(this, aList);
return true;
}
return false;
}
/**
* Get the frame that the caret is supposed to draw in.