X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Frendering%2Ftext-typesetter.h;h=285348e4f9ad5a7a0a539c5506576340ba6446dd;hp=a5aab65dd4016ae9f805ff6d85e3371cd3de2fa4;hb=5c827a7125b3c0420ba39766cbbcb0ee3eb8fccf;hpb=0dba002791383a83d22f94e2584d85dbd67026d0 diff --git a/dali-toolkit/internal/text/rendering/text-typesetter.h b/dali-toolkit/internal/text/rendering/text-typesetter.h index a5aab65..285348e 100644 --- a/dali-toolkit/internal/text/rendering/text-typesetter.h +++ b/dali-toolkit/internal/text/rendering/text-typesetter.h @@ -21,7 +21,10 @@ // EXTERNAL INCLUDES #include #include +#include #include +#include +#include namespace Dali { @@ -43,6 +46,33 @@ typedef IntrusivePtr TypesetterPtr; */ class Typesetter : public RefObject { +public: + + /** + * @brief Behaviours of how to render the text. + */ + enum RenderBehaviour + { + RENDER_TEXT_AND_STYLES, ///< Render both the text and its styles + RENDER_NO_TEXT, ///< Do not render the text itself + RENDER_NO_STYLES, ///< Do not render any styles + RENDER_MASK ///< Render an alpha mask (for color glyphs with no color animation, e.g. emoji) + }; + + /** + * @brief Styles of the text. + */ + enum Style + { + STYLE_NONE, ///< No style + STYLE_MASK, ///< Alpha mask + STYLE_SHADOW, ///< Hard shadow + STYLE_SOFT_SHADOW, ///< Soft shadow + STYLE_UNDERLINE, ///< Underline + STYLE_OUTLINE, ///< Outline + STYLE_BACKGROUND ///< Text background + }; + public: // Constructor. /** * @brief Creates a Typesetter instance. @@ -68,15 +98,17 @@ public: * Does the following operations: * - Finds the visible pages needed to be rendered. * - Elide glyphs if needed. - * - Retrieves the data buffers from the text model. - * - Creates the pixel data used to generate the final image with the given size. - * - Traverse the visible glyphs, retrieve their bitmaps and compose the final pixel data. + * - Creates image buffers for diffrent text styles with the given size. + * - Combines different image buffers to create the pixel data used to generate the final image * * @param[in] size The renderer size. + * @param[in] behaviour The behaviour of how to render the text (i.e. whether to render the text only or the styles only or both). + * @param[in] ignoreHorizontalAlignment Whether to ignore the horizontal alignment (i.e. always render as if HORIZONTAL_ALIGN_BEGIN). + * @param[in] pixelFormat The format of the pixel in the image that the text is rendered as (i.e. either Pixel::BGRA8888 or Pixel::L8). * * @return A pixel data with the text rendered. */ - PixelData Render( const Vector2& size ); + PixelData Render( const Vector2& size, RenderBehaviour behaviour = RENDER_TEXT_AND_STYLES, bool ignoreHorizontalAlignment = false, Pixel::Format pixelFormat = Pixel::RGBA8888 ); private: /** @@ -92,6 +124,46 @@ private: // Declared private and left undefined to avoid copies. Typesetter& operator=( const Typesetter& handle ); + /** + * @brief Create the image buffer for the given range of the glyphs in the given style. + * + * Does the following operations: + * - Retrieves the data buffers from the text model. + * - Creates the pixel data used to generate the final image with the given size. + * - Traverse the visible glyphs, retrieve their bitmaps and compose the final pixel data. + * + * @param[in] bufferWidth The width of the image buffer. + * @param[in] bufferHeight The height of the image buffer. + * @param[in] style The style of the text. + * @param[in] ignoreHorizontalAlignment Whether to ignore the horizontal alignment, not ignored by default. + * @param[in] pixelFormat The format of the pixel in the image that the text is rendered as (i.e. either Pixel::BGRA8888 or Pixel::L8). + * @param[in] verticalOffset The vertical offset to be added to the glyph's position. + * @param[in] fromGlyphIndex The index of the first glyph within the text to be drawn + * @param[in] toGlyphIndex The index of the last glyph within the text to be drawn + * + * @return An image buffer with the text. + */ + Devel::PixelBuffer CreateImageBuffer( const unsigned int bufferWidth, const unsigned int bufferHeight, Typesetter::Style style, bool ignoreHorizontalAlignment, Pixel::Format pixelFormat, int verticalOffset, TextAbstraction::GlyphIndex fromGlyphIndex, TextAbstraction::GlyphIndex toGlyphIndex ); + + /** + * @brief Combine the two RGBA image buffers together. + * + * The top layer buffer will blend over the bottom layer buffer: + * - If the pixel is not fully opaque from either buffer, it will be blended with + * the pixel from the other buffer and copied to the combined buffer. + * - If the pixels from both buffers are fully opaque, the pixels from the top layer + * buffer will be copied to the combined buffer. + * + * @param[in] topPixelBuffer The top layer buffer. + * @param[in] bottomPixelBuffer The bottom layer buffer. + * @param[in] bufferWidth The width of the image buffer. + * @param[in] bufferHeight The height of the image buffer. + * + * @return The combined image buffer with the text. + * + */ + Devel::PixelBuffer CombineImageBuffer( Devel::PixelBuffer topPixelBuffer, Devel::PixelBuffer bottomPixelBuffer, const unsigned int bufferWidth, const unsigned int bufferHeightbool ); + protected: /** @@ -102,6 +174,7 @@ protected: virtual ~Typesetter(); private: + ViewModel* mModel; };