| /* |
| * Copyright (C) 2012 Research In Motion Limited. All rights reserved. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef WebOverlay_h |
| #define WebOverlay_h |
| |
| #include "BlackBerryGlobal.h" |
| #include "WebOverlayOverride.h" |
| |
| #include <BlackBerryPlatformPrimitives.h> |
| |
| namespace WebCore { |
| class GraphicsLayerClient; |
| } |
| |
| namespace BlackBerry { |
| namespace Platform { |
| class String; |
| } |
| |
| namespace WebKit { |
| |
| class WebAnimation; |
| class WebOverlayClient; |
| class WebOverlayOverride; |
| class WebOverlayPrivate; |
| class WebPage; |
| |
| /** |
| * Represents an overlay that is rendered superimposed on a web page. |
| * |
| * The WebOverlay is not thread safe, but it is reentrant when used on either |
| * the WebKit or the compositing thread. This means that overlays can be |
| * on either of these threads, but each instance must only be used on the |
| * thread where it was created. The only exception is the override mechanism. |
| * |
| * The WebOverlayOverride object returned by WebOverlay::override() can be used |
| * to override the values of specific properties from the UI thread. |
| * |
| * They have the following semantics: If they are called for a specific overlay |
| * on the UI thread, the value set will override any value set on the WK thread |
| * until you call resetOverrides(). resetOverrides() is thread safe. |
| */ |
| class BLACKBERRY_EXPORT WebOverlay { |
| public: |
| enum ImageDataAdoptionType { |
| ReferenceImageData, |
| CopyImageData |
| }; |
| |
| WebOverlay(); |
| WebOverlay(WebCore::GraphicsLayerClient*); |
| virtual ~WebOverlay(); |
| |
| // The position of the layer (the location of its top-left corner in its parent). |
| Platform::FloatPoint position() const; |
| void setPosition(const Platform::FloatPoint&); |
| |
| // Anchor point: (0, 0) is top left, (1, 1) is bottom right. The anchor point |
| // affects the origin of the transforms. |
| Platform::FloatPoint anchorPoint() const; |
| void setAnchorPoint(const Platform::FloatPoint&); |
| |
| // The size of the layer. |
| Platform::FloatSize size() const; |
| void setSize(const Platform::FloatSize&); |
| |
| // Whether the layer is scaled together with the web page. |
| bool sizeIsScaleInvariant() const; |
| void setSizeIsScaleInvariant(bool); |
| |
| // Transform can be used to rotate the layer, among other things. |
| Platform::TransformationMatrix transform() const; |
| void setTransform(const Platform::TransformationMatrix&); |
| |
| // Opacity. Can also be used to temporarily hide a layer. |
| float opacity() const; |
| void setOpacity(float); |
| |
| // Adds/removes an animation |
| // Note that WebAnimation and BlackBerry::Platform::String are not thread safe and have to be |
| // created on the thread where they'll be used. |
| void addAnimation(const WebAnimation&); |
| void removeAnimation(const BlackBerry::Platform::String& name); |
| |
| WebOverlay* parent() const; |
| bool addChild(WebOverlay*); |
| void removeFromParent(); |
| |
| void setContentsToImage(const unsigned char* data, const Platform::IntSize& imageSize, ImageDataAdoptionType = ReferenceImageData); |
| void setContentsToColor(int r, int g, int b, int a); |
| void setDrawsContent(bool); |
| |
| // Will result in a future call to WebOverlayClient::drawContents, if the layer draws custom contents. |
| void invalidate(); |
| |
| // The client can be used to draw layer contents using Skia. |
| void setClient(WebOverlayClient*); |
| |
| // Must be called on UI thread. |
| WebOverlayOverride* override(); |
| |
| /** |
| * Thread safe. Next time the attributes are changed on the WK thread, make |
| * those values override any set on the UI thread. |
| */ |
| void resetOverrides(); |
| |
| private: |
| friend class WebPage; |
| friend class WebOverlayPrivate; |
| |
| // Disable copy constructor and operator=. |
| WebOverlay(const WebOverlay&); |
| WebOverlay& operator=(const WebOverlay&); |
| |
| WebOverlayPrivate* d; |
| }; |
| |
| } |
| } |
| |
| #endif // WebOverlay_h |