diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/android/layers')
5 files changed, 47 insertions, 38 deletions
diff --git a/Source/WebCore/platform/graphics/android/layers/CanvasLayer.cpp b/Source/WebCore/platform/graphics/android/layers/CanvasLayer.cpp index 1813903..40332d0 100644 --- a/Source/WebCore/platform/graphics/android/layers/CanvasLayer.cpp +++ b/Source/WebCore/platform/graphics/android/layers/CanvasLayer.cpp @@ -63,13 +63,13 @@ CanvasLayer::CanvasLayer(const CanvasLayer& layer) if (!layer.m_canvas) { // The canvas has already been destroyed - this shouldn't happen ALOGW("Creating a CanvasLayer for a destroyed canvas!"); - m_contentRect = IntRect(); + m_visibleContentRect = IntRect(); m_offsetFromRenderer = IntSize(); m_texture->setHwAccelerated(false); return; } // We are making a copy for the UI, sync the interesting bits - m_contentRect = layer.contentRect(); + m_visibleContentRect = layer.visibleContentRect(); m_offsetFromRenderer = layer.offsetFromRenderer(); bool previousState = m_texture->hasValidTexture(); if (!previousState && layer.m_dirtyCanvas.isEmpty()) { @@ -86,7 +86,7 @@ CanvasLayer::CanvasLayer(const CanvasLayer& layer) // Merge the canvas invals with the layer's invals to repaint the needed // tiles. SkRegion::Iterator iter(layer.m_dirtyCanvas); - const IntPoint& offset = m_contentRect.location(); + const IntPoint& offset = m_visibleContentRect.location(); for (; !iter.done(); iter.next()) { SkIRect diff = iter.rect(); diff.fLeft += offset.x(); @@ -98,8 +98,8 @@ CanvasLayer::CanvasLayer(const CanvasLayer& layer) } if (previousState != m_texture->hasValidTexture()) { // Need to do a full inval of the canvas content as we are mode switching - m_dirtyRegion.op(m_contentRect.x(), m_contentRect.y(), - m_contentRect.maxX(), m_contentRect.maxY(), SkRegion::kUnion_Op); + m_dirtyRegion.op(m_visibleContentRect.x(), m_visibleContentRect.y(), + m_visibleContentRect.maxX(), m_visibleContentRect.maxY(), SkRegion::kUnion_Op); } } } @@ -160,7 +160,7 @@ SkBitmapRef* CanvasLayer::bitmap() const return m_canvas->copiedImage()->nativeImageForCurrentFrame(); } -IntRect CanvasLayer::contentRect() const +IntRect CanvasLayer::visibleContentRect() const { if (!m_canvas || !m_canvas->renderer() @@ -187,9 +187,9 @@ void CanvasLayer::contentDraw(SkCanvas* canvas, PaintStyle style) if (!m_bitmap) return; SkBitmap& bitmap = m_bitmap->bitmap(); - SkRect dst = SkRect::MakeXYWH(m_contentRect.x() - m_offsetFromRenderer.width(), - m_contentRect.y() - m_offsetFromRenderer.height(), - m_contentRect.width(), m_contentRect.height()); + SkRect dst = SkRect::MakeXYWH(m_visibleContentRect.x() - m_offsetFromRenderer.width(), + m_visibleContentRect.y() - m_offsetFromRenderer.height(), + m_visibleContentRect.width(), m_visibleContentRect.height()); canvas->drawBitmapRect(bitmap, 0, dst, 0); } @@ -198,9 +198,9 @@ bool CanvasLayer::drawGL(bool layerTilesDisabled) bool ret = LayerAndroid::drawGL(layerTilesDisabled); m_texture->requireTexture(); if (!m_bitmap && m_texture->updateTexImage()) { - SkRect rect = SkRect::MakeXYWH(m_contentRect.x() - m_offsetFromRenderer.width(), - m_contentRect.y() - m_offsetFromRenderer.height(), - m_contentRect.width(), m_contentRect.height()); + SkRect rect = SkRect::MakeXYWH(m_visibleContentRect.x() - m_offsetFromRenderer.width(), + m_visibleContentRect.y() - m_offsetFromRenderer.height(), + m_visibleContentRect.width(), m_visibleContentRect.height()); TextureQuadData data(m_texture->texture(), GL_TEXTURE_EXTERNAL_OES, GL_LINEAR, LayerQuad, &m_drawTransform, &rect); TilesManager::instance()->shader()->drawQuad(&data); diff --git a/Source/WebCore/platform/graphics/android/layers/CanvasLayer.h b/Source/WebCore/platform/graphics/android/layers/CanvasLayer.h index 532dbf2..2bfed1e 100644 --- a/Source/WebCore/platform/graphics/android/layers/CanvasLayer.h +++ b/Source/WebCore/platform/graphics/android/layers/CanvasLayer.h @@ -63,11 +63,11 @@ private: void init(); SkBitmapRef* bitmap() const; - IntRect contentRect() const; + IntRect visibleContentRect() const; IntSize offsetFromRenderer() const; HTMLCanvasElement* m_canvas; - IntRect m_contentRect; + IntRect m_visibleContentRect; IntSize m_offsetFromRenderer; SkRegion m_dirtyCanvas; SkBitmapRef* m_bitmap; diff --git a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp index 535d211..f0d83ac 100644 --- a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp @@ -249,9 +249,12 @@ void LayerAndroid::addDirtyArea() { IntSize layerSize(getSize().width(), getSize().height()); - FloatRect area = TilesManager::instance()->shader()->rectInInvScreenCoord(m_drawTransform, layerSize); - FloatRect clippingRect = TilesManager::instance()->shader()->rectInScreenCoord(m_clippingRect); - FloatRect clip = TilesManager::instance()->shader()->convertScreenCoordToInvScreenCoord(clippingRect); + FloatRect area = + TilesManager::instance()->shader()->rectInViewCoord(m_drawTransform, layerSize); + FloatRect clippingRect = + TilesManager::instance()->shader()->rectInInvViewCoord(m_clippingRect); + FloatRect clip = + TilesManager::instance()->shader()->convertInvViewCoordToViewCoord(clippingRect); area.intersect(clip); IntRect dirtyArea(area.x(), area.y(), area.width(), area.height()); @@ -410,7 +413,8 @@ void LayerAndroid::updatePositions() } void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentMatrix, - const FloatRect& clipping, float opacity, float scale) + const FloatRect& clipping, float opacity, + float scale) { IntSize layerSize(getSize().width(), getSize().height()); FloatPoint anchorPoint(getAnchorPoint().fX, getAnchorPoint().fY); @@ -441,7 +445,9 @@ void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentM m_drawTransform.setM42(desiredContentY); } - m_zValue = TilesManager::instance()->shader()->zValue(m_drawTransform, getSize().width(), getSize().height()); + m_zValue = TilesManager::instance()->shader()->zValue(m_drawTransform, + getSize().width(), + getSize().height()); m_atomicSync.lock(); m_scale = scale; @@ -451,7 +457,8 @@ void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentM setDrawOpacity(opacity); if (m_haveClip) { - // The clipping rect calculation and intersetion will be done in documents coordinates. + // The clipping rect calculation and intersetion will be done in content + // coordinates. FloatRect rect(0, 0, layerSize.width(), layerSize.height()); FloatRect clip = m_drawTransform.mapRect(rect); clip.intersect(clipping); @@ -461,7 +468,8 @@ void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentM } ALOGV("%s - %d %f %f %f %f", subclassType() == BaseLayer ? "BASE" : "nonbase", - m_haveClip, m_clippingRect.x(), m_clippingRect.y(), m_clippingRect.width(), m_clippingRect.height()); + m_haveClip, m_clippingRect.x(), m_clippingRect.y(), + m_clippingRect.width(), m_clippingRect.height()); if (!m_backfaceVisibility && m_drawTransform.inverse().m33() < 0) { @@ -548,7 +556,7 @@ IntRect LayerAndroid::clippedRect() const { IntRect r(0, 0, getWidth(), getHeight()); IntRect tr = m_drawTransform.mapRect(r); - IntRect cr = TilesManager::instance()->shader()->clippedRectWithViewport(tr); + IntRect cr = TilesManager::instance()->shader()->clippedRectWithVisibleContentRect(tr); IntRect rect = m_drawTransform.inverse().mapRect(cr); return rect; } @@ -582,20 +590,21 @@ void LayerAndroid::showLayer(int indent) if (!indent) { ALOGD("\n\n--- LAYERS TREE ---"); - IntRect documentViewport(TilesManager::instance()->shader()->documentViewport()); - ALOGD("documentViewport(%d, %d, %d, %d)", - documentViewport.x(), documentViewport.y(), - documentViewport.width(), documentViewport.height()); + IntRect contentViewport(TilesManager::instance()->shader()->contentViewport()); + ALOGD("contentViewport(%d, %d, %d, %d)", + contentViewport.x(), contentViewport.y(), + contentViewport.width(), contentViewport.height()); } IntRect r(0, 0, getWidth(), getHeight()); IntRect tr = m_drawTransform.mapRect(r); - IntRect visible = visibleArea(); + IntRect visible = visibleContentArea(); IntRect clip(m_clippingRect.x(), m_clippingRect.y(), m_clippingRect.width(), m_clippingRect.height()); ALOGD("%s %s %s (%d) [%d:0x%x] - %s %s - area (%d, %d, %d, %d) - visible (%d, %d, %d, %d) " "clip (%d, %d, %d, %d) %s %s m_content(%x), pic w: %d h: %d", - spaces, m_haveClip ? "CLIP LAYER" : "", subclassName().ascii().data(), subclassType(), uniqueId(), m_owningLayer, + spaces, m_haveClip ? "CLIP LAYER" : "", subclassName().ascii().data(), + subclassType(), uniqueId(), m_owningLayer, needsTexture() ? "needs a texture" : "no texture", m_imageCRC ? "has an image" : "no image", tr.x(), tr.y(), tr.width(), tr.height(), @@ -750,7 +759,7 @@ int LayerAndroid::setHwAccelerated(bool hwAccelerated) return flags | onSetHwAccelerated(hwAccelerated); } -IntRect LayerAndroid::unclippedArea() +IntRect LayerAndroid::fullContentArea() { IntRect area; area.setX(0); @@ -760,13 +769,13 @@ IntRect LayerAndroid::unclippedArea() return area; } -IntRect LayerAndroid::visibleArea() +IntRect LayerAndroid::visibleContentArea() { - IntRect area = unclippedArea(); + IntRect area = fullContentArea(); if (subclassType() == LayerAndroid::FixedBackgroundBaseLayer) return area; // First, we get the transformed area of the layer, - // in document coordinates + // in content coordinates IntRect rect = m_drawTransform.mapRect(area); int dx = rect.x(); int dy = rect.y(); @@ -775,9 +784,9 @@ IntRect LayerAndroid::visibleArea() IntRect clip(m_clippingRect); rect.intersect(clip); - // Now clip with the viewport in documents coordinate - IntRect documentViewport(TilesManager::instance()->shader()->documentViewport()); - rect.intersect(documentViewport); + // Now clip with the viewport in content coordinate + IntRect contentViewport(TilesManager::instance()->shader()->contentViewport()); + rect.intersect(contentViewport); // Finally, let's return the visible area, in layers coordinate rect.move(-dx, -dy); diff --git a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h index ca833f7..170ef41 100644 --- a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h +++ b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h @@ -140,8 +140,8 @@ public: IntRect clippedRect() const; bool outsideViewport(); - IntRect unclippedArea(); - IntRect visibleArea(); + IntRect fullContentArea(); + IntRect visibleContentArea(); virtual bool needsTexture(); diff --git a/Source/WebCore/platform/graphics/android/layers/MediaLayer.cpp b/Source/WebCore/platform/graphics/android/layers/MediaLayer.cpp index 6227ea4..7a3730b 100644 --- a/Source/WebCore/platform/graphics/android/layers/MediaLayer.cpp +++ b/Source/WebCore/platform/graphics/android/layers/MediaLayer.cpp @@ -56,7 +56,7 @@ MediaLayer::~MediaLayer() bool MediaLayer::drawGL(bool layerTilesDisabled) { - FloatRect clippingRect = TilesManager::instance()->shader()->rectInScreenCoord(drawClip()); + FloatRect clippingRect = TilesManager::instance()->shader()->rectInInvViewCoord(drawClip()); TilesManager::instance()->shader()->clip(clippingRect); // when the plugin gains focus webkit applies an outline to the |