diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2015-01-05 09:35:44 +0000 |
|---|---|---|
| committer | tavmjong-free <tavmjong@free.fr> | 2015-01-05 09:35:44 +0000 |
| commit | f8ba98f4439051bc268013a5aa0b0e2a97a45303 (patch) | |
| tree | 74c44cf15afb1856af20329259c7f62081751ecd /src/document.cpp | |
| parent | Fix for Bug #1407326 (Typo (toogle) in filletchanferpoinarray.cpp). (diff) | |
| download | inkscape-f8ba98f4439051bc268013a5aa0b0e2a97a45303.tar.gz inkscape-f8ba98f4439051bc268013a5aa0b0e2a97a45303.zip | |
Avoid calling root->updateRepr() twice when changing width and height.
(bzr r13837)
Diffstat (limited to 'src/document.cpp')
| -rw-r--r-- | src/document.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/document.cpp b/src/document.cpp index c7d14727a..4b074c2fa 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -610,6 +610,35 @@ Inkscape::Util::Unit const& SPDocument::getSVGUnit() const return nv ? nv->getSVGUnit() : *unit_table.getUnit("px"); } +// Avoid calling root->updateRepr() twice by combining setting width and height. +// (As done on every delete as clipboard calls this via fitToRect(). Also called in page-sizer.cpp) +void SPDocument::setWidthAndHeight(const Inkscape::Util::Quantity &width, const Inkscape::Util::Quantity &height, bool changeSize) +{ + Inkscape::Util::Unit const *old_width_units = unit_table.getUnit("px"); + if (root->width.unit) + old_width_units = unit_table.getUnit(root->width.unit); + gdouble old_width_converted = Inkscape::Util::Quantity::convert(root->width.value, old_width_units, width.unit); + + root->width.computed = width.value("px"); + root->width.value = width.quantity; + root->width.unit = (SVGLength::Unit) width.unit->svgUnit(); + + Inkscape::Util::Unit const *old_height_units = unit_table.getUnit("px"); + if (root->height.unit) + old_height_units = unit_table.getUnit(root->height.unit); + gdouble old_height_converted = Inkscape::Util::Quantity::convert(root->height.value, old_height_units, height.unit); + + root->height.computed = height.value("px"); + root->height.value = height.quantity; + root->height.unit = (SVGLength::Unit) height.unit->svgUnit(); + + if (root->viewBox_set && changeSize) + root->viewBox.setMax(Geom::Point( + root->viewBox.left() + (root->width.value / old_width_converted ) * root->viewBox.width(), + root->viewBox.top() + (root->height.value / old_height_converted) * root->viewBox.height())); + root->updateRepr(); +} + Inkscape::Util::Quantity SPDocument::getWidth() const { g_return_val_if_fail(this->priv != NULL, Inkscape::Util::Quantity(0.0, unit_table.getUnit(""))); @@ -739,9 +768,10 @@ void SPDocument::fitToRect(Geom::Rect const &rect, bool with_margins) rect.min() - Geom::Point(margin_left, margin_bottom), rect.max() + Geom::Point(margin_right, margin_top)); - - setWidth(Inkscape::Util::Quantity(Inkscape::Util::Quantity::convert(rect_with_margins.width(), "px", nv_units), nv_units)); - setHeight(Inkscape::Util::Quantity(Inkscape::Util::Quantity::convert(rect_with_margins.height(), "px", nv_units), nv_units)); + setWidthAndHeight( + Inkscape::Util::Quantity(Inkscape::Util::Quantity::convert(rect_with_margins.width(), "px", nv_units), nv_units), + Inkscape::Util::Quantity(Inkscape::Util::Quantity::convert(rect_with_margins.height(), "px", nv_units), nv_units) + ); Geom::Translate const tr( Geom::Point(0, old_height - rect_with_margins.height()) |
