X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-font.cpp;h=64f7bd481162cfc4930b6c7b7249b71bde341d98;hb=14185113825510bc55f5816898cee659fd06befe;hp=de272c72faf86eeaa27a7fe6c70104626db52404;hpb=9eb3f5487e349bceb5be7b5c41b20710ee798038;p=inkscape.git diff --git a/src/sp-font.cpp b/src/sp-font.cpp index de272c72f..64f7bd481 100644 --- a/src/sp-font.cpp +++ b/src/sp-font.cpp @@ -9,6 +9,7 @@ * * Author: * Felipe C. da S. Sanches + * Abhishek Sharma * * Copyright (C) 2008, Felipe C. da S. Sanches * @@ -21,7 +22,6 @@ #include "sp-glyph.h" #include "sp-missing-glyph.h" #include "document.h" -#include "helper-fns.h" #include "display/nr-svgfonts.h" @@ -79,15 +79,21 @@ static void sp_font_class_init(SPFontClass *fc) sp_object_class->update = sp_font_update; } +//I think we should have extra stuff here and in the set method in order to set default value as specified at http://www.w3.org/TR/SVG/fonts.html + +// TODO determine better values and/or make these dynamic: +double FNT_DEFAULT_ADV = 90; // TODO determine proper default +double FNT_DEFAULT_ASCENT = 90; // TODO determine proper default +double FNT_UNITS_PER_EM = 90; // TODO determine proper default + static void sp_font_init(SPFont *font) { font->horiz_origin_x = 0; font->horiz_origin_y = 0; - font->horiz_adv_x = 0; -//I think we should have extra stuff here and in the set method in order to set default value as specified at http://www.w3.org/TR/SVG/fonts.html - font->vert_origin_x = 0; - font->vert_origin_y = 0; - font->vert_adv_y = 0; + font->horiz_adv_x = FNT_DEFAULT_ADV; + font->vert_origin_x = FNT_DEFAULT_ADV / 2.0; + font->vert_origin_y = FNT_DEFAULT_ASCENT; + font->vert_adv_y = FNT_UNITS_PER_EM; } static void sp_font_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) @@ -96,14 +102,14 @@ static void sp_font_build(SPObject *object, SPDocument *document, Inkscape::XML: ((SPObjectClass *) (parent_class))->build(object, document, repr); } - sp_object_read_attr(object, "horiz-origin-x"); - sp_object_read_attr(object, "horiz-origin-y"); - sp_object_read_attr(object, "horiz-adv-x"); - sp_object_read_attr(object, "vert-origin-x"); - sp_object_read_attr(object, "vert-origin-y"); - sp_object_read_attr(object, "vert-adv-y"); + object->readAttr( "horiz-origin-x" ); + object->readAttr( "horiz-origin-y" ); + object->readAttr( "horiz-adv-x" ); + object->readAttr( "vert-origin-x" ); + object->readAttr( "vert-origin-y" ); + object->readAttr( "vert-adv-y" ); - sp_document_add_resource(document, "font", object); + document->addResource("font", object); } @@ -145,7 +151,7 @@ sp_font_remove_child(SPObject *object, Inkscape::XML::Node *child) static void sp_font_release(SPObject *object) { //SPFont *font = SP_FONT(object); - sp_document_remove_resource(SP_OBJECT_DOCUMENT(object), "font", object); + SP_OBJECT_DOCUMENT(object)->removeResource("font", object); if (((SPObjectClass *) parent_class)->release) { ((SPObjectClass *) parent_class)->release(object); @@ -155,51 +161,63 @@ static void sp_font_release(SPObject *object) static void sp_font_set(SPObject *object, unsigned int key, const gchar *value) { SPFont *font = SP_FONT(object); - double number; + // TODO these are floating point, so some epsilon comparison would be good switch (key) { case SP_ATTR_HORIZ_ORIGIN_X: - number = helperfns_read_number(value); + { + double number = value ? g_ascii_strtod(value, 0) : 0; if (number != font->horiz_origin_x){ font->horiz_origin_x = number; object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; + } case SP_ATTR_HORIZ_ORIGIN_Y: - number = helperfns_read_number(value); + { + double number = value ? g_ascii_strtod(value, 0) : 0; if (number != font->horiz_origin_y){ font->horiz_origin_y = number; object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; + } case SP_ATTR_HORIZ_ADV_X: - number = helperfns_read_number(value); + { + double number = value ? g_ascii_strtod(value, 0) : FNT_DEFAULT_ADV; if (number != font->horiz_adv_x){ font->horiz_adv_x = number; object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; + } case SP_ATTR_VERT_ORIGIN_X: - number = helperfns_read_number(value); + { + double number = value ? g_ascii_strtod(value, 0) : FNT_DEFAULT_ADV / 2.0; if (number != font->vert_origin_x){ font->vert_origin_x = number; object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; + } case SP_ATTR_VERT_ORIGIN_Y: - number = helperfns_read_number(value); + { + double number = value ? g_ascii_strtod(value, 0) : FNT_DEFAULT_ASCENT; if (number != font->vert_origin_y){ font->vert_origin_y = number; object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; + } case SP_ATTR_VERT_ADV_Y: - number = helperfns_read_number(value); + { + double number = value ? g_ascii_strtod(value, 0) : FNT_UNITS_PER_EM; if (number != font->vert_adv_y){ font->vert_adv_y = number; object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; + } default: if (((SPObjectClass *) (parent_class))->set) { ((SPObjectClass *) (parent_class))->set(object, key, value); @@ -215,12 +233,12 @@ static void sp_font_update(SPObject *object, SPCtx *ctx, guint flags) { if (flags & (SP_OBJECT_MODIFIED_FLAG)) { - sp_object_read_attr(object, "horiz-origin-x"); - sp_object_read_attr(object, "horiz-origin-y"); - sp_object_read_attr(object, "horiz-adv-x"); - sp_object_read_attr(object, "vert-origin-x"); - sp_object_read_attr(object, "vert-origin-y"); - sp_object_read_attr(object, "vert-adv-y"); + object->readAttr( "horiz-origin-x" ); + object->readAttr( "horiz-origin-y" ); + object->readAttr( "horiz-adv-x" ); + object->readAttr( "vert-origin-x" ); + object->readAttr( "vert-origin-y" ); + object->readAttr( "vert-adv-y" ); } if (((SPObjectClass *) parent_class)->update) { @@ -246,12 +264,14 @@ static Inkscape::XML::Node *sp_font_write(SPObject *object, Inkscape::XML::Docum sp_repr_set_svg_double(repr, "vert-adv-y", font->vert_adv_y); if (repr != SP_OBJECT_REPR(object)) { - COPY_ATTR(repr, object->repr, "horiz-origin-x"); - COPY_ATTR(repr, object->repr, "horiz-origin-y"); - COPY_ATTR(repr, object->repr, "horiz-adv-x"); - COPY_ATTR(repr, object->repr, "vert-origin-x"); - COPY_ATTR(repr, object->repr, "vert-origin-y"); - COPY_ATTR(repr, object->repr, "vert-adv-y"); + // All the below COPY_ATTR funtions are directly using + // the XML Tree while they shouldn't + COPY_ATTR(repr, object->getRepr(), "horiz-origin-x"); + COPY_ATTR(repr, object->getRepr(), "horiz-origin-y"); + COPY_ATTR(repr, object->getRepr(), "horiz-adv-x"); + COPY_ATTR(repr, object->getRepr(), "vert-origin-x"); + COPY_ATTR(repr, object->getRepr(), "vert-origin-y"); + COPY_ATTR(repr, object->getRepr(), "vert-adv-y"); } if (((SPObjectClass *) (parent_class))->write) {