]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/math_charinset.C
rename commandtags.h to lfuns.h and renumber/cleanup. Rebuild the tree !
[lyx.git] / src / mathed / math_charinset.C
index a212db15e7e356c3e8851de0fe1ecd7a73cf2b68..b7e49f6c73eece644e15441dd037c409173cec9a 100644 (file)
@@ -1,8 +1,5 @@
 #include <config.h>
 
-#ifdef __GNUG__
-#pragma implementation
-#endif
 
 #include "math_charinset.h"
 #include "LColor.h"
@@ -27,6 +24,7 @@ using std::strchr;
 using std::isalpha;
 #endif
 
+extern bool has_math_fonts;
 
 namespace {
 
@@ -60,19 +58,29 @@ MathInset * MathCharInset::clone() const
 void MathCharInset::metrics(MathMetricsInfo & mi) const
 {
 #if 1
-       if (slanted(char_) && mi.base.fontname == "mathnormal") {
+       if (char_ == '=' && has_math_fonts) {
+               MathFontSetChanger dummy(mi.base, "cmr");
+               mathed_char_dim(mi.base.font, char_, dim_);
+       } else if ((char_ == '>' || char_ == '<') && has_math_fonts) {
+               MathFontSetChanger dummy(mi.base, "cmm");
+               mathed_char_dim(mi.base.font, char_, dim_);
+       } else if (slanted(char_) && mi.base.fontname == "mathnormal") {
                MathShapeChanger dummy(mi.base.font, LyXFont::ITALIC_SHAPE);
-               mathed_char_dim(mi.base.font, char_, ascent_, descent_, width_);
+               mathed_char_dim(mi.base.font, char_, dim_);
        } else {
-               mathed_char_dim(mi.base.font, char_, ascent_, descent_, width_);
+               mathed_char_dim(mi.base.font, char_, dim_);
        }
+       int const em = mathed_char_width(mi.base.font, 'M');
        if (isBinaryOp(char_))
-               width_ += 2 * font_metrics::width(' ', mi.base.font);
+               dim_.w += static_cast<int>(0.5*em+0.5);
+       else if (char_ == '\'')
+               dim_.w += static_cast<int>(0.1667*em+0.5);
 #else
        whichFont(font_, code_, mi);
-       mathed_char_dim(font_, char_, ascent_, descent_, width_);
+       mathed_char_dim(font_, char_, dim_);
        if (isBinaryOp(char_, code_))
                width_ += 2 * font_metrics::width(' ', font_);
+       lyxerr << "MathCharInset::metrics: " << dim_ << "\n";
 #endif
 }
 
@@ -80,10 +88,19 @@ void MathCharInset::metrics(MathMetricsInfo & mi) const
 void MathCharInset::draw(MathPainterInfo & pi, int x, int y) const
 {
        //lyxerr << "drawing '" << char_ << "' font: " << pi.base.fontname << endl;
+       int const em = mathed_char_width(pi.base.font, 'M');
        if (isBinaryOp(char_))
-               x += font_metrics::width(' ', pi.base.font);
+               x += static_cast<int>(0.25*em+0.5);
+       else if (char_ == '\'')
+               x += static_cast<int>(0.0833*em+0.5);
 #if 1
-       if (slanted(char_) && pi.base.fontname == "mathnormal") {
+       if (char_ == '=' && has_math_fonts) {
+               MathFontSetChanger dummy(pi.base, "cmr");
+               pi.draw(x, y, char_);
+       } else if ((char_ == '>' || char_ == '<') && has_math_fonts) {
+               MathFontSetChanger dummy(pi.base, "cmm");
+               pi.draw(x, y, char_);
+       } else if (slanted(char_) && pi.base.fontname == "mathnormal") {
                MathShapeChanger dummy(pi.base.font, LyXFont::ITALIC_SHAPE);
                pi.draw(x, y, char_);
        } else {
@@ -97,9 +114,9 @@ void MathCharInset::draw(MathPainterInfo & pi, int x, int y) const
 
 void MathCharInset::metricsT(TextMetricsInfo const &) const
 {
-       width_   = 1;
-       ascent_  = 1;
-       descent_ = 0;
+       dim_.w = 1;
+       dim_.a = 1;
+       dim_.d = 0;
 }
 
 
@@ -118,11 +135,11 @@ void MathCharInset::write(WriteStream & os) const
 
 void MathCharInset::normalize(NormalStream & os) const
 {
-       os << "[char " << char_ << " " << "mathalpha" << "]";
+       os << "[char " << char_ << ' ' << "mathalpha]";
 }
 
 
-void MathCharInset::octavize(OctaveStream & os) const
+void MathCharInset::octave(OctaveStream & os) const
 {
        os << char_;
 }
@@ -134,7 +151,7 @@ bool MathCharInset::isRelOp() const
 }
 
 
-bool MathCharInset::match(MathInset * p) const
+bool MathCharInset::match(MathInset const * p) const
 {
        MathCharInset const * q = p->asCharInset();
        return q && char_ == q->char_;