/**************************************************************************** * * The MIT License (MIT) * * Copyright 2020 NXP * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * 'Software'), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sub license, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject * to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * IN NO EVENT SHALL VIVANTE AND/OR ITS SUPPLIERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * *****************************************************************************/ #ifndef _vg_lite_text_h_ #define _vg_lite_text_h_ #ifdef __cplusplus extern "C" { #endif #include "vg_lite.h" /* Macros *********************************************************************/ #define MAX_FONT_NAME_LEN (64) #define VG_LITE_INVALID_FONT (-1) #define INVALID_FONT_PROPERTY_IDX (-1) /* Types **********************************************************************/ /*! @abstract Font Type enumeration @discussion This enumeration defines supported high level font type type. */ typedef enum eFontType { eFontTypeVector, eFontTypeRaster } eFontType_t; /*! @abstract Font weight enumeration @discussion This enumeration defines font weight that maps to css specification */ typedef enum eFontWeight { eFontWeightThin = 100, /*! Thin, Hairline, Ultra-light, Extra-light */ eFontWeightLight = 200, /*! Light */ eFontWeightBook = 300, /*! Book */ eFontWeightRegular = 400, /*! Regular, Normal, Plain, Roman, Standard */ eFontWeightMedium = 500, /*! Medium */ eFontWeightSemiBold = 600, /*! Semi-bold, Demi-bold */ eFontWeightBold = 700, /*! Bold */ eFontWeightHeavy = 800, /*! Heavy, Black, Extra-bold */ eFontUltraBlack = 900, /*! Ultra-black, Extra-black, Ultra-bold, Heavy-black, Fat, Poster */ } eFontWeight_t; /*! @abstract Font stretch enumeration @discussion This enumeration defines font stretch that maps to css specification */ typedef enum eFontStretch { eFontStretchUltraCondensed = 1, /*! ultra-condensed */ eFontStretchExtraCondensed = 2, /*! extra-condensed */ eFontStretchCondensed = 3, /*! condensed */ eFontStretchSemiCondensed = 4, /*! semi-condensed */ eFontStretchNormal = 5, /*! normal */ eFontStretchSemiExpanded = 6, /*! semi-expanded */ eFontStretchExpanded = 7, /*! expanded */ eFontStretchExtraExpanded = 8, /*! extra-expanded */ eFontStretchUltraExpanded = 9, /*! ultra-expanded */ } eFontStretch_t; /*! @abstract Font style enumeration @discussion This enumeration defines font style that maps to css specification */ typedef enum eFontStyle { eFontStyleNormal = 1, /*! normal */ eFontStyleItalic = 2, /*! italic, oblique */ } eFontStyle_t; /*! @abstract Text alignment enumeration @discussion This enumeration defines text alignment that maps to css specification */ typedef enum eTextAlign { eTextAlignLeft, eTextAlignCenter, eTextAlignRight, eTextAlignJustify, } eTextAlign_t; /* Structures *****************************************************************/ /*! @abstract Font parameters @discussion This datastructure specifies application font and its data. Application can register as many font as required using vg_lite_register_font And lateron refer them in vg_lite_draw_text API for raster fonts mandatory fields are: name, font_weight, font_stretch, font_style, font_height data, data_len for vector fonts mandatory fields are: name, data, data_len */ typedef struct vg_lite_font_params { char name[MAX_FONT_NAME_LEN]; /*! font-family name */ eFontType_t font_type; /*! Raster/Vector font */ eFontWeight_t font_weight; /*! Font weight enum value */ eFontStretch_t font_stretch; /*! Font stretch enum value */ eFontStyle_t font_style; /*! Font style enum value */ int font_height; /*! Font height in pixels */ int data_len; /*! Font data buffer length */ void *data; /*! the address where the actual font data is stored; it is the * responsibility of the user/application to load it there */ } vg_lite_font_params_t; /*! @abstract Opaque type for font descriptor @discussion This is an index of into font-table. Font table can have atmost MAX_SYSTEM_FONTS font, registering more font results in an error. */ typedef uint32_t vg_lite_font_t; /*! @abstract Runtime parameter to render text using given font @discussion These parameters controls rendering of text using given font. */ typedef struct { /* Application controllable parameters */ int justify; /*! Equal justify given text in text display area */ int alignment; /*! Ailgn text to left, center or right */ int width; /*! Internal variable computed based on active font */ int height; /*! Internal variable computed based on active font */ unsigned int text_color; /*! Foreground text color */ unsigned int bg_color; /*! Background text color */ int tspan_has_dx_dy; /*! 0 means tspan element has x,y values 1 means tspan element has dx, dy values so use last_x+dx for x, last_y+dy for y */ int is_vector_font; /*! 1 when active font is vector font, 0 otherwise */ int margin; /*! Left and right margin in pixels that should be skipped by text rendering engine */ int anchor; /*! Anchor text */ int scale; /*! Flag that indicate if text rendering engine should scale text */ /* Internal parameters of text rendering engine. Application code should not modify these parameters */ int font_height; /*! Font height in pixels, parameter from svg */ int last_x; /*! Last x position of text element */ int last_y; /*! Last y position of text element */ int last_dx; /*! Horizontal width of text in pixels, for last text */ } vg_lite_font_attributes_t; /* API Function prototypes ****************************************************/ /*! @abstract Registers application specific font in vg_ltie driver. @discussion Using vg_lite_register_font application can register active fonts that vg_lite_draw_text uses to render text. for raster fonts mandatory fields of vg_lite_font_params_t are: name, font_weight, font_stretch, font_style, font_height data, data_len for vector fonts mandatory fields of vg_lite_font_params_t are: name, data, data_len On successful registeration font poiter will get non-negative application handle. @param font Pointer to font handle @param params Pointer to font parameters that are used by vg_lite_find_font to select specific font for rendering text @result Returns the status as defined by vg_lite_error_t. VG_LITE_SUCCESS when font registation is success VG_LITE_INVALID_ARGUMENT When parameter pointer is invalid VG_LITE_ALREADY_EXISTS if font name already exists VG_LITE_OUT_OF_RESOURCES if active font exceeds MAX_SYSTEM_FONTS */ vg_lite_error_t vg_lite_register_font( vg_lite_font_t *font, vg_lite_font_params_t *params); /*! @abstract Un-registers application specific font in vg_ltie driver. @discussion vg_lite_unregister_font unregisters application speciific font form vg_lite driver. This font can not be used lateron by vg_lite_draw_text API. @param font Pointer to font handle @result Returns the status as defined by vg_lite_error_t. VG_LITE_SUCCESS when font registation is success VG_LITE_INVALID_ARGUMENT if font handle is invalid */ vg_lite_error_t vg_lite_unregister_font(vg_lite_font_t font); /*! @abstract Check if given font is vector/raster ? @discussion vg_lite_is_vector_font API lookups active fonts in vg_lite driver and if font it found it return 1 if it points to vector font otherwise it return 0; @param font Pointer to font handle @result Returns the status as defined by vg_lite_error_t. VG_LITE_SUCCESS when font registation is success VG_LITE_INVALID_ARGUMENT if font handle is invalid */ int vg_lite_is_vector_font(vg_lite_font_t font); /*! @abstract This API renders text with specified font on render target. @discussion This API can reder text using user supplied font. Text rendering can be controlled by vg_lite_font_attributes_t. @param target Pointer to render target @param text ASCII text that needs to be rendered on render @param font Pointer to font handle @param x x position in pixels in X-axis for text rendering @param y y position in pixels in Y-axis for text rendering @param matrix Translation matrix that is used while rendering text. @attention Scaling and rotation matrix are not supported. @param blend Specifies how text gets blened in text area. Typical value is ELM_BLEND_SRC_OVER @param attributes Font attributes that controls how text gets rendered in render buffer. @result Returns the status as defined by vg_lite_error_t. VG_LITE_SUCCESS when font registation is success VG_LITE_INVALID_ARGUMENT if input parameters have any issue */ vg_lite_error_t vg_lite_draw_text( vg_lite_buffer_t *target, char *text, vg_lite_font_t font, int x, int y, vg_lite_matrix_t *matrix, vg_lite_blend_t blend, vg_lite_font_attributes_t *attributes); /*! @abstract This API searches registered font for given name with requested rendering capabilities. @discussion This API searches registered font for given name with requested rendering capabilities. for raster fonts following fields are compared name, font_weight, font_stretch, font_style, font_height for vector fonts following fields are compared name @param font_name Font name @param font_weight Font weight value from eFontWeight_t @param font_stretch Font stretch value from eFontStretch_t @param font_style Font style value from eFontStyle_t @param font_height Font height in pixels If during font lookup a validate font is found then it retuns its handle. @result Returns valid font handle or an error code. Valid font handle if input parameters matches any of registerd font. INVALID_FONT if input parameters don't match registered fonts. */ vg_lite_font_t vg_lite_find_font( char *font_name, eFontWeight_t font_weight, eFontStretch_t font_stretch, eFontStyle_t font_style, int font_height); /*! @abstract Initializes support for text drawing. */ void vg_lite_text_init(void); #ifdef __cplusplus } #endif #endif /* _vg_lite_text_h_ */