#define __DALI_IMAGE_ACTOR_H__
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <string>
// INTERNAL INCLUDES
-#include <dali/public-api/actors/renderable-actor.h>
+#include <dali/public-api/actors/actor.h>
#include <dali/public-api/math/rect.h>
#include <dali/public-api/images/image.h>
+#include <dali/public-api/shader-effects/shader-effect.h>
+#include <dali/public-api/actors/blending.h>
+#include <dali/public-api/actors/sampling.h>
namespace Dali
{
*
* Allows the developer to add an actor to stage which displays the content of an Image object.
*
- * By default CullFaceMode is set to CullNone to enable the ImageActor to be viewed from all angles.
+ * By default ImageActor can be viewed from all angles.
*
* If an ImageActor is created without setting size, then the actor takes the size of the image -
* this is the natural size.
* Setting a size on the ImageActor, e.g through the SetSize api or through an animation will
* stop the natural size being used.
*
- * Such a set size can be changed back to the image's size by calling SetToNaturalSize().
- *
* If a pixel area is set on an ImageActor with natural size, the actor size will change
* to match the pixel area. If a pixel area is set on an ImageActor that has had it's size set,
* then the size doesn't change, and the partial image will be stretched to fill the set size.
* Clearing the pixel area on an Image actor with a set size will cause the actor to show the
* whole image again, but will not change the image size.
*/
-class DALI_IMPORT_API ImageActor : public RenderableActor
+class DALI_IMPORT_API ImageActor : public Actor
{
public:
{
enum
{
- PixelArea = DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX, ///< name "pixel-area", type RECTANGLE
- Style, ///< name "style", type STRING
- Border, ///< name "border", type VECTOR4
- Image, ///< name "image", type MAP {"filename":"", "load-policy":...}
+ PIXEL_AREA = DEFAULT_DERIVED_ACTOR_PROPERTY_START_INDEX, ///< name "pixel-area", type Rect<int>
+ STYLE, ///< name "style", type std::string
+ BORDER, ///< name "border", type Vector4
+ IMAGE, ///< name "image", type Map {"filename":"", "load-policy":...}
};
};
*/
typedef Rect<int> PixelArea;
+ static const BlendingMode::Type DEFAULT_BLENDING_MODE; ///< default value is BlendingMode::AUTO
+
/**
* @brief Create an uninitialized ImageActor handle.
*
Image GetImage();
/**
- * @brief Tell the image actor to use the natural size of the current image
- * or future images.
- *
- * Calling SetSize on this actor or animating the size of the actor
- * overrides this behaviour.
- *
- * @post The image actor uses the natural image size after an image
- * has been loaded.
- */
- void SetToNaturalSize();
-
- /**
* @brief Set a region of the image to display, in pixels.
*
* When the image is loaded the actor's size will be reset to the pixelArea,
PixelArea GetPixelArea() const;
/**
- * @brief Query whether a pixel area has been set.
- *
- * @pre image must be initialized.
- * @return True if a pixel area has been set.
- */
- bool IsPixelAreaSet() const;
-
- /**
- * @brief Remove any pixel areas specified with SetPixelArea; the entire image will be displayed.
- *
- * The actor size will change to that of the Image unless a custom size was set, e.g. via
- * Actor::SetSize().
- * @pre image must be initialized.
- */
- void ClearPixelArea();
-
- /**
* @brief Set how the image is rendered; the default is STYLE_QUAD.
*
* @pre image must be initialized.
*/
Vector4 GetNinePatchBorder() const;
+
+ /**
+ * @brief Allows modification of an actors position in the depth sort algorithm.
+ *
+ * The offset can be altered for each coplanar actor hence allowing an order of painting.
+ * @pre The Actor has been initialized.
+ * @param [in] depthOffset the offset to be given to the actor. Positive values pushing it further back.
+ */
+ void SetSortModifier(float depthOffset);
+
+ /**
+ * @brief Retrieves the offset used to modify an actors position in the depth sort algorithm.
+ *
+ * The offset can be altered for each coplanar actor hence allowing an order of painting.
+ * @pre The Actor has been initialized.
+ * @return the offset that has been given to the actor. Positive values pushing it further back.
+ */
+ float GetSortModifier() const;
+
+ /**
+ * @brief Sets the blending mode.
+ *
+ * Possible values are: BlendingMode::OFF, BlendingMode::AUTO and BlendingMode::ON. Default is BlendingMode::AUTO.
+ *
+ * If blending is disabled (BlendingMode::OFF) fade in and fade out animations do not work.
+ *
+ * <ul>
+ * <li> \e OFF Blending is disabled.
+ * <li> \e AUTO Blending is enabled only if the renderable actor has alpha channel.
+ * <li> \e ON Blending is enabled.
+ * </ul>
+ *
+ * @param[in] mode The blending mode.
+ */
+ void SetBlendMode( BlendingMode::Type mode );
+
+ /**
+ * @brief Retrieves the blending mode.
+ *
+ * @return The blending mode, one of BlendingMode::OFF, BlendingMode::AUTO or BlendingMode::ON.
+ */
+ BlendingMode::Type GetBlendMode() const;
+
+ /**
+ * @brief Specify the pixel arithmetic used when the actor is blended.
+ *
+ * @param[in] srcFactorRgba Specifies how the red, green, blue, and alpha source blending factors are computed.
+ * The options are BlendingFactor::ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR,
+ * SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR,
+ * GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, and GL_SRC_ALPHA_SATURATE.
+ *
+ * @param[in] destFactorRgba Specifies how the red, green, blue, and alpha destination blending factors are computed.
+ * The options are BlendingFactor::ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR,
+ * SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR,
+ * GL_CONSTANT_ALPHA, and GL_ONE_MINUS_CONSTANT_ALPHA.
+ */
+ void SetBlendFunc( BlendingFactor::Type srcFactorRgba, BlendingFactor::Type destFactorRgba );
+
+ /**
+ * @brief Specify the pixel arithmetic used when the actor is blended.
+ *
+ * @param[in] srcFactorRgb Specifies how the red, green, and blue source blending factors are computed.
+ * The options are BlendingFactor::ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR,
+ * SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR,
+ * GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, and GL_SRC_ALPHA_SATURATE.
+ *
+ * @param[in] destFactorRgb Specifies how the red, green, blue, and alpha destination blending factors are computed.
+ * The options are BlendingFactor::ZERO, ONE, SRC_COLOR, ONE_MINUS_SRC_COLOR, DST_COLOR, ONE_MINUS_DST_COLOR,
+ * SRC_ALPHA, ONE_MINUS_SRC_ALPHA, DST_ALPHA, ONE_MINUS_DST_ALPHA, CONSTANT_COLOR, ONE_MINUS_CONSTANT_COLOR,
+ * GL_CONSTANT_ALPHA, and GL_ONE_MINUS_CONSTANT_ALPHA.
+ *
+ * @param[in] srcFactorAlpha Specifies how the alpha source blending factor is computed.
+ * The options are the same as for srcFactorRgb.
+ *
+ * @param[in] destFactorAlpha Specifies how the alpha source blending factor is computed.
+ * The options are the same as for destFactorRgb.
+ */
+ void SetBlendFunc( BlendingFactor::Type srcFactorRgb, BlendingFactor::Type destFactorRgb,
+ BlendingFactor::Type srcFactorAlpha, BlendingFactor::Type destFactorAlpha );
+
+ /**
+ * @brief Query the pixel arithmetic used when the actor is blended.
+ *
+ * @param[out] srcFactorRgb Specifies how the red, green, blue, and alpha source blending factors are computed.
+ * @param[out] destFactorRgb Specifies how the red, green, blue, and alpha destination blending factors are computed.
+ * @param[out] srcFactorAlpha Specifies how the red, green, blue, and alpha source blending factors are computed.
+ * @param[out] destFactorAlpha Specifies how the red, green, blue, and alpha destination blending factors are computed.
+ */
+ void GetBlendFunc( BlendingFactor::Type& srcFactorRgb, BlendingFactor::Type& destFactorRgb,
+ BlendingFactor::Type& srcFactorAlpha, BlendingFactor::Type& destFactorAlpha ) const;
+
+ /**
+ * @brief Specify the equation used when the actor is blended.
+ *
+ * The options are BlendingEquation::ADD, SUBTRACT, or REVERSE_SUBTRACT.
+ * @param[in] equationRgba The equation used for combining red, green, blue, and alpha components.
+ */
+ void SetBlendEquation( BlendingEquation::Type equationRgba );
+
+ /**
+ * @brief Specify the equation used when the actor is blended.
+ *
+ * @param[in] equationRgb The equation used for combining red, green, and blue components.
+ * @param[in] equationAlpha The equation used for combining the alpha component.
+ * The options are BlendingEquation::ADD, SUBTRACT, or REVERSE_SUBTRACT.
+ */
+ void SetBlendEquation( BlendingEquation::Type equationRgb, BlendingEquation::Type equationAlpha );
+
+ /**
+ * @brief Query the equation used when the actor is blended.
+ *
+ * @param[out] equationRgb The equation used for combining red, green, and blue components.
+ * @param[out] equationAlpha The equation used for combining the alpha component.
+ */
+ void GetBlendEquation( BlendingEquation::Type& equationRgb, BlendingEquation::Type& equationAlpha ) const;
+
+ /**
+ * @brief Specify the color used when the actor is blended; the default is Vector4::ZERO.
+ *
+ * @param[in] color The blend color.
+ */
+ void SetBlendColor( const Vector4& color );
+
+ /**
+ * @brief Query the color used when the actor is blended.
+ *
+ * @return The blend color.
+ */
+ const Vector4& GetBlendColor() const;
+
+ /**
+ * @brief Sets the filtering mode.
+ *
+ * Possible values are: FilterMode::NEAREST and FilterMode::LINEAR. Default is FilterMode::LINEAR.
+ *
+ * <ul>
+ * <li> \e NEAREST Use nearest filtering
+ * <li> \e LINEAR Use linear filtering
+ * </ul>
+ *
+ * @param[in] minFilter The minification filtering mode.
+ * @param[in] magFilter The magnification filtering mode.
+ */
+ void SetFilterMode( FilterMode::Type minFilter, FilterMode::Type magFilter );
+
+ /**
+ * @brief Retrieves the filtering mode.
+ *
+ * @param[out] minFilter The return minification value
+ * @param[out] magFilter The return magnification value
+ */
+ void GetFilterMode( FilterMode::Type& minFilter, FilterMode::Type& magFilter) const;
+
+ /**
+ * @brief Sets the shader effect for the RenderableActor.
+ *
+ * Shader effects provide special effects like ripple and bend.
+ * Setting a shader effect removes any shader effect previously set by SetShaderEffect.
+ * @pre The actor has been initialized.
+ * @pre effect has been initialized.
+ * @param [in] effect The shader effect.
+ */
+ void SetShaderEffect( ShaderEffect effect );
+
+ /**
+ * @brief Retrieve the custom shader effect for the RenderableActor.
+ * If default shader is used an empty handle is returned.
+ *
+ * @pre The Actor has been initialized.
+ * @return The shader effect
+ */
+ ShaderEffect GetShaderEffect() const;
+
+ /**
+ * @brief Removes the current shader effect.
+ *
+ * @pre The Actor has been initialized.
+ */
+ void RemoveShaderEffect();
+
+
public: // Not intended for application developers
explicit DALI_INTERNAL ImageActor(Internal::ImageActor*);
};
+
+/**
+ * @brief Sets the shader effect for all ImageActors in a tree of Actors.
+ *
+ * @see ImageActor::SetShaderEffect
+ *
+ * @param [in] actor root of a tree of actors.
+ * @param [in] effect The shader effect.
+ */
+DALI_IMPORT_API void SetShaderEffectRecursively( Actor actor, ShaderEffect effect );
+
+/**
+ * @brief Removes the shader effect from all ImageActors in a tree of Actors.
+ *
+ * @see ImageActor::RemoveShaderEffect
+ *
+ * @param [in] actor root of a tree of actors.
+ */
+DALI_IMPORT_API void RemoveShaderEffectRecursively( Actor actor );
+
} // namespace Dali
#endif // __DALI_IMAGE_ACTOR_H__