summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/android/LayerAndroid.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/graphics/android/LayerAndroid.h')
-rw-r--r--WebCore/platform/graphics/android/LayerAndroid.h384
1 files changed, 0 insertions, 384 deletions
diff --git a/WebCore/platform/graphics/android/LayerAndroid.h b/WebCore/platform/graphics/android/LayerAndroid.h
deleted file mode 100644
index d4510c5..0000000
--- a/WebCore/platform/graphics/android/LayerAndroid.h
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef LayerAndroid_h
-#define LayerAndroid_h
-
-#if USE(ACCELERATED_COMPOSITING)
-
-#include "FloatPoint.h"
-#include "FloatPoint3D.h"
-#include "FloatRect.h"
-#include "GraphicsLayerClient.h"
-#include "LayerTexture.h"
-#include "RefPtr.h"
-#include "SkColor.h"
-#include "SkLayer.h"
-#include "TextureOwner.h"
-#include "TransformationMatrix.h"
-
-#include <wtf/HashMap.h>
-#include <wtf/text/StringHash.h>
-
-#ifndef BZERO_DEFINED
-#define BZERO_DEFINED
-// http://www.opengroup.org/onlinepubs/000095399/functions/bzero.html
-// For maximum portability, it is recommended to replace the function call to bzero() as follows:
-#define bzero(b, len) (memset((b), '\0', (len)), (void) 0)
-#endif
-
-class SkBitmapRef;
-class SkCanvas;
-class SkMatrix;
-class SkPicture;
-
-namespace android {
-class DrawExtra;
-}
-
-using namespace android;
-
-struct SkLength {
- enum SkLengthType { Undefined, Auto, Relative, Percent, Fixed, Static, Intrinsic, MinIntrinsic };
- SkLengthType type;
- SkScalar value;
- SkLength()
- {
- type = Undefined;
- value = 0;
- }
- bool defined() const
- {
- if (type == Undefined)
- return false;
- return true;
- }
- float calcFloatValue(float max) const
- {
- switch (type) {
- case Percent:
- return (max * value) / 100.0f;
- case Fixed:
- return value;
- default:
- return value;
- }
- }
-};
-
-namespace WebCore {
-
-class AndroidAnimation;
-class BackedDoubleBufferedTexture;
-class LayerAndroidFindState;
-class RenderLayer;
-class TiledPage;
-
-class LayerAndroid : public SkLayer, public TextureOwner {
-
-public:
- LayerAndroid(RenderLayer* owner);
- LayerAndroid(const LayerAndroid& layer);
- LayerAndroid(SkPicture*);
- virtual ~LayerAndroid();
-
- // TextureOwner methods
- virtual bool removeTexture(BackedDoubleBufferedTexture* texture);
-
- LayerTexture* texture() { return m_reservedTexture; }
- virtual TiledPage* page() { return 0; }
-
- void setBackfaceVisibility(bool value) { m_backfaceVisibility = value; }
- void setTransform(const TransformationMatrix& matrix) { m_transform = matrix; }
- FloatPoint translation() const;
- SkRect bounds() const;
- IntRect clippedRect() const;
- bool outsideViewport();
-
- // Debug/info functions
- int countTextureSize();
- int nbLayers();
- void showLayers(int indent = 0);
-
- // Texture size functions
- void computeTextureSize(double time);
- void collect(Vector<LayerAndroid*>& layers,
- int& size);
- int clippedTextureSize() const;
- int fullTextureSize() const;
-
- // called on the root layer
- void reserveGLTextures();
- void createGLTextures();
-
- virtual bool needsTexture();
- bool needsScheduleRepaint(LayerTexture* texture);
-
- void setScale(float scale);
- float getScale() { return m_scale; }
- virtual bool drawGL(GLWebViewState*, SkMatrix&);
- bool drawChildrenGL(GLWebViewState*, SkMatrix&);
- virtual void paintBitmapGL();
- void updateGLPositions(const TransformationMatrix& parentMatrix,
- const FloatRect& clip, float opacity);
- void setDrawOpacity(float opacity) { m_drawOpacity = opacity; }
- void setVisible(bool value) { m_visible = value; }
-
- bool preserves3D() { return m_preserves3D; }
- void setPreserves3D(bool value) { m_preserves3D = value; }
- void setAnchorPointZ(float z) { m_anchorPointZ = z; }
- float anchorPointZ() { return m_anchorPointZ; }
- void setDrawTransform(const TransformationMatrix& transform) { m_drawTransform = transform; }
- const TransformationMatrix& drawTransform() const { return m_drawTransform; }
- void setChildrenTransform(const TransformationMatrix& t) { m_childrenTransform = t; }
- void setDrawClip(const FloatRect& rect) { m_clippingRect = rect; }
- const FloatRect& drawClip() { return m_clippingRect; }
-
- void setFixedPosition(SkLength left, // CSS left property
- SkLength top, // CSS top property
- SkLength right, // CSS right property
- SkLength bottom, // CSS bottom property
- SkLength marginLeft, // CSS margin-left property
- SkLength marginTop, // CSS margin-top property
- SkLength marginRight, // CSS margin-right property
- SkLength marginBottom, // CSS margin-bottom property
- const IntPoint& renderLayerPos, // For undefined fixed position
- SkRect viewRect) { // view rect, can be smaller than the layer's
- m_fixedLeft = left;
- m_fixedTop = top;
- m_fixedRight = right;
- m_fixedBottom = bottom;
- m_fixedMarginLeft = marginLeft;
- m_fixedMarginTop = marginTop;
- m_fixedMarginRight = marginRight;
- m_fixedMarginBottom = marginBottom;
- m_fixedRect = viewRect;
- m_isFixed = true;
- m_renderLayerPos = renderLayerPos;
- setInheritFromRootTransform(true);
- }
-
- void setBackgroundColor(SkColor color);
- void setMaskLayer(LayerAndroid*);
- void setMasksToBounds(bool masksToBounds)
- {
- m_haveClip = masksToBounds;
- }
- bool masksToBounds() const { return m_haveClip; }
-
- SkPicture* recordContext();
-
- void addAnimation(PassRefPtr<AndroidAnimation> anim);
- void removeAnimationsForProperty(AnimatedPropertyID property);
- void removeAnimationsForKeyframes(const String& name);
- bool evaluateAnimations();
- bool evaluateAnimations(double time);
- bool hasAnimations() const;
- void addDirtyArea(GLWebViewState*);
-
- SkPicture* picture() const { return m_recordingPicture; }
-
- // remove layers bounds from visible rectangle to show what can be
- // scrolled into view; returns original minus layer bounds in global space.
- SkRect subtractLayers(const SkRect& visibleRect) const;
-
- void dumpLayers(FILE*, int indentLevel) const;
- void dumpToLog() const;
-
- /** Call this with the current viewport (scrolling, zoom) to update
- the position of the fixed layers.
-
- This call is recursive, so it should be called on the root of the
- hierarchy.
- */
- void updateFixedLayersPositions(SkRect viewPort, LayerAndroid* parentIframeLayer = 0);
-
- /** Call this to update the position attribute, so that later calls
- like bounds() will report the corrected position.
-
- This call is recursive, so it should be called on the root of the
- hierarchy.
- */
- void updatePositions();
-
- void clipArea(SkTDArray<SkRect>* region) const;
- const LayerAndroid* find(int* xPtr, int* yPtr, SkPicture* root) const;
- const LayerAndroid* findById(int uniqueID) const
- {
- return const_cast<LayerAndroid*>(this)->findById(uniqueID);
- }
- LayerAndroid* findById(int uniqueID);
- LayerAndroid* getChild(int index) const
- {
- return static_cast<LayerAndroid*>(this->INHERITED::getChild(index));
- }
- void setExtra(DrawExtra* extra); // does not assign ownership
- int uniqueId() const { return m_uniqueId; }
- bool isFixed() { return m_isFixed; }
-
- /** This sets a content image -- calling it means we will use
- the image directly when drawing the layer instead of using
- the content painted by WebKit. See comments below for
- m_recordingPicture and m_contentsImage.
- */
- void setContentsImage(SkBitmapRef* img);
- bool hasContentsImage() { return m_contentsImage; }
- void copyBitmap(SkBitmap*);
-
- void bounds(SkRect*) const;
-
- virtual bool contentIsScrollable() const { return false; }
- virtual LayerAndroid* copy() const { return new LayerAndroid(*this); }
-
- void needsRepaint() { m_pictureUsed++; }
- unsigned int pictureUsed() { return m_pictureUsed; }
- void contentDraw(SkCanvas*);
- void extraDraw(SkCanvas*);
-
- virtual bool isMedia() const { return false; }
- virtual bool isVideo() const { return false; }
-
- RenderLayer* owningLayer() const { return m_owningLayer; }
-
- void setIsIframe(bool isIframe) { m_isIframe = isIframe; }
- float zValue() const { return m_zValue; }
-
-protected:
- virtual void onDraw(SkCanvas*, SkScalar opacity);
-
-private:
- class FindState;
-#if DUMP_NAV_CACHE
- friend class CachedLayer::Debug; // debugging access only
-#endif
-
- void findInner(FindState&) const;
- bool prepareContext(bool force = false);
- void clipInner(SkTDArray<SkRect>* region, const SkRect& local) const;
-
- bool m_haveClip;
- bool m_isFixed;
- bool m_backgroundColorSet;
- bool m_isIframe;
-
- SkLength m_fixedLeft;
- SkLength m_fixedTop;
- SkLength m_fixedRight;
- SkLength m_fixedBottom;
- SkLength m_fixedMarginLeft;
- SkLength m_fixedMarginTop;
- SkLength m_fixedMarginRight;
- SkLength m_fixedMarginBottom;
- SkRect m_fixedRect;
-
- SkPoint m_iframeOffset;
- // When fixed element is undefined or auto, the render layer's position
- // is needed for offset computation
- IntPoint m_renderLayerPos;
-
- TransformationMatrix m_transform;
- float m_zValue;
- bool m_backfaceVisibility;
- bool m_visible;
-
- SkColor m_backgroundColor;
-
- bool m_preserves3D;
- float m_anchorPointZ;
- float m_drawOpacity;
- TransformationMatrix m_drawTransform;
- TransformationMatrix m_childrenTransform;
- FloatRect m_clippingRect;
-
- // Note that m_recordingPicture and m_contentsImage are mutually exclusive;
- // m_recordingPicture is used when WebKit is asked to paint the layer's
- // content, while m_contentsImage contains an image that we directly
- // composite, using the layer's dimensions as a destination rect.
- // We do this as if the layer only contains an image, directly compositing
- // it is a much faster method than using m_recordingPicture.
- SkPicture* m_recordingPicture;
-
- SkBitmap* m_contentsImage;
-
- typedef HashMap<pair<String, int>, RefPtr<AndroidAnimation> > KeyframesMap;
- KeyframesMap m_animations;
- SkPicture* m_extra;
- int m_uniqueId;
-
- // We have two textures pointers -- one if the texture we are currently
- // using to draw (m_drawingTexture), the other one is the one we get
- // from trying to reserve a texture from the TilesManager. Usually, they
- // are identical, but in some cases they are not (different scaling
- // resulting in the need for different geometry, at initilisation, and
- // if the texture asked does not fit in memory)
- LayerTexture* m_drawingTexture;
- LayerTexture* m_reservedTexture;
-
- // rect used to query TilesManager for the right texture
- IntRect m_layerTextureRect;
-
- // used to signal that the tile is out-of-date and needs to be redrawn
- bool m_dirty;
- unsigned int m_pictureUsed;
-
- // used to signal the framework we need a repaint
- bool m_hasRunningAnimations;
-
- // painting request sent
- bool m_requestSent;
-
- float m_scale;
-
- // We try to not always compute the texture size, as this is quite heavy
- static const double s_computeTextureDelay = 0.2; // 200 ms
- double m_lastComputeTextureSize;
-
- // This mutex serves two purposes. (1) It ensures that certain operations
- // happen atomically and (2) it makes sure those operations are synchronized
- // across all threads and cores.
- android::Mutex m_atomicSync;
-
- RenderLayer* m_owningLayer;
-
- typedef SkLayer INHERITED;
-};
-
-}
-
-#else
-
-class SkPicture;
-
-namespace WebCore {
-
-class LayerAndroid {
-public:
- LayerAndroid(SkPicture* picture) :
- m_recordingPicture(picture), // does not assign ownership
- m_uniqueId(-1)
- {}
- SkPicture* picture() const { return m_recordingPicture; }
- int uniqueId() const { return m_uniqueId; }
-private:
- SkPicture* m_recordingPicture;
- int m_uniqueId;
-};
-
-}
-
-#endif // USE(ACCELERATED_COMPOSITING)
-
-#endif // LayerAndroid_h