]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_decorationinset.C
fix pullArg when pressing <Delete> at the end of an cell
[lyx.git] / src / mathed / math_decorationinset.C
index 6dc0a649b0888f4a1d1432d584fd50f2e11f469e..fb3ae4009c10005c18a01c705ad6ec8fa38b4d34 100644 (file)
@@ -1,5 +1,3 @@
-#include <config.h>
-
 #ifdef __GNUG__
 #pragma implementation
 #endif
@@ -8,14 +6,13 @@
 #include "mathed/support.h"
 #include "math_parser.h"
 #include "support/LOstream.h"
-#include "support/lstrings.h"
 
 
 using std::ostream;
 
 
-MathDecorationInset::MathDecorationInset(int d)
-       : MathInset("", LM_OT_DECO, 1), deco_(d)
+MathDecorationInset::MathDecorationInset(string const & name, int d)
+       : MathInset(1, name), deco_(d)
 {
        upper_ = deco_ != LM_underline && deco_ != LM_underbrace;
 }
@@ -28,29 +25,30 @@ MathInset * MathDecorationInset::clone() const
 
 
 
-void MathDecorationInset::Metrics(MathStyles st)
+void MathDecorationInset::Metrics(MathStyles st, int, int)
 {
-       int const h = 2 * mathed_char_height(LM_TC_VAR, size(), 'I',
-                                            ascent_, descent_);  
        xcell(0).Metrics(st);
+       size_    = st;
        width_   = xcell(0).width();
        ascent_  = xcell(0).ascent();
        descent_ = xcell(0).descent();
 
-       int w = width() + 4;
-
-       dh_ = w / 5;
-       if (dh_ > h)
-               dh_ = h;
+       dh_ = 5; //mathed_char_height(LM_TC_VAR, size(), 'I', ascent_, descent_);  
 
        if (upper_) {
-               ascent_ += dh_ + 2;
-               dy_ = -ascent_;
+               dy_ = -ascent_ - dh_;
+               ascent_ += dh_ + 1;
        } else {
-               dy_ = descent_ + 2;
-               descent_ += dh_ + 4;
+               dy_ = descent_ + 1;
+               descent_ += dh_ + 2;
+       }
+
+       if (deco_ == LM_not) {
+               ascent_  += dh_;
+               descent_ += dh_;
+               dh_ = height();
+               dy_ = - ascent_;
        }
-       width_ = w;
 }
 
 void MathDecorationInset::draw(Painter & pain, int x, int y)
@@ -64,14 +62,28 @@ void MathDecorationInset::draw(Painter & pain, int x, int y)
 
 void MathDecorationInset::Write(ostream & os, bool fragile) const
 {
-       latexkeys const * l = lm_get_key_by_id(deco_, LM_TK_WIDE);
        if (fragile &&
-           (compare(l->name, "overbrace") == 0 ||
-            compare(l->name, "underbrace") == 0 ||
-            compare(l->name, "overleftarrow") == 0 ||
-            compare(l->name, "overrightarrow") == 0))
+                       (name_ == "overbrace" ||
+                        name_ == "underbrace" ||
+                        name_ == "overleftarrow" ||
+                        name_ == "overrightarrow"))
                os << "\\protect";
-       os << '\\' << l->name << '{';
+       os << '\\' << name_;
+
+       if (deco_ == LM_not)
+               os << ' ';
+       else
+               os << '{';
+
        cell(0).Write(os, fragile);  
-       os << '}';
+
+       if (deco_ != LM_not)
+               os << '}';
+}
+
+void MathDecorationInset::WriteNormal(ostream & os) const
+{
+       os << "[" << name_ << " ";
+       cell(0).WriteNormal(os);
+       os << "] ";
 }