]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathRow.cpp
Revert "Fix a number of signedness warnings"
[lyx.git] / src / mathed / MathRow.cpp
index 71e7a5234aeb652b214f3cb6b0d3bac9d7101940..16b64c6b7f2bc2274e1e44be670917bd053370e1 100644 (file)
 
 #include "MathRow.h"
 
-#include "InsetMath.h"
-#include "MathClass.h"
 #include "MathData.h"
 #include "MathSupport.h"
 
 #include "BufferView.h"
+#include "ColorSet.h"
 #include "CoordCache.h"
 #include "MetricsInfo.h"
 
@@ -38,7 +37,7 @@ namespace lyx {
 
 MathRow::Element::Element(MetricsInfo const & mi, Type t, MathClass mc)
        : type(t), mclass(mc), before(0), after(0), macro_nesting(mi.base.macro_nesting),
-         marker(InsetMath::NO_MARKER), inset(0), compl_unique_to(0), ar(0),
+         marker(InsetMath::NO_MARKER), inset(nullptr), compl_unique_to(0), ar(nullptr),
          color(Color_red)
 {}
 
@@ -78,7 +77,7 @@ void afterMetricsMarkers(MetricsInfo const & , MathRow::Element & e,
                break;
        case InsetMath::BOX_MARKER:
                FontInfo font;
-               font.setSize(FONT_SIZE_TINY);
+               font.setSize(TINY_SIZE);
                Dimension namedim;
                mathed_string_dim(font, e.inset->name(), namedim);
                int const namewid = 1 + namedim.wid + 1;
@@ -97,11 +96,6 @@ void drawMarkers(PainterInfo const & pi, MathRow::Element const & e,
        if (e.marker == InsetMath::NO_MARKER)
                return;
 
-       // The color
-       bool const highlight = e.inset->mouseHovered(pi.base.bv)
-                              || e.inset->editing(pi.base.bv);
-       ColorCode const pen_color = highlight ? Color_mathframe : Color_mathcorners;
-
        CoordCache const & coords = pi.base.bv->coordCache();
        Dimension const dim = coords.getInsets().dim(e.inset);
 
@@ -113,7 +107,7 @@ void drawMarkers(PainterInfo const & pi, MathRow::Element const & e,
        if (e.marker == InsetMath::BOX_MARKER) {
                // draw header and rectangle around
                FontInfo font;
-               font.setSize(FONT_SIZE_TINY);
+               font.setSize(TINY_SIZE);
                font.setColor(Color_mathmacrolabel);
                Dimension namedim;
                mathed_string_dim(font, e.inset->name(), namedim);
@@ -122,6 +116,14 @@ void drawMarkers(PainterInfo const & pi, MathRow::Element const & e,
                pi.pain.text(l, y + dim.des - namedim.des - 1, e.inset->name(), font);
        }
 
+       // Color for corners
+       bool const highlight = e.inset->mouseHovered(pi.base.bv)
+                              || e.inset->editing(pi.base.bv);
+       ColorCode const pen_color = highlight ? Color_mathframe : Color_mathcorners;
+       // If the corners have the same color as the background, do not paint them.
+       if (lcolor.getX11HexName(Color_mathbg) == lcolor.getX11HexName(pen_color))
+               return;
+
        // Lower corners in all cases
        int const d = y + dim.descent();
        pi.pain.line(l, d - 3, l, d, pen_color);
@@ -232,7 +234,6 @@ int MathRow::after(int i) const
 
 void MathRow::metrics(MetricsInfo & mi, Dimension & dim)
 {
-       dim.asc = 0;
        dim.wid = 0;
        // In order to compute the dimension of macros and their
        // arguments, it is necessary to keep track of them.
@@ -323,6 +324,9 @@ void MathRow::draw(PainterInfo & pi, int x, int const y) const
                        Dimension d2 = d;
                        d2.wid -= e.before + e.after;
                        coords.insets().add(e.inset, d2);
+                       if (pi.pain.develMode() && !e.inset->isBufferValid())
+                               pi.pain.fillRectangle(x + e.before, y - d2.ascent(),
+                                                     d2.width(), d2.height(), Color_error);
                        e.inset->draw(pi, x + e.before, y);
                        coords.insets().add(e.inset, x, y);
                        coords.insets().add(e.inset, d);
@@ -373,12 +377,14 @@ void MathRow::draw(PainterInfo & pi, int x, int const y) const
 
                if (!s1.empty()) {
                        f.setColor(Color_inlinecompletion);
-                       pi.pain.text(x, y, s1, f);
+                       // offset the text by e.after to make sure that the
+                       // spacing is after the completion, not before.
+                       pi.pain.text(x - e.after, y, s1, f);
                        x += mathed_string_width(f, s1);
                }
                if (!s2.empty()) {
                        f.setColor(Color_nonunique_inlinecompletion);
-                       pi.pain.text(x, y, s2, f);
+                       pi.pain.text(x - e.after, y, s2, f);
                        x += mathed_string_width(f, s2);
                }
        }