diff options
Diffstat (limited to 'libs/hwui/FontRenderer.h')
| -rw-r--r-- | libs/hwui/FontRenderer.h | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h index 2f7a8ba..4cd902e 100644 --- a/libs/hwui/FontRenderer.h +++ b/libs/hwui/FontRenderer.h @@ -47,7 +47,8 @@ public: * Renders the specified string of text. */ void renderUTF(SkPaint* paint, const char *text, uint32_t start, uint32_t len, - int numGlyphs, int x, int y); + int numGlyphs, int x, int y, + uint8_t *bitmap = NULL, uint32_t bitmapW = 0, uint32_t bitmapH = 0); /** * Creates a new font associated with the specified font state. */ @@ -60,7 +61,10 @@ protected: // Has the cache been invalidated? bool mIsValid; // Location of the cached glyph in the bitmap - // in case we need to resize the texture + // in case we need to resize the texture or + // render to bitmap + uint32_t mStartX; + uint32_t mStartY; uint32_t mBitmapWidth; uint32_t mBitmapHeight; // Also cache texture coords for the quad @@ -73,8 +77,8 @@ protected: uint32_t mAdvanceX; uint32_t mAdvanceY; // Values below contain a glyph's origin in the bitmap - uint32_t mBitmapLeft; - uint32_t mBitmapTop; + int32_t mBitmapLeft; + int32_t mBitmapTop; }; Font(FontRenderer* state, uint32_t fontId, float fontSize); @@ -86,6 +90,8 @@ protected: CachedGlyphInfo* cacheGlyph(SkPaint* paint, int32_t glyph); void updateGlyphCache(SkPaint* paint, const SkGlyph& skiaGlyph, CachedGlyphInfo *glyph); void drawCachedGlyph(CachedGlyphInfo *glyph, int x, int y); + void drawCachedGlyph(CachedGlyphInfo *glyph, int x, int y, + uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH); CachedGlyphInfo* getCachedUTFChar(SkPaint* paint, int32_t utfChar); @@ -181,7 +187,10 @@ protected: Vector<Font*> mActiveFonts; // Texture to cache glyph bitmaps - unsigned char* mTextTexture; + uint8_t* mTextTexture; + const uint8_t* getTextTextureData() const { + return mTextTexture; + } GLuint mTextureId; void checkTextureUpdate(); bool mUploadTexture; @@ -196,6 +205,13 @@ protected: const Rect* mClip; bool mInitialized; + + void computeGaussianWeights(float* weights, int32_t radius); + void horizontalBlur(float* weights, int32_t radius, const uint8_t *source, uint8_t *dest, + int32_t width, int32_t height); + void verticalBlur(float* weights, int32_t radius, const uint8_t *source, uint8_t *dest, + int32_t width, int32_t height); + void blurImage(uint8_t* image, int32_t width, int32_t height, int32_t radius); }; }; // namespace uirenderer |
