X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FTextMetrics.cpp;h=796e1bd25ec949f3c50a229f8ae33b93d5f75c8a;hb=4732da8dc2ffb44a418b0e776ff607079720736a;hp=6f195a602245e51790334845c208f4e3b70a05fc;hpb=6df593049c744c48dce7e169fd128a0d859c0253;p=lyx.git diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 6f195a6022..796e1bd25e 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -48,6 +48,8 @@ #include "support/convert.h" #include "support/debug.h" #include "support/lassert.h" +#include "support/lyxlib.h" +#include "support/RefChanger.h" #include #include @@ -524,10 +526,11 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows) do { if (row_index == pm.rows().size()) pm.rows().push_back(Row()); + else + pm.rows()[row_index] = Row(); Row & row = pm.rows()[row_index]; row.pit(pit); row.pos(first); - row.pit(pit); need_new_row = breakRow(row, right_margin); setRowHeight(row); row.changed(true); @@ -594,7 +597,7 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows) LyXAlignment TextMetrics::getAlign(Paragraph const & par, Row const & row) const { - LyXAlignment align = par.getAlign(); + LyXAlignment align = par.getAlign(bv_->buffer().params()); // handle alignment inside tabular cells Inset const & owner = text_->inset(); @@ -881,6 +884,7 @@ private: */ bool TextMetrics::breakRow(Row & row, int const right_margin) const { + LATTEST(row.empty()); Paragraph const & par = text_->getPar(row.pit()); pos_type const end = par.size(); pos_type const pos = row.pos(); @@ -888,7 +892,6 @@ bool TextMetrics::breakRow(Row & row, int const right_margin) const bool const is_rtl = text_->isRTL(row.pit()); bool need_new_row = false; - row.clear(); row.left_margin = leftMargin(row.pit(), pos); row.right_margin = right_margin; if (is_rtl) @@ -1754,7 +1757,7 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type const pos) const if (!par.params().leftIndent().zero()) l_margin += par.params().leftIndent().inPixels(max_width_, lfm.em()); - LyXAlignment align = par.getAlign(); + LyXAlignment align = par.getAlign(bv_->buffer().params()); // set the correct parindent if (pos == 0 @@ -1817,6 +1820,9 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const if (pm.rows().empty()) return; size_t const nrows = pm.rows().size(); + // Remember left and right margin for drawing math numbers + Changer changeleft = make_change(pi.leftx, x + leftMargin(pit)); + Changer changeright = make_change(pi.rightx, x + width() - rightMargin(pit)); // Use fast lane in nodraw stage. if (pi.pain.isNull()) { @@ -1863,6 +1869,9 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const } } + if (text_->isRTL(pit)) + swap(pi.leftx, pi.rightx); + for (size_t i = 0; i != nrows; ++i) { Row const & row = pm.rows()[i]; @@ -1924,9 +1933,9 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const // the begining/end of row. However, it will not work if // the caret has a ridiculous width like 6. (see ticket // #10797) - pi.pain.fillRectangle(max(row_x, 0) - Inset::TEXT_TO_INSET_OFFSET, + pi.pain.fillRectangle(max(row_x, 0) - Inset::textOffset(pi.base.bv), y - row.ascent(), - width() + 2 * Inset::TEXT_TO_INSET_OFFSET, + width() + 2 * Inset::textOffset(pi.base.bv), row.height(), pi.background_color); } @@ -1970,7 +1979,7 @@ void TextMetrics::drawParagraph(PainterInfo & pi, pit_type const pit, int const static int count = 0; ++count; FontInfo fi(sane_font); - fi.setSize(FONT_SIZE_TINY); + fi.setSize(TINY_SIZE); fi.setColor(Color_red); pi.pain.text(row_x, y, convert(count), fi); #endif