208 lines
5.9 KiB
C

/****************************************************************************
*
* 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.
*
*****************************************************************************/
#include "Elm.h"
#include "velm.h"
#ifndef _elm_text_h_
#define _elm_text_h_
#ifdef __cplusplus
extern "C" {
#endif
typedef enum eElemType {
eElemTypeLinearGradient = 0,
eElemTypePath = 1,
eElemTypeGroup = 2,
eElemTypeText = 3,
eElemTypeTspan = 4,
eElemTypeFont = 5,
eElemTypeTtfFont = 6,
eElemTypeVectorFont = 7,
eElemTypeTextFont = 8,
} eElemType_t;
typedef enum eFontVariant {
eFontVariantNormal = 1,
eFontVariantSmallCaps = 2,
eFontVariantInherit = 3,
} eFontVariant_t;
typedef enum eDisplayAlign {
eDisplayAlignBefore = 1,
eDisplayAlignCenter = 2,
eDisplayAlignAfter = 3,
eDisplayAlignAuto = 1,
} eDisplayAlign_t;
typedef enum eFontFields {
HORIZ_ADV_X = 0,
HORIZ_ORIGIN_X = 1,
ASCENT = 2,
ALPHABETIC = 3,
BBOX = 4,
CAP_HEIGHT = 5,
DESCENT = 6,
FONT_FAMILY = 7,
FONT_SIZE = 8,
FONT_STRETCH = 9,
FONT_STYLE = 10,
FONT_TYPE = 11,
FONT_VARIANT = 12,
FONT_WEIGHT = 13,
SLOPE = 14,
UNICODE_RANGE = 15,
UNITS_PER_EM = 16,
X_HEIGHT = 17,
TEXT_ANCHOR = 18,
MAX_FONT_ATTRIBUTES = 19,
} eFontFields_t;
typedef struct glyph {
uint8_t glyph_name;
uint8_t unicode;
uint32_t horiz_adv_x;
uint32_t path_data_length;
void *path_data;
} glyph_t;
typedef struct glyph_table {
uint32_t offset;
uint32_t size;
} glyph_table_t;
typedef union value_type {
uint32_t i_value;
float f_value;
char *data;
} value_type_t;
typedef struct font_field_info {
value_type_t value;
eFontFields_t eName;
} font_field_info_t;
typedef struct font_fields {
font_field_info_t info;
uint32_t offset;
uint32_t size;
unsigned char *data;
} font_fields_t;
typedef struct vector_font {
uint32_t id;
eElemType_t type;
uint32_t num_fields;
font_fields_t *fields;
glyph_table_t *glyph_table;
glyph_t *glyph_offset;
} vector_font_t;
typedef struct ttf_font {
uint32_t id;
eElemType_t type;
uint32_t num_fields;
font_fields_t *fields;
} ttf_font_t;
typedef struct font_prop {
uint32_t num_props;
font_fields_t *prop_values;
} font_prop_t;
typedef struct font_block {
uint32_t size;
eElemType_t type;
uint32_t num_ttf_fonts;
uint32_t num_vector_fonts;
uint32_t num_text_fonts;
uint32_t ttf_fonts_block_offset;
uint32_t ttf_fonts_block_length;
uint32_t vector_fonts_block_offset;
uint32_t vector_fonts_block_length;
uint32_t text_fonts_block_offset;
uint32_t text_fonts_block_length;
uint32_t property_block_offset;
uint32_t property_block_length;
font_prop_t *font_prop;
unsigned int *sizes_of_ttf_data;
unsigned int *offsets_of_ttf_data;
ttf_font_t *ttf_fonts;
unsigned int *sizes_of_vector_data;
unsigned int *offsets_of_vector_data;
vector_font_t *vector_fonts;
unsigned int *sizes_of_text_font_data;
unsigned int *offsets_of_text_font_data;
ttf_font_t *text_fonts;
} font_block_t;
typedef struct {
el_Object object;
el_Attribute attribute;
el_Attribute defaultAttrib;
uint32_t tspan_has_dx_dy;
uint32_t text_anchor;
uint32_t font_size;
uint32_t font_id;
uint32_t x_pos;
uint32_t y_pos;
unsigned char *msg;
} el_Obj_TEXT;
typedef enum eAppProperties {
eFontNameProperty,
eFontHeightProperty,
eFontWeightProperty,
eFontStretchProperty,
eFontStyleProperty,
eTextColorProperty,
eTextAlignProperty,
eMaxFontProperties,
} eAppProperties_t;
vg_lite_error_t draw_text(el_Obj_Buffer *buff,
el_Obj_EVO *evo, vg_lite_matrix_t *mat);
extern font_block_t *fontblockobj;
int _load_font_data(uint8_t *data);
ElmHandle _load_text_data(uint8_t *data, el_Obj_EVO *evo);
void _unload_text(el_Obj_EVO *evo);
void _init_transform(el_Transform *transform);
void initialize_elm_text(void);
void destroy_font_data();
void _release_default_text_parameters(void);
#ifdef __cplusplus
}
#endif
#endif /* _elm_text_h_ */