]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_decorationinset.C
Fix to bug 2362: Deleting superscript also deletes subscript.
[lyx.git] / src / mathed / math_decorationinset.C
index 2b1d87cadb576b0b17abf0203fa3a259ea50b338..eddbbf7ce17b4654616df51d1a079ecd04692254 100644 (file)
 #include "math_mathmlstream.h"
 #include "math_streamstr.h"
 
-#include "support/std_ostream.h"
+#include "LaTeXFeatures.h"
+#include "debug.h"
 
-using std::auto_ptr;
+#include "support/std_ostream.h"
 
 
 MathDecorationInset::MathDecorationInset(latexkeys const * key)
        : MathNestInset(1), key_(key)
-{}
+{
+//     lyxerr << " creating deco " << key->name << std::endl;
+}
 
 
-auto_ptr<InsetBase> MathDecorationInset::clone() const
+std::auto_ptr<InsetBase> MathDecorationInset::doClone() const
 {
-       return auto_ptr<InsetBase>(new MathDecorationInset(*this));
+       return std::auto_ptr<InsetBase>(new MathDecorationInset(*this));
 }
 
 
@@ -86,6 +89,16 @@ bool MathDecorationInset::wide() const
 }
 
 
+bool MathDecorationInset::ams() const
+{
+       return
+                       key_->name == "overleftrightarrow" ||
+                       key_->name == "underleftarrow" ||
+                       key_->name == "underrightarrow" ||
+                       key_->name == "underleftrightarrow";
+}
+
+
 void MathDecorationInset::metrics(MetricsInfo & mi, Dimension & dim) const
 {
        cell(0).metrics(mi, dim);
@@ -115,6 +128,7 @@ void MathDecorationInset::draw(PainterInfo & pi, int x, int y) const
                mathed_draw_deco(pi, x + 1 + (cell(0).width() - dw_) / 2,
                        y + dy_, dw_, dh_, key_->name);
        drawMarkers(pi, x, y);
+       setPosCache(pi, x, y);
 }
 
 
@@ -136,3 +150,11 @@ void MathDecorationInset::infoize(std::ostream & os) const
 {
        os << "Deco: " << key_->name;
 }
+
+
+void MathDecorationInset::validate(LaTeXFeatures & features) const
+{
+       if (ams())
+               features.require("amsmath");
+       MathNestInset::validate(features);
+}