]> git.lyx.org Git - lyx.git/blobdiff - src/insets/ExternalTransforms.C
The speed patch: redraw only rows that have changed
[lyx.git] / src / insets / ExternalTransforms.C
index 0881679797873e27b17d9e6df617589225d0f9f2..43b69eece17870fd81558d4d0ef30a87cfc722bb 100644 (file)
@@ -16,6 +16,7 @@
 
 #include "support/lstrings.h"
 #include "support/lyxlib.h" // float_equal
+#include "support/convert.h"
 #include "support/translator.h"
 
 #include <boost/regex.hpp>
@@ -52,21 +53,25 @@ bool ResizeData::no_resize() const
 
 bool ResizeData::usingScale() const
 {
-       return !float_equal(scale, 0.0, 0.05);
+       return (!scale.empty() && !float_equal(convert<double>(scale), 0.0, 0.05));
 }
 
 
 bool RotationData::no_rotation() const
 {
-       return (std::abs(angle()) < 0.1);
+       return (angle.empty() || std::abs(convert<double>(angle)) < 0.1);
 }
 
 
-void RotationData::angle(double a)
+string const RotationData::adjAngle() const
 {
-       // Ensure that angle_ lies in the range -360 < angle_ < 360.
-       int const multiples = int(a) / 360;
-       angle_ = a - (multiples * 360);
+       // Ensure that angle lies in the range -360 < angle < 360
+       double rotAngle = convert<double>(angle);
+       if (std::abs(rotAngle) > 360.0) {
+               rotAngle -= 360.0 * floor(rotAngle / 360.0);
+               return convert<string>(rotAngle);
+       }
+       return angle;
 }
 
 
@@ -97,8 +102,8 @@ string const ResizeLatexCommand::front_impl() const
 
        std::ostringstream os;
        if (data.usingScale()) {
-               double const scl = data.scale / 100.0;
-               os << "\\scalebox{" << scl << "}{" << scl << "}{";
+               double const scl = convert<double>(data.scale) / 100.0;
+               os << "\\scalebox{" << scl << "}[" << scl << "]{";
        } else {
                string width  = "!";
                string height = "!";
@@ -194,7 +199,7 @@ string const RotationLatexCommand::front_impl() const
        if (data.origin() != RotationData::DEFAULT)
                os << "[origin=" << data.origin() << ']';
 
-       os << '{' << data.angle() << "}{";
+       os << '{' << data.angle << "}{";
        return os.str();
 }
 
@@ -229,8 +234,9 @@ string const ResizeLatexOption::option_impl() const
 
        std::ostringstream os;
        if (data.usingScale()) {
-               if (!float_equal(data.scale, 100.0, 0.05))
-                       os << "scale=" << data.scale / 100.0 << ',';
+               double const scl = convert<double>(data.scale);
+               if (!float_equal(scl, 100.0, 0.05))
+                       os << "scale=" << scl / 100.0 << ',';
                return os.str();
        }
 
@@ -251,7 +257,7 @@ string const RotationLatexOption ::option_impl() const
                return string();
 
        std::ostringstream os;
-       os << "angle=" << data.angle() << ',';
+       os << "angle=" << data.angle << ',';
 
        if (data.origin() != RotationData::DEFAULT)
                os << "origin=" << data.origin() << ',';
@@ -302,7 +308,7 @@ string const sanitizeLatexOption(string const & input)
 
        // Strip any trailing commas
        // "...foo,,,]" -> "...foo" ("...foo,,," may be empty)
-       static boost::regex const back("^(.*[^,])?(,*)([]] *)$");
+       static boost::regex const back("^(.*[^,])?,*[]] *$");
        regex_match(output, what, back);
        if (!what[0].matched) {
                lyxerr << "Unable to sanitize LaTeX \"Option\": "