// ---------------------------------------------------------------------------- int text_buffer_add_text( text_buffer_t * self, vec2 * pen, markup_t * markup, texture_font_t * font, wchar_t * text ) { vertex_buffer_t * buffer = self->buffer; if( 0 == vertex_buffer_size( self->buffer ) ) self->origin = *pen; if( font->ascender > self->line_ascender ) { size_t i, j; float dy = (int)(font->ascender - self->line_ascender); for( i=self->line_start; i < vector_size( buffer->items ); ++i ) { ivec4 *item = (ivec4 *) vector_get( buffer->items, i); for( j=item->vstart; j<item->vstart+item->vcount; ++j) { glyph_vertex_t * vertex = (glyph_vertex_t *) vector_get( buffer->vertices, j ); vertex->pos.y -= dy; } } self->line_ascender = font->ascender; pen->y -= dy; } if( font->descender < self->line_descender ) { self->line_descender = font->descender; } if(!text[0]) return 0; int rc; if(0 != (rc = text_buffer_add_wchar( self, pen, markup, font, text[0], 0 ))) { return rc; } size_t i; for( i=1; text[i]; ++i ) { if(0 != (rc = text_buffer_add_wchar( self, pen, markup, font, text[i], text[i-1] ))) { return rc; } } return 0; }
// ---------------------------------------------------------------------------- void text_buffer_add_text( text_buffer_t * self, vec2 * pen, markup_t * markup, wchar_t * text, size_t length ) { font_manager_t * manager = self->manager; size_t i; if( markup == NULL ) { return; } if( !markup->font ) { markup->font = font_manager_get_from_markup( manager, markup ); if( ! markup->font ) { fprintf( stderr, "Houston, we've got a problem !\n" ); exit( EXIT_FAILURE ); } } if( length == 0 ) { length = wcslen(text); } if( vertex_buffer_size( self->buffer ) == 0 ) { self->origin = *pen; } text_buffer_add_wchar( self, pen, markup, text[0], 0 ); for( i=1; i<length; ++i ) { text_buffer_add_wchar( self, pen, markup, text[i], text[i-1] ); } }
// ---------------------------------------------------------------------------- void text_buffer_add_text( text_buffer_t * self, vec2 * pen, markup_t * markup, wchar_t * text, size_t length ) { vertex_buffer_t * buffer = self->buffer; font_manager_t * manager = self->manager; if( markup == NULL ) { return; } if( !markup->font ) { markup->font = font_manager_get_from_markup( manager, markup ); if( ! markup->font ) { fprintf( stderr, "Houston, we've got a problem !\n" ); exit( EXIT_FAILURE ); } } if( length == 0 ) { length = wcslen(text); } if( vertex_buffer_size( self->buffer ) == 0 ) { self->origin = *pen; } if( markup->font->ascender > self->line_ascender ) { size_t i, j; float dy = (int)(markup->font->ascender - self->line_ascender); for( i=self->line_start; i < vector_size( buffer->items ); ++i ) { ivec4 *item = (ivec4 *) vector_get( buffer->items, i); for( j=item->vstart; j<item->vstart+item->vcount; ++j) { glyph_vertex_t * vertex = (glyph_vertex_t *) vector_get( buffer->vertices, j ); vertex->y -= dy; } } self->line_ascender = markup->font->ascender; pen->y -= dy; } if( markup->font->descender < self->line_descender ) { self->line_descender = markup->font->descender; } text_buffer_add_wchar( self, pen, markup, text[0], 0 ); size_t i; for( i=1; i<length; ++i ) { text_buffer_add_wchar( self, pen, markup, text[i], text[i-1] ); } }