index 42b321c8d1fa3933ea6158464e2cf8bfff40a3c5..7b0b4938b7584acde2e529e6bac7eb488b3a2734 100644 (file)
* Read the file 'COPYING' for more information.
*/
-#include <libnr/n-art-bpath.h>
+#include <libnr/n-art-bpath-2geom.h>
#include <2geom/pathvector.h>
#include <2geom/transforms.h>
#include "../style.h"
//We use that info to allocate memory for the glyphs
*glyphs = (cairo_glyph_t*) malloc(count*sizeof(cairo_glyph_t));
- char* previous_unicode = NULL; //This is used for kerning
+ char* previous_unicode = NULL; //This is used for kerning
+ gchar* previous_glyph_name = NULL; //This is used for kerning
+
count=0;
double x=0, y=0;//These vars store the position of the glyph within the rendered string
bool is_horizontal_text = true; //TODO
while(_utf8[0] != '\0'){
len = 0;
for (i=0; i < (unsigned long) this->glyphs.size(); i++){
- if ( len = compare_them(this->glyphs[i]->unicode, _utf8) ){
+ if ( (len = compare_them(this->glyphs[i]->unicode, _utf8)) ){
//check whether is there a glyph declared on the SVG document
// that matches with the text string in its current position
for(SPObject* node = this->font->children;previous_unicode && node;node=node->next){
//apply glyph kerning if appropriate
if (SP_IS_HKERN(node) && is_horizontal_text){
- if ( (((SPHkern*)node)->u1[0] == previous_unicode[0]) && (((SPHkern*)node)->u2[0] == this->glyphs[i]->unicode[0]))//TODO: strings
+ if ( (((SPHkern*)node)->u1->contains(previous_unicode[0])
+ || ((SPHkern*)node)->g1->contains(previous_glyph_name)) &&
+ (((SPHkern*)node)->u2->contains(this->glyphs[i]->unicode[0])
+ || ((SPHkern*)node)->g2->contains(this->glyphs[i]->glyph_name))
+ )//TODO: verify what happens when using unicode strings.
x -= (((SPHkern*)node)->k / this->font->horiz_adv_x);
}
if (SP_IS_VKERN(node) && !is_horizontal_text){
- if ( (((SPVkern*)node)->u1[0] == previous_unicode[0]) && (((SPVkern*)node)->u2[0] == this->glyphs[i]->unicode[0]))//TODO: strings
+ if ( (((SPVkern*)node)->u1->contains(previous_unicode[0])
+ || ((SPVkern*)node)->g1->contains(previous_glyph_name)) &&
+ (((SPVkern*)node)->u2->contains(this->glyphs[i]->unicode[0])
+ || ((SPVkern*)node)->g2->contains(this->glyphs[i]->glyph_name))
+ )//TODO: idem
y -= (((SPVkern*)node)->k / this->font->vert_adv_y);
}
}
previous_unicode = this->glyphs[i]->unicode;//used for kerning checking
+ previous_glyph_name = this->glyphs[i]->glyph_name;//used for kerning checking
+
(*glyphs)[count].index = i;
(*glyphs)[count].x = x;
(*glyphs)[count++].y = y;