WebRenderLayer.cpp [plain text]
#include "config.h"
#include "WebRenderLayer.h"
#include "WebPage.h"
#include "WebString.h"
#include <WebCore/Frame.h>
#include <WebCore/FrameLoader.h>
#include <WebCore/FrameLoaderClient.h>
#include <WebCore/RenderLayer.h>
#include <WebCore/RenderLayerBacking.h>
#include <WebCore/RenderView.h>
#include <WebCore/StyledElement.h>
using namespace WebCore;
namespace WebKit {
PassRefPtr<WebRenderLayer> WebRenderLayer::create(WebPage* page)
{
Frame* mainFrame = page->mainFrame();
if (!mainFrame)
return 0;
if (!mainFrame->loader()->client()->hasHTMLView())
return 0;
RenderView* contentRenderer = mainFrame->contentRenderer();
if (!contentRenderer)
return 0;
RenderLayer* rootLayer = contentRenderer->layer();
if (!rootLayer)
return 0;
return adoptRef(new WebRenderLayer(rootLayer));
}
PassRefPtr<MutableArray> WebRenderLayer::createArrayFromLayerList(Vector<RenderLayer*>* list)
{
if (!list || !list->size())
return 0;
RefPtr<MutableArray> array = MutableArray::create();
for (size_t i = 0; i < list->size(); ++i) {
RefPtr<WebRenderLayer> layer = adoptRef(new WebRenderLayer(list->at(i)));
array->append(layer.get());
}
return array.release();
}
WebRenderLayer::WebRenderLayer(RenderLayer* layer)
{
m_renderer = WebRenderObject::create(layer->renderer());
m_isReflection = layer->isReflection();
#if USE(ACCELERATED_COMPOSITING)
if (layer->isComposited()) {
RenderLayerBacking* backing = layer->backing();
m_isClipping = backing->hasClippingLayer();
m_isClipped = backing->hasAncestorClippingLayer();
switch (backing->compositingLayerType()) {
case NormalCompositingLayer:
m_compositingLayerType = Normal;
break;
case TiledCompositingLayer:
m_compositingLayerType = Tiled;
break;
case MediaCompositingLayer:
m_compositingLayerType = Media;
break;
case ContainerCompositingLayer:
m_compositingLayerType = Container;
break;
}
} else {
#endif
m_isClipping = false;
m_isClipped = false;
m_compositingLayerType = None;
#if USE(ACCELERATED_COMPOSITING)
}
#endif
m_absoluteBoundingBox = layer->absoluteBoundingBox();
m_negativeZOrderList = createArrayFromLayerList(layer->negZOrderList());
m_normalFlowList = createArrayFromLayerList(layer->normalFlowList());
m_positiveZOrderList = createArrayFromLayerList(layer->posZOrderList());
}
}