Plugin snapshot label should take device resolution and inset into account
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 Jan 2013 02:01:02 +0000 (02:01 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 11 Jan 2013 02:01:02 +0000 (02:01 +0000)
https://bugs.webkit.org/show_bug.cgi?id=106619

Reviewed by Simon Fraser.

* rendering/RenderSnapshottedPlugIn.cpp:
(WebCore::RenderSnapshottedPlugIn::paintLabel): Take into account the inset in the label image.
(WebCore::RenderSnapshottedPlugIn::tryToFitStartLabel): Look at the page's device scale, and adjust the label image accordingly.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@139392 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderSnapshottedPlugIn.cpp

index 12630b8..76958af 100644 (file)
@@ -1,3 +1,14 @@
+2013-01-10  Dean Jackson  <dino@apple.com>
+
+        Plugin snapshot label should take device resolution and inset into account
+        https://bugs.webkit.org/show_bug.cgi?id=106619
+
+        Reviewed by Simon Fraser.
+
+        * rendering/RenderSnapshottedPlugIn.cpp:
+        (WebCore::RenderSnapshottedPlugIn::paintLabel): Take into account the inset in the label image.
+        (WebCore::RenderSnapshottedPlugIn::tryToFitStartLabel): Look at the page's device scale, and adjust the label image accordingly.
+
 2013-01-10  James Robinson  <jamesr@chromium.org>
 
         [chromium] Store scrollable layer's contents size for coordinated scrollable layers
index 2b05070..f6280bb 100644 (file)
@@ -42,7 +42,8 @@ namespace WebCore {
 
 static const int autoStartPlugInSizeThresholdWidth = 1;
 static const int autoStartPlugInSizeThresholdHeight = 1;
-static const int startLabelPadding = 0;
+static const int startLabelPadding = 10; // Label should be 10px from edge of box.
+static const int startLabelInset = 20; // But the label is inset from its box also. FIXME: This will be removed when we go to a ShadowDOM approach.
 static const double showLabelAfterMouseOverDelay = 1;
 static const double showLabelAutomaticallyDelay = 3;
 
@@ -178,7 +179,11 @@ void RenderSnapshottedPlugIn::paintLabel(PaintInfo& paintInfo, const LayoutPoint
     if (!labelImage)
         return;
 
-    paintInfo.context->drawImage(labelImage, ColorSpaceDeviceRGB, roundedIntPoint(paintOffset + labelRect.location()), labelImage->rect());
+    // Remember that the labelRect includes the label inset, so we need to adjust for it.
+    paintInfo.context->drawImage(labelImage, ColorSpaceDeviceRGB,
+                                 IntRect(roundedIntPoint(paintOffset + labelRect.location() - IntSize(startLabelInset, startLabelInset)),
+                                         roundedIntSize(labelRect.size() + IntSize(2 * startLabelInset, 2 * startLabelInset))),
+                                 labelImage->rect());
 }
 
 void RenderSnapshottedPlugIn::repaintLabel()
@@ -259,7 +264,14 @@ LayoutRect RenderSnapshottedPlugIn::tryToFitStartLabel(LabelSize size, const Lay
     if (!labelImage)
         return LayoutRect();
 
-    LayoutSize labelSize = labelImage->size();
+    // Assume that the labelImage has been provided to match our device scale.
+    float scaleFactor = 1;
+    if (document()->page())
+        scaleFactor = document()->page()->deviceScaleFactor();
+    IntSize labelImageSize = labelImage->size();
+    labelImageSize.scale(1 / (scaleFactor ? scaleFactor : 1));
+
+    LayoutSize labelSize = labelImageSize - LayoutSize(2 * startLabelInset, 2 * startLabelInset);
     LayoutRect candidateRect(contentBox.maxXMinYCorner() + LayoutSize(-startLabelPadding, startLabelPadding) + LayoutSize(-labelSize.width(), 0), labelSize);
     // The minimum allowed content box size is the label image placed in the center of the box, surrounded by startLabelPadding.
     if (candidateRect.x() < startLabelPadding || candidateRect.maxY() > contentBox.height() - startLabelPadding)