208 lines
5.9 KiB
C
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_ */
|