]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathScript.cpp
Simplify Changers interface
[lyx.git] / src / mathed / InsetMathScript.cpp
index 37f19654b789b289a9ce997cdbb28d94b24a04b7..7363c885545aebd68a0271fe462265ac17e3e395 100644 (file)
 
 #include <config.h>
 
+#include "InsetMathScript.h"
+
+#include "InsetMathBrace.h"
+#include "InsetMathSymbol.h"
+#include "MathData.h"
+#include "MathStream.h"
+#include "MathSupport.h"
+
 #include "BufferView.h"
 #include "Cursor.h"
 #include "DispatchResult.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
-#include "InsetMathBrace.h"
-#include "InsetMathScript.h"
-#include "InsetMathSymbol.h"
 #include "LaTeXFeatures.h"
-#include "MathData.h"
-#include "MathStream.h"
-#include "MathSupport.h"
+#include "MetricsInfo.h"
 
 #include "support/debug.h"
 #include "support/gettext.h"
-
 #include "support/lassert.h"
 
 
@@ -271,13 +273,26 @@ int InsetMathScript::nker(BufferView const * bv) const
 }
 
 
+MathClass InsetMathScript::mathClass() const
+{
+       // FIXME: this is a hack, since the class will not be correct if
+       // the nucleus has several elements.
+       // The correct implementation would require to linearize the nucleus.
+       if (nuc().empty())
+               return MC_ORD;
+       else
+               // return the class of last element since this is the one that counts.
+               return nuc().back()->mathClass();
+}
+
+
 void InsetMathScript::metrics(MetricsInfo & mi, Dimension & dim) const
 {
        Dimension dim0;
        Dimension dim1;
        Dimension dim2;
        cell(0).metrics(mi, dim0);
-       ScriptChanger dummy(mi.base);
+       Changer dummy = mi.base.changeScript();
        if (nargs() > 1)
                cell(1).metrics(mi, dim1);
        if (nargs() > 2)
@@ -318,7 +333,7 @@ void InsetMathScript::metrics(MetricsInfo & mi, Dimension & dim) const
                dim.des = max(nd, des);
        } else
                dim.des = nd;
-       metricsMarkers(dim);
+       metricsMarkers(mi, dim);
 }
 
 
@@ -332,7 +347,7 @@ void InsetMathScript::draw(PainterInfo & pi, int x, int y) const
                if (editing(&bv))
                        pi.draw(x + dxx(bv), y, char_type('.'));
        }
-       ScriptChanger dummy(pi.base);
+       Changer dummy = pi.base.changeScript();
        if (hasUp())
                up().draw(pi, x + dx1(bv), y - dy1(bv));
        if (hasDown())