summaryrefslogtreecommitdiffstats
path: root/src/sp-text.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-text.cpp')
-rw-r--r--src/sp-text.cpp57
1 files changed, 35 insertions, 22 deletions
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index bbc7ec43d..93d81e47b 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -30,7 +30,6 @@
#include <2geom/affine.h>
#include <libnrtype/FontFactory.h>
#include <libnrtype/font-instance.h>
-#include <libnrtype/font-style-to-pos.h>
#include <glibmm/i18n.h>
#include "svg/svg.h"
@@ -70,8 +69,6 @@ namespace {
# SPTEXT
#####################################################*/
SPText::SPText() : SPItem() {
- //new (&this->layout) Inkscape::Text::Layout;
- //new (&this->attributes) TextTagAttributes;
}
SPText::~SPText() {
@@ -84,19 +81,22 @@ void SPText::build(SPDocument *doc, Inkscape::XML::Node *repr) {
this->readAttr( "dy" );
this->readAttr( "rotate" );
+ // SVG 2 Auto wrapped text
+ this->readAttr( "width" );
+ this->readAttr( "height" );
+
SPItem::build(doc, repr);
this->readAttr( "sodipodi:linespacing" ); // has to happen after the styles are read
}
void SPText::release() {
- //this->attributes.~TextTagAttributes();
- //this->layout.~Layout();
-
SPItem::release();
}
void SPText::set(unsigned int key, const gchar* value) {
+ //std::cout << "SPText::set: " << sp_attribute_name( key ) << ": " << (value?value:"Null") << std::endl;
+
if (this->attributes.readSingleAttribute(key, value)) {
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
} else {
@@ -114,6 +114,22 @@ void SPText::set(unsigned int key, const gchar* value) {
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
break;
+ case SP_ATTR_WIDTH:
+ if (!this->width.read(value) || this->width.value < 0.0) {
+ this->width.unset();
+ }
+
+ this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+
+ case SP_ATTR_HEIGHT:
+ if (!this->height.read(value) || this->height.value < 0.0) {
+ this->height.unset();
+ }
+
+ this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+ break;
+
default:
SPItem::set(key, value);
break;
@@ -278,6 +294,7 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X
}
this->attributes.writeTo(repr);
+ this->rebuildLayout(); // copied from update(), see LP Bug 1339305
// deprecated attribute, but keep it around for backwards compatibility
if (this->style->line_height.set && !this->style->line_height.inherit && !this->style->line_height.normal && this->style->line_height.unit == SP_CSS_UNIT_PERCENT) {
@@ -288,6 +305,14 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X
this->getRepr()->setAttribute("sodipodi:linespacing", NULL);
}
+ // SVG 2 Auto-wrapped text
+ if( this->width.computed > 0.0 ) {
+ sp_repr_set_svg_double(repr, "width", this->width.computed);
+ }
+ if( this->height.computed > 0.0 ) {
+ sp_repr_set_svg_double(repr, "height", this->height.computed);
+ }
+
SPItem::write(xml_doc, repr, flags);
return repr;
@@ -331,21 +356,10 @@ const char* SPText::displayName() const {
}
gchar* SPText::description() const {
- SPStyle *style = this->style;
- font_instance *tf = font_factory::Default()->FaceFromStyle(style);
-
- char *n;
+ SPStyle *style = this->style;
- if (tf) {
- char name_buf[256];
- tf->Family(name_buf, sizeof(name_buf));
- n = xml_quote_strdup(name_buf);
- tf->Unref();
- } else {
- /* TRANSLATORS: For description of font with no name. */
- n = g_strdup(_("&lt;no name found&gt;"));
- }
+ char *n = xml_quote_strdup( style->font_family.value );
Inkscape::Util::Quantity q = Inkscape::Util::Quantity(style->font_size.computed, "px");
GString *xs = g_string_new(q.string(sp_desktop_namedview(SP_ACTIVE_DESKTOP)->doc_units).c_str());
@@ -358,9 +372,8 @@ gchar* SPText::description() const {
}
char *ret = ( SP_IS_TEXT_TEXTPATH(this)
- ? g_strdup_printf(_("on path%s (%s, %s)"), trunc, n, xs->str)
- : g_strdup_printf(_("%s (%s, %s)"), trunc, n, xs->str) );
- g_free(n);
+ ? g_strdup_printf(_("on path%s (%s, %s)"), trunc, n, xs->str)
+ : g_strdup_printf(_("%s (%s, %s)"), trunc, n, xs->str) );
return ret;
}