summaryrefslogtreecommitdiffstats
path: root/src/sp-text.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2016-10-03 20:51:05 +0000
committerjabiertxof <info@marker.es>2016-10-03 20:51:05 +0000
commit4db35e8a6706ddece9e977e5f26d4a6867ff8cbe (patch)
treef9711f260f694d96e26bf3216fb64f2b38611b2b /src/sp-text.cpp
parentupdate to trunk (diff)
parentMerge in jabiertxof's hover information for measure tool (diff)
downloadinkscape-4db35e8a6706ddece9e977e5f26d4a6867ff8cbe.tar.gz
inkscape-4db35e8a6706ddece9e977e5f26d4a6867ff8cbe.zip
Update to trunk
(bzr r15017.1.35)
Diffstat (limited to 'src/sp-text.cpp')
-rw-r--r--src/sp-text.cpp86
1 files changed, 37 insertions, 49 deletions
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index 4afc38524..b066ca3de 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -29,17 +29,14 @@
#include <glibmm/i18n.h>
#include "svg/svg.h"
-#include "svg/stringstream.h"
#include "display/drawing-text.h"
#include "attributes.h"
#include "document.h"
#include "preferences.h"
#include "desktop.h"
#include "sp-namedview.h"
-#include "style.h"
#include "inkscape.h"
#include "xml/quote.h"
-#include "xml/repr.h"
#include "mod360.h"
#include "sp-title.h"
#include "sp-desc.h"
@@ -52,9 +49,7 @@
#include "text-editing.h"
// For SVG 2 text flow
-#include "livarot/Path.h"
#include "livarot/Shape.h"
-#include "sp-shape.h"
#include "display/curve.h"
/*#####################################################
@@ -98,14 +93,16 @@ void SPText::set(unsigned int key, const gchar* value) {
} else {
switch (key) {
case SP_ATTR_SODIPODI_LINESPACING:
- // convert deprecated tag to css
- if (value) {
+ // convert deprecated tag to css... but only if 'line-height' missing.
+ if (value && !this->style->line_height.set) {
this->style->line_height.set = TRUE;
this->style->line_height.inherit = FALSE;
this->style->line_height.normal = FALSE;
this->style->line_height.unit = SP_CSS_UNIT_PERCENT;
this->style->line_height.value = this->style->line_height.computed = sp_svg_read_percentage (value, 1.0);
}
+ // Remove deprecated attribute
+ this->getRepr()->setAttribute("sodipodi:linespacing", NULL);
this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
break;
@@ -155,9 +152,9 @@ void SPText::update(SPCtx *ctx, guint flags) {
// Create temporary list of children
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child, this);
- l = g_slist_prepend (l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child, this);
+ l = g_slist_prepend (l, &child);
}
l = g_slist_reverse (l);
@@ -235,9 +232,9 @@ void SPText::modified(guint flags) {
// Create temporary list of children
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child, this);
- l = g_slist_prepend (l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child, this);
+ l = g_slist_prepend (l, &child);
}
l = g_slist_reverse (l);
@@ -262,17 +259,17 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) {
+ for (auto& child: children) {
+ if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) {
continue;
}
Inkscape::XML::Node *crepr = NULL;
- if (SP_IS_STRING(child)) {
- crepr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ if (SP_IS_STRING(&child)) {
+ crepr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
} else {
- crepr = child->updateRepr(xml_doc, NULL, flags);
+ crepr = child.updateRepr(xml_doc, NULL, flags);
}
if (crepr) {
@@ -286,15 +283,15 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X
l = g_slist_remove (l, l->data);
}
} else {
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) {
+ for (auto& child: children) {
+ if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) {
continue;
}
- if (SP_IS_STRING(child)) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ if (SP_IS_STRING(&child)) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
} else {
- child->updateRepr(flags);
+ child.updateRepr(flags);
}
}
}
@@ -302,15 +299,6 @@ 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) {
- Inkscape::SVGOStringStream os;
- os << (this->style->line_height.value * 100.0) << "%";
- this->getRepr()->setAttribute("sodipodi:linespacing", os.str().c_str());
- } else {
- 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);
@@ -606,16 +594,16 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio
}
}
- for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) {
- SPString *str = dynamic_cast<SPString *>(child);
+ for (auto& child: root->children) {
+ SPString *str = dynamic_cast<SPString *>(&child);
if (str) {
Glib::ustring const &string = str->string;
// std::cout << " Appending: >" << string << "<" << std::endl;
- layout.appendText(string, root->style, child, &optional_attrs, child_attrs_offset + length);
+ layout.appendText(string, root->style, &child, &optional_attrs, child_attrs_offset + length);
length += string.length();
- } else if (!sp_repr_is_meta_element(child->getRepr())) {
+ } else if (!sp_repr_is_meta_element(child.getRepr())) {
/* ^^^^ XML Tree being directly used here while it shouldn't be.*/
- length += _buildLayoutInput(child, optional_attrs, child_attrs_offset + length, in_textpath);
+ length += _buildLayoutInput(&child, optional_attrs, child_attrs_offset + length, in_textpath);
}
}
@@ -628,9 +616,9 @@ void SPText::rebuildLayout()
Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs;
_buildLayoutInput(this, optional_attrs, 0, false);
layout.calculateFlow();
- for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TEXTPATH(child)) {
- SPTextPath const *textpath = SP_TEXTPATH(child);
+ for (auto& child: children) {
+ if (SP_IS_TEXTPATH(&child)) {
+ SPTextPath const *textpath = SP_TEXTPATH(&child);
if (textpath->originalPath != NULL) {
//g_print("%s", layout.dumpAsText().c_str());
layout.fitToPathAlign(textpath->startOffset, *textpath->originalPath);
@@ -640,9 +628,9 @@ void SPText::rebuildLayout()
//g_print("%s", layout.dumpAsText().c_str());
// set the x,y attributes on role:line spans
- for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TSPAN(child)) {
- SPTSpan *tspan = SP_TSPAN(child);
+ for (auto& child: children) {
+ if (SP_IS_TSPAN(&child)) {
+ SPTSpan *tspan = SP_TSPAN(&child);
if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED)
&& tspan->attributes.singleXYCoordinates() ) {
Inkscape::Text::Layout::iterator iter = layout.sourceToIterator(tspan);
@@ -676,9 +664,9 @@ void SPText::_adjustFontsizeRecursive(SPItem *item, double ex, bool is_root)
item->updateRepr();
}
- for (SPObject *o = item->children; o != NULL; o = o->next) {
- if (SP_IS_ITEM(o))
- _adjustFontsizeRecursive(SP_ITEM(o), ex, false);
+ for(auto& o: item->children) {
+ if (SP_IS_ITEM(&o))
+ _adjustFontsizeRecursive(SP_ITEM(&o), ex, false);
}
}
@@ -695,9 +683,9 @@ void SPText::_adjustCoordsRecursive(SPItem *item, Geom::Affine const &m, double
SP_TREF(item)->attributes.transform(m, ex, ex, is_root);
}
- for (SPObject *o = item->children; o != NULL; o = o->next) {
- if (SP_IS_ITEM(o))
- _adjustCoordsRecursive(SP_ITEM(o), m, ex, false);
+ for(auto& o: item->children) {
+ if (SP_IS_ITEM(&o))
+ _adjustCoordsRecursive(SP_ITEM(&o), m, ex, false);
}
}