]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/MathRow.cpp
Fix assertion when checking if change in selection
[lyx.git] / src / mathed / MathRow.cpp
index 561081556e342ef182f6d902251916663fd64909..472b6db927ad476bdf49605da12f7ba9d2abd2c4 100644 (file)
@@ -234,12 +234,10 @@ int MathRow::after(int i) const
 }
 
 
-void MathRow::metrics(MetricsInfo & mi, Dimension & dim)
+bool MathRow::metrics(MetricsInfo & mi, Dimension & dim)
 {
-       frontend::FontMetrics const & fm = theFontMetrics(mi.base.font);
-       // FIXME: this is the minimal ascent seen empirically, check
-       // what the TeXbook says.
-       dim.asc = fm.ascent('x');
+       bool has_caret = false;
+
        dim.wid = 0;
        // In order to compute the dimension of macros and their
        // arguments, it is necessary to keep track of them.
@@ -264,8 +262,10 @@ void MathRow::metrics(MetricsInfo & mi, Dimension & dim)
                                d.wid = e.before + e.after;
                                e.inset->beforeMetrics();
                        }
-                       if (e.ar)
+                       if (e.ar) {
                                dim_arrays.push_back(make_pair(e.ar, Dimension()));
+                               has_caret |= e.ar->hasCaret(mi.base.bv);
+                       }
                        break;
                case END:
                        if (e.inset) {
@@ -287,7 +287,7 @@ void MathRow::metrics(MetricsInfo & mi, Dimension & dim)
                        }
                        break;
                case BOX:
-                       d = fm.dimension('I');
+                       d = theFontMetrics(mi.base.font).dimension('I');
                        if (e.color != Color_none) {
                                // allow for one pixel before/after the box.
                                d.wid += e.before + e.after + 2;
@@ -314,6 +314,7 @@ void MathRow::metrics(MetricsInfo & mi, Dimension & dim)
                dim.wid += mathed_string_width(font, e.compl_text);
        }
        LATTEST(dim_insets.empty() && dim_arrays.empty());
+       return has_caret;
 }
 
 
@@ -380,12 +381,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);
                }
        }