From ec4cecb92ca9c0b27d6dfa6dca35a62d6b3be138 Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Wed, 11 Sep 2013 15:43:07 -0400 Subject: (Mostly) fix document unit change for flowed text. (bzr r12475.1.13) --- src/sp-flowtext.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 1d95c2f8a..304d749c2 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -28,6 +28,7 @@ #include "text-tag-attributes.h" #include "text-chemistry.h" #include "text-editing.h" +#include "sp-text.h" #include "livarot/Shape.h" @@ -50,6 +51,7 @@ static gchar *sp_flowtext_description(SPItem *item); static void sp_flowtext_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs); static Inkscape::DrawingItem *sp_flowtext_show(SPItem *item, Inkscape::Drawing &drawing, unsigned key, unsigned flags); static void sp_flowtext_hide(SPItem *item, unsigned key); +static Geom::Affine sp_flowtext_set_transform(SPItem *item, Geom::Affine const &xform); G_DEFINE_TYPE(SPFlowtext, sp_flowtext, SP_TYPE_ITEM); @@ -76,6 +78,7 @@ sp_flowtext_class_init(SPFlowtextClass *klass) item_class->snappoints = sp_flowtext_snappoints; item_class->show = sp_flowtext_show; item_class->hide = sp_flowtext_hide; + item_class->set_transform = sp_flowtext_set_transform; } static void @@ -700,6 +703,42 @@ SPItem *create_flowtext_with_internal_frame (SPDesktop *desktop, Geom::Point p0, return ft_item; } +static Geom::Affine +sp_flowtext_set_transform (SPItem *item, Geom::Affine const &xform) +{ + if (!xform.isNonzeroUniformScale()) { + return xform; + } + + SPText *text = reinterpret_cast(item); + + double const ex = xform.descrim(); + if (ex == 0) { + return xform; + } + + Geom::Affine ret(xform); + ret[0] /= ex; + ret[1] /= ex; + ret[2] /= ex; + ret[3] /= ex; + + // Adjust font size + text->_adjustFontsizeRecursive (item, ex); + + // Adjust stroke width + item->adjust_stroke_width_recursive (ex); + + // Adjust pattern fill + item->adjust_pattern(xform * ret.inverse()); + + // Adjust gradient fill + item->adjust_gradient(xform * ret.inverse()); + + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); + + return ret; +} /* Local Variables: -- cgit v1.2.3 From 803e249e999ab90caf2e3d61cc6782aa7dd3caba Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Sun, 15 Sep 2013 15:00:40 -0400 Subject: Fix document unit change for transformed flow text and transformed text on path. (bzr r12475.1.18) --- src/sp-flowtext.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 304d749c2..4fc922a82 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -86,6 +86,8 @@ sp_flowtext_init(SPFlowtext *group) { group->par_indent = 0; new (&group->layout) Inkscape::Text::Layout(); + + group->_optimizeScaledText = false; } static void @@ -706,9 +708,13 @@ SPItem *create_flowtext_with_internal_frame (SPDesktop *desktop, Geom::Point p0, static Geom::Affine sp_flowtext_set_transform (SPItem *item, Geom::Affine const &xform) { - if (!xform.isNonzeroUniformScale()) { + SPFlowtext *ft = SP_FLOWTEXT(item); + if ((ft->_optimizeScaledText && !xform.withoutTranslation().isNonzeroUniformScale()) + || (!ft->_optimizeScaledText && !xform.isNonzeroUniformScale())) { + ft->_optimizeScaledText = false; return xform; } + ft->_optimizeScaledText = false; SPText *text = reinterpret_cast(item); -- cgit v1.2.3 From eb3598e7e27619c759ef33bb9ec4ffb8898523de Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 20 Sep 2013 00:45:16 -0400 Subject: Refactor status-bar text for multiple items, was very broken Fixed bugs: - https://launchpad.net/bugs/1199192 (bzr r12550) --- src/sp-flowtext.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/sp-flowtext.cpp') diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index c7ef579ac..9d54ad92b 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -280,17 +280,20 @@ void SPFlowtext::print(SPPrintContext *ctx) { this->layout.print(ctx, pbox, dbox, bbox, ctm); } +const char* SPFlowtext::display_name() { + if (SP_FLOWTEXT(this)->has_internal_frame()) { + return _("Flowed Text"); + } else { + return _("Linked Flowed Text"); + } +} + gchar* SPFlowtext::description() { Inkscape::Text::Layout const &layout = SP_FLOWTEXT(this)->layout; int const nChars = layout.iteratorToCharIndex(layout.end()); - char const *trunc = (layout.inputTruncated()) ? _(" [truncated]") : ""; - if (SP_FLOWTEXT(this)->has_internal_frame()) { - return g_strdup_printf(ngettext("Flowed text (%d character%s)", "Flowed text (%d characters%s)", nChars), nChars, trunc); - } else { - return g_strdup_printf(ngettext("Linked flowed text (%d character%s)", "Linked flowed text (%d characters%s)", nChars), nChars, trunc); - } + return g_strdup_printf(ngettext(_("(%d character%s)"), _("(%d characters%s)"), nChars), nChars, trunc); } void SPFlowtext::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) { -- cgit v1.2.3