X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextMetrics.cpp;h=19a71ffbb99154ad41ed597c0ab4431929aaf0b5;hb=c0f4aa8c4b786dcfb3699b175dff63f109abba98;hp=37cf7a799158f9f4dcf3151201e57f555af54f4a;hpb=425d092204118ea6c24c28e85fdf03fcf2bb51a4;p=lyx.git diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 37cf7a7991..19a71ffbb9 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -135,7 +135,7 @@ TextMetrics::TextMetrics(BufferView * bv, Text * text) dim_.asc = 10; dim_.des = 10; - //text_->updateLabels(bv->buffer()); + //text_->updateBuffer(bv->buffer()); } @@ -179,17 +179,6 @@ ParagraphMetrics & TextMetrics::parMetrics(pit_type pit, bool redo) } -int TextMetrics::parPosition(pit_type pit) const -{ - if (pit < par_metrics_.begin()->first) - return -1000000; - if (pit > par_metrics_.rbegin()->first) - return +1000000; - - return par_metrics_[pit].position(); -} - - bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width) { LASSERT(mi.base.textwidth > 0, /**/); @@ -333,13 +322,14 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos) const bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos, Font const & font) const { - if (!lyxrc.rtl_support) + if (!lyxrc.rtl_support + // no RTL boundary at paragraph start + || pos == 0 + // if the metrics have not been calculated, then we are not + // on screen and can safely ignore issues about boundaries. + || !contains(pit)) return false; - // no RTL boundary at paragraph start - if (pos == 0) - return false; - ParagraphMetrics & pm = par_metrics_[pit]; // no RTL boundary in empty paragraph if (pm.rows().empty()) @@ -354,13 +344,6 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos, return false; Paragraph const & par = text_->getPar(pit); - bool left = font.isVisibleRightToLeft(); - bool right; - if (pos == par.size()) - right = par.isRTL(bv_->buffer().params()); - else - right = displayFont(pit, pos).isVisibleRightToLeft(); - // no RTL boundary at line break: // abc|\n -> move right -> abc\n (and not: abc\n| // FED FED| FED ) @@ -370,6 +353,13 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos, || par.isSeparator(pos - 1))) return false; + bool left = font.isVisibleRightToLeft(); + bool right; + if (pos == par.size()) + right = par.isRTL(bv_->buffer().params()); + else + right = displayFont(pit, pos).isVisibleRightToLeft(); + return left != right; } @@ -414,7 +404,7 @@ bool TextMetrics::redoParagraph(pit_type const pit) LYXERR(Debug::INFO, "MacroContext not initialised!" << " Going through the buffer again and hope" << " the context is better then."); - bv_->buffer().updateLabels(); + bv_->buffer().updateBuffer(); parPos = text_->macrocontextPosition(); LASSERT(!parPos.empty(), /**/); parPos.pit() = pit; @@ -2266,7 +2256,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row, // go through row and draw from RTL boundary to RTL boundary while (cur < end) { - bool drawNow = false; + bool draw_now = false; // simplified cursorForward code below which does not // descend into insets and which does not go into the @@ -2281,7 +2271,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row, // because: ab|cDDEEFFghi -> abc|DDEEFFghi ++cur.pos(); cur.boundary(true); - drawNow = true; + draw_now = true; } else { // move right ++cur.pos(); @@ -2296,7 +2286,7 @@ void TextMetrics::drawRowSelection(PainterInfo & pi, int x, Row const & row, x1 = cursorX(cur.top(), cur.boundary()); } - if (!(cur < end) || drawNow) { + if (!(cur < end) || draw_now) { x2 = cursorX(cur.top(), cur.boundary()); pi.pain.fillRectangle(x + min(x1,x2), y1, abs(x2 - x1), y2 - y1, Color_selection);