X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fsp-font-face.cpp;h=1ec6f4601b90e3a389e7c09c215af002eea7aa6d;hb=b50ad86b7ef2cb76fcaa91c27a579837be8f0fd2;hp=f4eb8be4cc3e42033104e95deac157b228a34a85;hpb=3400f9ac91627d6344cb4aa461c6513f6922b86a;p=inkscape.git diff --git a/src/sp-font-face.cpp b/src/sp-font-face.cpp index f4eb8be4c..1ec6f4601 100644 --- a/src/sp-font-face.cpp +++ b/src/sp-font-face.cpp @@ -1,10 +1,15 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#ifdef ENABLE_SVG_FONTS #define __SP_FONTFACE_C__ /* * SVG element implementation * * Section 20.8.3 of the W3C SVG 1.1 spec - * available at: + * available at: * http://www.w3.org/TR/SVG/fonts.html#FontFaceElement * * Author: @@ -21,6 +26,7 @@ #include "document.h" #include "helper-fns.h" +//TODO: apparently unused. Maybe should be removed. class ObjectContainer { @@ -59,7 +65,7 @@ static std::vector sp_read_fontFaceStyleType(gchar const *val v.push_back(SP_FONTFACE_STYLE_ALL); return v; } - + if (strncmp(value, "all", 3) == 0){ value += 3; while(value[0]==',' || value[0]==' ') @@ -131,7 +137,7 @@ static std::vector sp_read_fontFaceWeightType(gchar const *v v.push_back(SP_FONTFACE_WEIGHT_ALL); return v; } - + if (strncmp(value, "all", 3) == 0){ value += 3; while(value[0]==',' || value[0]==' ') @@ -222,7 +228,7 @@ static std::vector sp_read_fontFaceStretchType(gchar const v.push_back(SP_FONTFACE_STRETCH_NORMAL); return v; } - + if (strncmp(value, "all", 3) == 0){ value += 3; while(value[0]==',' || value[0]==' ') @@ -292,7 +298,7 @@ static void sp_fontface_init(SPFontFace *font); static void sp_fontface_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr); static void sp_fontface_release(SPObject *object); static void sp_fontface_set(SPObject *object, unsigned int key, const gchar *value); -static Inkscape::XML::Node *sp_fontface_write(SPObject *object, Inkscape::XML::Node *repr, guint flags); +static Inkscape::XML::Node *sp_fontface_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); static void sp_fontface_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref); static void sp_fontface_remove_child(SPObject *object, Inkscape::XML::Node *child); @@ -307,15 +313,15 @@ GType sp_fontface_get_type(void) if (!type) { GTypeInfo info = { sizeof(SPFontFaceClass), - NULL, /* base_init */ - NULL, /* base_finalize */ + NULL, /* base_init */ + NULL, /* base_finalize */ (GClassInitFunc) sp_fontface_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ + NULL, /* class_finalize */ + NULL, /* class_data */ sizeof(SPFontFace), - 16, /* n_preallocs */ + 16, /* n_preallocs */ (GInstanceInitFunc) sp_fontface_init, - NULL, /* value_table */ + NULL, /* value_table */ }; type = g_type_register_static(SP_TYPE_OBJECT, "SPFontFace", &info, (GTypeFlags) 0); } @@ -355,8 +361,8 @@ static void sp_fontface_init(SPFontFace *face) std::vector stretch; stretch.push_back(SP_FONTFACE_STRETCH_NORMAL); face->font_stretch = stretch; -/* face->font_family = NULL; + /* //face->font_style = ; //face->font_variant = ; //face->font_weight = ; @@ -433,7 +439,7 @@ static void sp_fontface_build(SPObject *object, SPDocument *document, Inkscape:: sp_object_read_attr(object, "overline-thickness"); } -static void sp_fontface_children_modified(SPFontFace *sp_fontface) +static void sp_fontface_children_modified(SPFontFace */*sp_fontface*/) { } @@ -487,283 +493,233 @@ static void sp_fontface_set(SPObject *object, unsigned int key, const gchar *val std::vector stretch; switch (key) { - case SP_PROP_FONT_STYLE: + case SP_PROP_FONT_FAMILY: + if (face->font_family) g_free(face->font_family); + face->font_family = g_strdup(value); + object->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; + case SP_PROP_FONT_STYLE: style = sp_read_fontFaceStyleType(value); if (face->font_style.size() != style.size()){ face->font_style = style; -g_warning(": SP_ATTR_FONT_STYLE:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); } else { for (unsigned int i=0;ifont_style[i]){ face->font_style = style; -g_warning(": SP_ATTR_FONT_STYLE:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); break; } } } break; - case SP_PROP_FONT_VARIANT: + case SP_PROP_FONT_VARIANT: variant = sp_read_fontFaceVariantType(value); if (face->font_variant.size() != variant.size()){ face->font_variant = variant; -g_warning(": SP_ATTR_FONT_VARIANT:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); } else { for (unsigned int i=0;ifont_variant[i]){ face->font_variant = variant; -g_warning(": SP_ATTR_FONT_VARIANT:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); break; } } } break; - case SP_PROP_FONT_WEIGHT: + case SP_PROP_FONT_WEIGHT: weight = sp_read_fontFaceWeightType(value); if (face->font_weight.size() != weight.size()){ face->font_weight = weight; -g_warning(": SP_ATTR_FONT_WEIGHT:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); } else { for (unsigned int i=0;ifont_weight[i]){ face->font_weight = weight; -g_warning(": SP_ATTR_FONT_WEIGHT:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); break; } } } break; - case SP_PROP_FONT_STRETCH: + case SP_PROP_FONT_STRETCH: stretch = sp_read_fontFaceStretchType(value); if (face->font_stretch.size() != stretch.size()){ face->font_stretch = stretch; -g_warning(": SP_ATTR_FONT_STRETCH:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); } else { for (unsigned int i=0;ifont_stretch[i]){ face->font_stretch = stretch; -g_warning(": SP_ATTR_FONT_STRETCH:"); - for (unsigned int i=0;irequestModified(SP_OBJECT_MODIFIED_FLAG); break; } } } break; - case SP_ATTR_UNITS_PER_EM: + case SP_ATTR_UNITS_PER_EM: number = helperfns_read_number(value); if (number != face->units_per_em){ face->units_per_em = number; -g_warning(": SP_ATTR_UNITS_PER_EM: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_STEMV: + case SP_ATTR_STEMV: number = helperfns_read_number(value); if (number != face->stemv){ face->stemv = number; -g_warning(": SP_ATTR_STEMV: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_STEMH: + case SP_ATTR_STEMH: number = helperfns_read_number(value); if (number != face->stemh){ face->stemh = number; -g_warning(": SP_ATTR_STEMH: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_SLOPE: + case SP_ATTR_SLOPE: number = helperfns_read_number(value); if (number != face->slope){ face->slope = number; -g_warning(": SP_ATTR_SLOPE: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_CAP_HEIGHT: + case SP_ATTR_CAP_HEIGHT: number = helperfns_read_number(value); if (number != face->cap_height){ face->cap_height = number; -g_warning(": SP_ATTR_CAP_HEIGHT: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_X_HEIGHT: + case SP_ATTR_X_HEIGHT: number = helperfns_read_number(value); if (number != face->x_height){ face->x_height = number; -g_warning(": SP_ATTR_X_HEIGHT: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_ACCENT_HEIGHT: + case SP_ATTR_ACCENT_HEIGHT: number = helperfns_read_number(value); if (number != face->accent_height){ face->accent_height = number; -g_warning(": SP_ATTR_ACCENT_HEIGHT: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_ASCENT: + case SP_ATTR_ASCENT: number = helperfns_read_number(value); if (number != face->ascent){ face->ascent = number; -g_warning(": SP_ATTR_ASCENT: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_DESCENT: + case SP_ATTR_DESCENT: number = helperfns_read_number(value); if (number != face->descent){ face->descent = number; -g_warning(": SP_ATTR_DESCENT: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_IDEOGRAPHIC: + case SP_ATTR_IDEOGRAPHIC: number = helperfns_read_number(value); if (number != face->ideographic){ face->ideographic = number; -g_warning(": SP_ATTR_IDEOGRAPHIC: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_ALPHABETIC: + case SP_ATTR_ALPHABETIC: number = helperfns_read_number(value); if (number != face->alphabetic){ face->alphabetic = number; -g_warning(": SP_ATTR_ALPHABETIC: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_MATHEMATICAL: + case SP_ATTR_MATHEMATICAL: number = helperfns_read_number(value); if (number != face->mathematical){ face->mathematical = number; -g_warning(": SP_ATTR_MATHEMATICAL: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_HANGING: + case SP_ATTR_HANGING: number = helperfns_read_number(value); if (number != face->hanging){ face->hanging = number; -g_warning(": SP_ATTR_HANGING: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_V_IDEOGRAPHIC: + case SP_ATTR_V_IDEOGRAPHIC: number = helperfns_read_number(value); if (number != face->v_ideographic){ face->v_ideographic = number; -g_warning(": SP_ATTR_V_IDEOGRAPHIC: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_V_ALPHABETIC: + case SP_ATTR_V_ALPHABETIC: number = helperfns_read_number(value); if (number != face->v_alphabetic){ face->v_alphabetic = number; -g_warning(": SP_ATTR_V_ALPHABETIC: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_V_MATHEMATICAL: + case SP_ATTR_V_MATHEMATICAL: number = helperfns_read_number(value); if (number != face->v_mathematical){ face->v_mathematical = number; -g_warning(": SP_ATTR_V_MATHEMATICAL: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_V_HANGING: + case SP_ATTR_V_HANGING: number = helperfns_read_number(value); if (number != face->v_hanging){ face->v_hanging = number; -g_warning(": SP_ATTR_V_HANGING: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_UNDERLINE_POSITION: + case SP_ATTR_UNDERLINE_POSITION: number = helperfns_read_number(value); if (number != face->underline_position){ face->underline_position = number; -g_warning(": SP_ATTR_UNDERLINE_POSITION: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_UNDERLINE_THICKNESS: + case SP_ATTR_UNDERLINE_THICKNESS: number = helperfns_read_number(value); if (number != face->underline_thickness){ face->underline_thickness = number; -g_warning(": SP_ATTR_UNDERLINE_THICKNESS: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_STRIKETHROUGH_POSITION: + case SP_ATTR_STRIKETHROUGH_POSITION: number = helperfns_read_number(value); if (number != face->strikethrough_position){ face->strikethrough_position = number; -g_warning(": SP_ATTR_STRIKETHROUGH_POSITION: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_STRIKETHROUGH_THICKNESS: + case SP_ATTR_STRIKETHROUGH_THICKNESS: number = helperfns_read_number(value); if (number != face->strikethrough_thickness){ face->strikethrough_thickness = number; -g_warning(": SP_ATTR_STRIKETHROUGH_THICKNESS: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_OVERLINE_POSITION: + case SP_ATTR_OVERLINE_POSITION: number = helperfns_read_number(value); if (number != face->overline_position){ face->overline_position = number; -g_warning(": SP_ATTR_OVERLINE_POSITION: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - case SP_ATTR_OVERLINE_THICKNESS: + case SP_ATTR_OVERLINE_THICKNESS: number = helperfns_read_number(value); if (number != face->overline_thickness){ face->overline_thickness = number; -g_warning(": SP_ATTR_OVERLINE_THICKNESS: %f", number); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; - default: + default: if (((SPObjectClass *) (parent_class))->set) { ((SPObjectClass *) (parent_class))->set(object, key, value); } @@ -820,12 +776,11 @@ sp_fontface_update(SPObject *object, SPCtx *ctx, guint flags) #define COPY_ATTR(rd,rs,key) (rd)->setAttribute((key), rs->attribute(key)); -static Inkscape::XML::Node *sp_fontface_write(SPObject *object, Inkscape::XML::Node *repr, guint flags) +static Inkscape::XML::Node *sp_fontface_write(SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { SPFontFace *face = SP_FONTFACE(object); if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { - Inkscape::XML::Document *xml_doc = sp_document_repr_doc(SP_OBJECT_DOCUMENT(object)); repr = xml_doc->createElement("svg:font-face"); } @@ -901,12 +856,12 @@ static Inkscape::XML::Node *sp_fontface_write(SPObject *object, Inkscape::XML::N } if (((SPObjectClass *) (parent_class))->write) { - ((SPObjectClass *) (parent_class))->write(object, repr, flags); + ((SPObjectClass *) (parent_class))->write(object, xml_doc, repr, flags); } return repr; } - +#endif //#ifdef ENABLE_SVG_FONTS /* Local Variables: mode:c++