Bug 1448841 - Part 2: Only compute the highest z-index for overlay scrollbars. r?mstange draft
authorMatt Woodrow <mwoodrow@mozilla.com>
Thu, 29 Mar 2018 23:01:21 +1300
changeset 774656 6f8115aa6e465409665124a7f4c0a5051d1b8bb8
parent 774655 14e8ca24bdb460892308c94f10473cb03c35f4ea
child 774657 26ed5bc615c6b3cc0481360ee281b033e245b8e6
push id104469
push usermwoodrow@mozilla.com
push dateThu, 29 Mar 2018 10:04:03 +0000
reviewersmstange
bugs1448841
milestone61.0a1
Bug 1448841 - Part 2: Only compute the highest z-index for overlay scrollbars. r?mstange MozReview-Commit-ID: KFw4dbdCHMf
layout/generic/nsGfxScrollFrame.cpp
--- a/layout/generic/nsGfxScrollFrame.cpp
+++ b/layout/generic/nsGfxScrollFrame.cpp
@@ -3042,16 +3042,17 @@ AppendInternalItemToTop(const nsDisplayL
   } else {
     aLists.Content()->AppendToTop(aItem);
   }
 }
 
 static const uint32_t APPEND_OWN_LAYER = 0x1;
 static const uint32_t APPEND_POSITIONED = 0x2;
 static const uint32_t APPEND_SCROLLBAR_CONTAINER = 0x4;
+static const uint32_t APPEND_OVERLAY = 0x8;
 
 static void
 AppendToTop(nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists,
             nsDisplayList* aSource, nsIFrame* aSourceFrame, uint32_t aFlags)
 {
   if (aSource->IsEmpty())
     return;
 
@@ -3076,17 +3077,20 @@ AppendToTop(nsDisplayListBuilder* aBuild
   } else {
     newItem = MakeDisplayItem<nsDisplayWrapList>(aBuilder, aSourceFrame, aSource, asr);
   }
 
   if (aFlags & APPEND_POSITIONED) {
     // We want overlay scrollbars to always be on top of the scrolled content,
     // but we don't want them to unnecessarily cover overlapping elements from
     // outside our scroll frame.
-    int32_t zIndex = MaxZIndexInList(aLists.PositionedDescendants(), aBuilder);
+    int32_t zIndex = -1;
+    if (aFlags & APPEND_OVERLAY) {
+      zIndex = MaxZIndexInList(aLists.PositionedDescendants(), aBuilder);
+    }
     AppendInternalItemToTop(aLists, newItem, zIndex);
   } else {
     aLists.BorderBackground()->AppendToTop(newItem);
   }
 }
 
 struct HoveredStateComparator
 {
@@ -3195,16 +3199,19 @@ ScrollFrameHelper::AppendScrollPartsTo(n
     }
 
     if (createLayer) {
       appendToTopFlags |= APPEND_OWN_LAYER;
     }
     if (aPositioned) {
       appendToTopFlags |= APPEND_POSITIONED;
     }
+    if (overlayScrollbars) {
+      appendToTopFlags |= APPEND_OVERLAY;
+    }
 
     {
       nsDisplayListBuilder::AutoBuildingDisplayList
         buildingForChild(aBuilder, scrollParts[i],
                          visible + mOuter->GetOffsetTo(scrollParts[i]),
                          dirty + mOuter->GetOffsetTo(scrollParts[i]), true);
       nsDisplayListBuilder::AutoCurrentScrollbarInfoSetter
         infoSetter(aBuilder, scrollTargetId, flags, createLayer);