Diff
Modified: trunk/Source/WebCore/ChangeLog (167215 => 167216)
--- trunk/Source/WebCore/ChangeLog 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebCore/ChangeLog 2014-04-14 08:10:22 UTC (rev 167216)
@@ -1,3 +1,16 @@
+2014-04-14 Tim Horton <timothy_hor...@apple.com>
+
+ Support setting a background color on page overlays
+ https://bugs.webkit.org/show_bug.cgi?id=131600
+
+ Reviewed by Darin Adler.
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::setDocumentOverlayRootLayer):
+ Mark the compositing tree as needing a rebuild when we get a new document-relative
+ overlay layer; otherwise we were depending on something else coming along and
+ requiring a rebuild, which didn't always happen.
+
2014-04-14 Mihnea Ovidenie <mih...@adobe.com>
[CSS Regions] Hit testing doesn't work in video
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (167215 => 167216)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2014-04-14 08:10:22 UTC (rev 167216)
@@ -3819,6 +3819,7 @@
if (m_documentOverlayRootLayer)
m_documentOverlayRootLayer->removeFromParent();
m_documentOverlayRootLayer = documentOverlayRootLayer;
+ setCompositingLayersNeedRebuild(true);
scheduleCompositingLayerUpdate();
}
Modified: trunk/Source/WebKit2/ChangeLog (167215 => 167216)
--- trunk/Source/WebKit2/ChangeLog 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebKit2/ChangeLog 2014-04-14 08:10:22 UTC (rev 167216)
@@ -1,3 +1,42 @@
+2014-04-14 Tim Horton <timothy_hor...@apple.com>
+
+ Support setting a background color on page overlays
+ https://bugs.webkit.org/show_bug.cgi?id=131600
+
+ Reviewed by Darin Adler.
+
+ * WebProcess/WebPage/PageOverlay.cpp:
+ (WebKit::PageOverlay::PageOverlay):
+ (WebKit::PageOverlay::bounds):
+ (WebKit::PageOverlay::startFadeInAnimation):
+ (WebKit::PageOverlay::startFadeOutAnimation):
+ (WebKit::PageOverlay::startFadeAnimation):
+ (WebKit::PageOverlay::fadeAnimationTimerFired):
+ Minor style adjustments.
+ Use more references everywhere.
+
+ (WebKit::PageOverlay::setBackgroundColor):
+ (WebKit::PageOverlay::setNeedsDisplay):
+ * WebProcess/WebPage/PageOverlay.h:
+ (WebKit::PageOverlay::backgroundColor):
+ Keep track of our background color, and push it down to the page overlay controller if we have one.
+
+ * WebProcess/WebPage/PageOverlayController.cpp:
+ (WebKit::updateOverlayGeometry):
+ (WebKit::PageOverlayController::clearPageOverlay):
+ Page overlays will always have the right size, and just use drawsContents to determine
+ whether or not they should tile/have backing store/etc.
+
+ (WebKit::PageOverlayController::installPageOverlay):
+ (WebKit::PageOverlayController::didChangeOverlayBackgroundColor):
+ Set the background color of the layer.
+
+ * WebProcess/WebPage/PageOverlayController.h:
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::WebPage):
+ References!
+
2014-04-13 Andy Estes <aes...@apple.com>
[QuickLook] Move file system-related code into WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp (167215 => 167216)
--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.cpp 2014-04-14 08:10:22 UTC (rev 167216)
@@ -49,13 +49,14 @@
PageOverlay::PageOverlay(Client* client, OverlayType overlayType)
: m_client(client)
- , m_webPage(0)
+ , m_webPage(nullptr)
, m_fadeAnimationTimer(RunLoop::main(), this, &PageOverlay::fadeAnimationTimerFired)
- , m_fadeAnimationStartTime(0.0)
+ , m_fadeAnimationStartTime(0)
, m_fadeAnimationDuration(fadeAnimationDuration)
, m_fadeAnimationType(NoAnimation)
- , m_fractionFadedIn(1.0)
+ , m_fractionFadedIn(1)
, m_overlayType(overlayType)
+ , m_backgroundColor(Color::transparent)
{
}
@@ -101,12 +102,26 @@
void PageOverlay::setFrame(IntRect frame)
{
+ if (m_overrideFrame == frame)
+ return;
+
m_overrideFrame = frame;
if (m_webPage)
- m_webPage->pageOverlayController().didChangeOverlayFrame(this);
+ m_webPage->pageOverlayController().didChangeOverlayFrame(*this);
}
+void PageOverlay::setBackgroundColor(RGBA32 backgroundColor)
+{
+ if (m_backgroundColor == backgroundColor)
+ return;
+
+ m_backgroundColor = backgroundColor;
+
+ if (m_webPage)
+ m_webPage->pageOverlayController().didChangeOverlayBackgroundColor(*this);
+}
+
void PageOverlay::setPage(WebPage* webPage)
{
m_client->willMoveToWebPage(this, webPage);
@@ -118,10 +133,11 @@
void PageOverlay::setNeedsDisplay(const IntRect& dirtyRect)
{
- if (m_webPage) {
- m_webPage->pageOverlayController().setPageOverlayOpacity(this, m_fractionFadedIn);
- m_webPage->pageOverlayController().setPageOverlayNeedsDisplay(this, dirtyRect);
- }
+ if (!m_webPage)
+ return;
+
+ m_webPage->pageOverlayController().setPageOverlayOpacity(*this, m_fractionFadedIn);
+ m_webPage->pageOverlayController().setPageOverlayNeedsDisplay(*this, dirtyRect);
}
void PageOverlay::setNeedsDisplay()
@@ -161,7 +177,7 @@
void PageOverlay::startFadeInAnimation()
{
- m_fractionFadedIn = 0.0;
+ m_fractionFadedIn = 0;
m_fadeAnimationType = FadeInAnimation;
startFadeAnimation();
@@ -169,7 +185,7 @@
void PageOverlay::startFadeOutAnimation()
{
- m_fractionFadedIn = 1.0;
+ m_fractionFadedIn = 1;
m_fadeAnimationType = FadeOutAnimation;
startFadeAnimation();
@@ -184,8 +200,6 @@
void PageOverlay::startFadeAnimation()
{
m_fadeAnimationStartTime = currentTime();
-
- // Start the timer
m_fadeAnimationTimer.startRepeating(1 / fadeAnimationFrameRate);
}
@@ -200,7 +214,7 @@
float fadeAnimationValue = sine * sine;
m_fractionFadedIn = (m_fadeAnimationType == FadeInAnimation) ? fadeAnimationValue : 1 - fadeAnimationValue;
- m_webPage->pageOverlayController().setPageOverlayOpacity(this, m_fractionFadedIn);
+ m_webPage->pageOverlayController().setPageOverlayOpacity(*this, m_fractionFadedIn);
if (animationProgress == 1.0) {
m_fadeAnimationTimer.stop();
@@ -208,16 +222,15 @@
bool wasFadingOut = m_fadeAnimationType == FadeOutAnimation;
m_fadeAnimationType = NoAnimation;
- if (wasFadingOut) {
- // If this was a fade out, go ahead and uninstall the page overlay.
+ // If this was a fade out, go ahead and uninstall the page overlay.
+ if (wasFadingOut)
m_webPage->uninstallPageOverlay(this, PageOverlay::FadeMode::DoNotFade);
- }
}
}
void PageOverlay::clear()
{
- m_webPage->pageOverlayController().clearPageOverlay(this);
+ m_webPage->pageOverlayController().clearPageOverlay(*this);
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h (167215 => 167216)
--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlay.h 2014-04-14 08:10:22 UTC (rev 167216)
@@ -28,6 +28,7 @@
#include "APIObject.h"
#include "WKBase.h"
+#include <WebCore/Color.h>
#include <WebCore/IntRect.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RunLoop.h>
@@ -91,6 +92,9 @@
WebCore::IntRect bounds() const;
WebCore::IntRect frame() const;
void setFrame(WebCore::IntRect);
+
+ WebCore::RGBA32 backgroundColor() const { return m_backgroundColor; }
+ void setBackgroundColor(WebCore::RGBA32);
protected:
explicit PageOverlay(Client*, OverlayType);
@@ -117,6 +121,8 @@
OverlayType m_overlayType;
WebCore::IntRect m_overrideFrame;
+
+ WebCore::RGBA32 m_backgroundColor;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp (167215 => 167216)
--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.cpp 2014-04-14 08:10:22 UTC (rev 167216)
@@ -42,7 +42,7 @@
namespace WebKit {
-PageOverlayController::PageOverlayController(WebPage* webPage)
+PageOverlayController::PageOverlayController(WebPage& webPage)
: m_webPage(webPage)
{
}
@@ -52,14 +52,25 @@
ASSERT(!m_documentOverlayRootLayer);
ASSERT(!m_viewOverlayRootLayer);
- m_documentOverlayRootLayer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
- m_viewOverlayRootLayer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
+ m_documentOverlayRootLayer = GraphicsLayer::create(m_webPage.drawingArea()->graphicsLayerFactory(), this);
+ m_viewOverlayRootLayer = GraphicsLayer::create(m_webPage.drawingArea()->graphicsLayerFactory(), this);
#ifndef NDEBUG
m_documentOverlayRootLayer->setName("Page Overlay container (document-relative)");
m_viewOverlayRootLayer->setName("Page Overlay container (view-relative)");
#endif
}
+static void updateOverlayGeometry(PageOverlay& overlay, GraphicsLayer& graphicsLayer)
+{
+ IntRect overlayFrame = overlay.frame();
+
+ if (overlayFrame.location() == graphicsLayer.position() && overlayFrame.size() == graphicsLayer.size())
+ return;
+
+ graphicsLayer.setPosition(overlayFrame.location());
+ graphicsLayer.setSize(overlayFrame.size());
+}
+
void PageOverlayController::installPageOverlay(PassRefPtr<PageOverlay> pageOverlay, PageOverlay::FadeMode fadeMode)
{
ASSERT(m_documentOverlayRootLayer);
@@ -71,19 +82,20 @@
return;
m_pageOverlays.append(overlay);
- overlay->setPage(m_webPage);
+ overlay->setPage(&m_webPage);
if (fadeMode == PageOverlay::FadeMode::Fade)
overlay->startFadeInAnimation();
- std::unique_ptr<GraphicsLayer> layer = GraphicsLayer::create(m_webPage->drawingArea()->graphicsLayerFactory(), this);
+ std::unique_ptr<GraphicsLayer> layer = GraphicsLayer::create(m_webPage.drawingArea()->graphicsLayerFactory(), this);
layer->setAnchorPoint(FloatPoint3D());
- layer->setPosition(overlay->frame().location());
+ layer->setBackgroundColor(overlay->backgroundColor());
+ updateOverlayGeometry(*overlay, *layer);
#ifndef NDEBUG
layer->setName("Page Overlay content");
#endif
- updateSettingsForLayer(layer.get());
+ updateSettingsForLayer(*layer);
switch (overlay->overlayType()) {
case PageOverlay::OverlayType::View:
@@ -127,61 +139,43 @@
forceSynchronousScrollLayerPositionUpdates = true;
}
- if (Page* page = m_webPage->corePage()) {
+ if (Page* page = m_webPage.corePage()) {
if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
scrollingCoordinator->setForceSynchronousScrollLayerPositionUpdates(forceSynchronousScrollLayerPositionUpdates);
}
#endif
}
-static void updateOverlayGeometry(PageOverlay* overlay, GraphicsLayer* graphicsLayer)
+void PageOverlayController::setPageOverlayNeedsDisplay(PageOverlay& overlay, const WebCore::IntRect& dirtyRect)
{
- if (!graphicsLayer->drawsContent())
- return;
+ ASSERT(m_pageOverlays.contains(&overlay));
+ GraphicsLayer& graphicsLayer = *m_overlayGraphicsLayers.get(&overlay);
- graphicsLayer->setPosition(overlay->frame().location());
- graphicsLayer->setSize(overlay->frame().size());
- graphicsLayer->setNeedsDisplay();
-}
-
-void PageOverlayController::setPageOverlayNeedsDisplay(PageOverlay* overlay, const WebCore::IntRect& dirtyRect)
-{
- GraphicsLayer* graphicsLayer = m_overlayGraphicsLayers.get(overlay);
- if (!graphicsLayer)
- return;
-
- if (!graphicsLayer->drawsContent()) {
- graphicsLayer->setDrawsContent(true);
+ if (!graphicsLayer.drawsContent()) {
+ graphicsLayer.setDrawsContent(true);
updateOverlayGeometry(overlay, graphicsLayer);
}
- graphicsLayer->setNeedsDisplayInRect(dirtyRect);
+ graphicsLayer.setNeedsDisplayInRect(dirtyRect);
}
-void PageOverlayController::setPageOverlayOpacity(PageOverlay* overlay, float opacity)
+void PageOverlayController::setPageOverlayOpacity(PageOverlay& overlay, float opacity)
{
- GraphicsLayer* graphicsLayer = m_overlayGraphicsLayers.get(overlay);
- if (!graphicsLayer)
- return;
-
- graphicsLayer->setOpacity(opacity);
+ ASSERT(m_pageOverlays.contains(&overlay));
+ m_overlayGraphicsLayers.get(&overlay)->setOpacity(opacity);
}
-void PageOverlayController::clearPageOverlay(PageOverlay* overlay)
+void PageOverlayController::clearPageOverlay(PageOverlay& overlay)
{
- GraphicsLayer* graphicsLayer = m_overlayGraphicsLayers.get(overlay);
- if (!graphicsLayer)
- return;
-
- graphicsLayer->setDrawsContent(false);
- graphicsLayer->setSize(IntSize());
+ ASSERT(m_pageOverlays.contains(&overlay));
+ m_overlayGraphicsLayers.get(&overlay)->setDrawsContent(false);
}
void PageOverlayController::didChangeViewSize()
{
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::View)
- updateOverlayGeometry(overlayAndLayer.key, overlayAndLayer.value.get());
+ updateOverlayGeometry(*overlayAndLayer.key, *overlayAndLayer.value);
}
}
@@ -189,14 +183,14 @@
{
for (auto& overlayAndLayer : m_overlayGraphicsLayers) {
if (overlayAndLayer.key->overlayType() == PageOverlay::OverlayType::Document)
- updateOverlayGeometry(overlayAndLayer.key, overlayAndLayer.value.get());
+ updateOverlayGeometry(*overlayAndLayer.key, *overlayAndLayer.value);
}
}
void PageOverlayController::didChangePreferences()
{
for (auto& graphicsLayer : m_overlayGraphicsLayers.values())
- updateSettingsForLayer(graphicsLayer.get());
+ updateSettingsForLayer(*graphicsLayer);
}
void PageOverlayController::didChangeDeviceScaleFactor()
@@ -210,7 +204,7 @@
void PageOverlayController::didChangeExposedRect()
{
- m_webPage->drawingArea()->scheduleCompositingLayerFlush();
+ m_webPage.drawingArea()->scheduleCompositingLayerFlush();
}
void PageOverlayController::didScrollFrame(Frame* frame)
@@ -226,12 +220,12 @@
m_viewOverlayRootLayer->flushCompositingState(visibleRect);
}
-void PageOverlayController::updateSettingsForLayer(GraphicsLayer* layer)
+void PageOverlayController::updateSettingsForLayer(GraphicsLayer& layer)
{
- Settings& settings = m_webPage->corePage()->settings();
- layer->setAcceleratesDrawing(settings.acceleratedDrawingEnabled());
- layer->setShowDebugBorder(settings.showDebugBorders());
- layer->setShowRepaintCounter(settings.showRepaintCounter());
+ Settings& settings = m_webPage.corePage()->settings();
+ layer.setAcceleratesDrawing(settings.acceleratedDrawingEnabled());
+ layer.setShowDebugBorder(settings.showDebugBorders());
+ layer.setShowRepaintCounter(settings.showRepaintCounter());
}
bool PageOverlayController::handleMouseEvent(const WebMouseEvent& mouseEvent)
@@ -289,25 +283,25 @@
float PageOverlayController::deviceScaleFactor() const
{
- return m_webPage->corePage()->deviceScaleFactor();
+ return m_webPage.corePage()->deviceScaleFactor();
}
void PageOverlayController::notifyFlushRequired(const WebCore::GraphicsLayer*)
{
- if (m_webPage->drawingArea())
- m_webPage->drawingArea()->scheduleCompositingLayerFlush();
+ if (m_webPage.drawingArea())
+ m_webPage.drawingArea()->scheduleCompositingLayerFlush();
}
-void PageOverlayController::didChangeOverlayFrame(PageOverlay* overlay)
+void PageOverlayController::didChangeOverlayFrame(PageOverlay& overlay)
{
- ASSERT(m_pageOverlays.contains(overlay));
+ ASSERT(m_pageOverlays.contains(&overlay));
+ updateOverlayGeometry(overlay, *m_overlayGraphicsLayers.get(&overlay));
+}
- GraphicsLayer* graphicsLayer = m_overlayGraphicsLayers.get(overlay);
-
- if (!graphicsLayer->drawsContent())
- return;
-
- updateOverlayGeometry(overlay, graphicsLayer);
+void PageOverlayController::didChangeOverlayBackgroundColor(PageOverlay& overlay)
+{
+ ASSERT(m_pageOverlays.contains(&overlay));
+ m_overlayGraphicsLayers.get(&overlay)->setBackgroundColor(overlay.backgroundColor());
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h (167215 => 167216)
--- trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebKit2/WebProcess/WebPage/PageOverlayController.h 2014-04-14 08:10:22 UTC (rev 167216)
@@ -44,7 +44,7 @@
class PageOverlayController : public WebCore::GraphicsLayerClient {
public:
- PageOverlayController(WebPage*);
+ PageOverlayController(WebPage&);
void initialize();
@@ -54,9 +54,9 @@
void installPageOverlay(PassRefPtr<PageOverlay>, PageOverlay::FadeMode);
void uninstallPageOverlay(PageOverlay*, PageOverlay::FadeMode);
- void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&);
- void setPageOverlayOpacity(PageOverlay*, float);
- void clearPageOverlay(PageOverlay*);
+ void setPageOverlayNeedsDisplay(PageOverlay&, const WebCore::IntRect&);
+ void setPageOverlayOpacity(PageOverlay&, float);
+ void clearPageOverlay(PageOverlay&);
void didChangeViewSize();
void didChangeDocumentSize();
@@ -64,8 +64,10 @@
void didChangeDeviceScaleFactor();
void didChangeExposedRect();
void didScrollFrame(WebCore::Frame*);
- void didChangeOverlayFrame(PageOverlay*);
+ void didChangeOverlayFrame(PageOverlay&);
+ void didChangeOverlayBackgroundColor(PageOverlay&);
+
void flushPageOverlayLayers(WebCore::FloatRect);
bool handleMouseEvent(const WebMouseEvent&);
@@ -75,7 +77,7 @@
WKArrayRef copyAccessibilityAttributesNames(bool parameterizedNames);
private:
- void updateSettingsForLayer(WebCore::GraphicsLayer*);
+ void updateSettingsForLayer(WebCore::GraphicsLayer&);
void updateForceSynchronousScrollLayerPositionUpdates();
// WebCore::GraphicsLayerClient
@@ -90,7 +92,7 @@
std::unique_ptr<WebCore::GraphicsLayer> m_viewOverlayRootLayer;
HashMap<PageOverlay*, std::unique_ptr<WebCore::GraphicsLayer>> m_overlayGraphicsLayers;
Vector<RefPtr<PageOverlay>> m_pageOverlays;
- WebPage* m_webPage;
+ WebPage& m_webPage;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (167215 => 167216)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2014-04-14 07:50:51 UTC (rev 167215)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2014-04-14 08:10:22 UTC (rev 167216)
@@ -305,7 +305,7 @@
#if ENABLE(WEBGL)
, m_systemWebGLPolicy(WebGLAllowCreation)
#endif
- , m_pageOverlayController(this)
+ , m_pageOverlayController(*this)
{
ASSERT(m_pageID);
// FIXME: This is a non-ideal location for this Setting and