diff --git a/src/sp-font.cpp b/src/sp-font.cpp
index de272c72faf86eeaa27a7fe6c70104626db52404..64f7bd481162cfc4930b6c7b7249b71bde341d98 100644 (file)
--- a/src/sp-font.cpp
+++ b/src/sp-font.cpp
*
* Author:
* Felipe C. da S. Sanches <juca@members.fsf.org>
+ * Abhishek Sharma
*
* Copyright (C) 2008, Felipe C. da S. Sanches
*
#include "sp-glyph.h"
#include "sp-missing-glyph.h"
#include "document.h"
-#include "helper-fns.h"
#include "display/nr-svgfonts.h"
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);
}
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);
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);
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) {