]> git.lyx.org Git - lyx.git/blobdiff - src/RowPainter.cpp
Makefile for Arabi beamer
[lyx.git] / src / RowPainter.cpp
index 13c3be01963ddd6d719f2aced45670e052534817..e378f433e8ebc6d09b8d3c3012f9fd861d365dc4 100644 (file)
@@ -11,8 +11,6 @@
 
 #include <config.h>
 
-#include <algorithm>
-
 #include "RowPainter.h"
 
 #include "Buffer.h"
@@ -39,6 +37,7 @@
 #include "support/gettext.h"
 #include "support/lassert.h"
 
+#include <algorithm>
 
 using namespace std;
 
@@ -169,10 +168,13 @@ void RowPainter::paintNoSpellingMark(Row::Element const & e) const
        // We at the same voffset than the misspelled mark, since
        // these two are mutually exclusive
        int const desc = e.inset ? e.dim.descent() : 0;
-       int const y = yo_ + pi_.base.solidLineOffset() + desc
+       int y = yo_ + pi_.base.solidLineOffset() + desc
                + pi_.base.solidLineThickness()
                + (e.change.changed() ? pi_.base.solidLineThickness() + 1 : 0)
                + 1;
+       // Make sure that the mark does not go below the row rectangle
+       y = min(y, yo_ + row_.descent() - 1);
+
        pi_.pain.line(int(x_), y, int(x_ + e.full_width()), y, Color_language,
                      Painter::line_onoffdash, pi_.base.solidLineThickness());
 }
@@ -186,9 +188,11 @@ void RowPainter::paintMisspelledMark(Row::Element const & e) const
        // to avoid drawing at the same vertical offset
        FontMetrics const & fm = theFontMetrics(e.font);
        int const thickness = max(fm.lineWidth(), 2);
-       int const y = yo_ + pi_.base.solidLineOffset() + pi_.base.solidLineThickness()
+       int y = yo_ + pi_.base.solidLineOffset() + pi_.base.solidLineThickness()
                + (e.change.changed() ? pi_.base.solidLineThickness() + 1 : 0)
                + 1 + thickness / 2;
+       // Make sure that the mark does not go below the row rectangle
+       y = min(y, yo_ + row_.descent() - 1);
 
        //FIXME: this could be computed only once, it is probably not costly.
        // check for cursor position
@@ -453,8 +457,16 @@ void RowPainter::paintTopLevelLabel() const
 
        double x = x_;
        if (layout.labeltype == LABEL_CENTERED) {
-               x += (tm_.width() - row_.left_margin - row_.right_margin) / 2;
-               x -= fm.width(str) / 2;
+               /* Currently, x points at row_.left_margin (which contains the
+                * indent). First remove that, and then center the title with
+                * respect to the left and right margins.
+                */
+               int const leftm = row_.isRTL() ? tm_.rightMargin(row_.pit())
+                                              : tm_.leftMargin(row_.pit());
+               int const rightm = row_.isRTL() ? tm_.leftMargin(row_.pit())
+                                                   : tm_.rightMargin(row_.pit());
+               x += leftm - row_.left_margin + (tm_.width() - leftm -rightm) / 2
+                       - fm.width(str) / 2;
        } else if (row_.isRTL()) {
                x = xo_ + tm_.width() - row_.right_margin - fm.width(str);
        }
@@ -479,10 +491,10 @@ void RowPainter::paintLast() const
                int x = 0;
                if (row_.isRTL()) {
                        int const normal_x = nestMargin() + changebarMargin();
-                       x = min(normal_x, row_.left_margin - size - Inset::TEXT_TO_INSET_OFFSET);
+                       x = min(normal_x, row_.left_margin - size - Inset::textOffset(pi_.base.bv));
                } else {
                        int const normal_x = tm_.width() - row_.right_margin
-                               - size - Inset::TEXT_TO_INSET_OFFSET;
+                               - size - Inset::textOffset(pi_.base.bv);
                        x = max(normal_x, row_.width());
                }