blob: d6cd7b2c4cc66de16f542cf9d4891654a7144d9a [file] [log] [blame]
/*
* 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