Bug 1367332 - Don't build image layer if image map is presence. r=mattwoodrow draft
authorMorris Tseng <mtseng@mozilla.com>
Wed, 24 May 2017 16:16:40 +0800
changeset 583565 f33492e46a29306adb817aa299e4c67bb35088b0
parent 583335 96e18bec9fc8a5ce623c16167c12756bbe190d73
child 630105 2727120a511292a0e94457ef8fdd959dfc6859d2
push id60445
push userbmo:mtseng@mozilla.com
push dateWed, 24 May 2017 08:21:25 +0000
reviewersmattwoodrow
bugs1367332
milestone55.0a1
Bug 1367332 - Don't build image layer if image map is presence. r=mattwoodrow MozReview-Commit-ID: 5w43NRlTL6d
layout/generic/nsImageFrame.cpp
layout/painting/nsDisplayList.cpp
--- a/layout/generic/nsImageFrame.cpp
+++ b/layout/generic/nsImageFrame.cpp
@@ -1627,16 +1627,22 @@ nsDisplayImage::GetLayerState(nsDisplayL
   uint32_t flags = aBuilder->ShouldSyncDecodeImages()
                  ? imgIContainer::FLAG_SYNC_DECODE
                  : imgIContainer::FLAG_NONE;
 
   if (!mImage->IsImageContainerAvailable(aManager, flags)) {
     return LAYER_NONE;
   }
 
+  // Image layer doesn't support draw focus ring for image map.
+  nsImageFrame* f = static_cast<nsImageFrame*>(mFrame);
+  if (f->HasImageMap()) {
+    return LAYER_NONE;
+  }
+
   return LAYER_ACTIVE;
 }
 
 
 /* virtual */ nsRegion
 nsDisplayImage::GetOpaqueRegion(nsDisplayListBuilder* aBuilder,
                                 bool* aSnap)
 {
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -4055,16 +4055,24 @@ nsDisplayImageContainer::CanOptimizeToIm
                                 destRect.height / imageHeight);
 
   if (scale.width < 0.34 || scale.height < 0.34) {
     // This would look awful as long as we can't use high-quality downscaling
     // for image layers (bug 803703), so don't turn this into an image layer.
     return false;
   }
 
+  if (mFrame->IsImageFrame()) {
+    // Image layer doesn't support draw focus ring for image map.
+    nsImageFrame* f = static_cast<nsImageFrame*>(mFrame);
+    if (f->HasImageMap()) {
+      return false;
+    }
+  }
+
   return true;
 }
 
 void
 nsDisplayBackgroundColor::ApplyOpacity(nsDisplayListBuilder* aBuilder,
                                        float aOpacity,
                                        const DisplayItemClipChain* aClip)
 {