*/
#include <config.h>
+#include <algorithm>
#include "rowpainter.h"
#include "support/debug.h"
#include "support/textutils.h"
-#include <boost/assert.hpp>
+#include "support/assert.h"
#include <boost/crc.hpp>
#include <ostream>
//lyxerr << "RowPainter: x: " << x_ << " xo: " << xo_ << " yo: " << yo_ << endl;
//row_.dump();
- BOOST_ASSERT(pit >= 0);
- BOOST_ASSERT(pit < int(text.paragraphs().size()));
+ LASSERT(pit >= 0, /**/);
+ LASSERT(pit < int(text.paragraphs().size()), /**/);
}
{
Font const font = text_metrics_.displayFont(pit_, pos);
- BOOST_ASSERT(inset);
+ LASSERT(inset, /**/);
// Backup full_repaint status because some insets (InsetTabular)
// requires a full repaint
bool pi_full_repaint = pi_.full_repaint;
#ifdef DEBUG_METRICS
int const x1 = int(x_ - dim.width());
Dimension dim2;
- BOOST_ASSERT(max_witdh_ > 0);
+ LASSERT(max_witdh_ > 0, /**/);
int right_margin = text_metrics_.rightMargin(pm_);
int const w = max_witdh_ - leftMargin() - right_margin;
MetricsInfo mi(pi_.base.bv, font.fontInfo(), w);
lyxerr << "Error: inset " << to_ascii(inset->getInsetName())
<< " draw ascent " << dim.descent()
<< "> metrics descent " << dim2.des << "." << endl;
- BOOST_ASSERT(dim2.wid == dim.wid);
- BOOST_ASSERT(dim2.asc == dim.asc);
- BOOST_ASSERT(dim2.des == dim.des);
+ LASSERT(dim2.wid == dim.wid, /**/);
+ LASSERT(dim2.asc == dim.asc, /**/);
+ LASSERT(dim2.des == dim.des, /**/);
int const x2 = x1 + dim.wid;
int const y1 = yo_ + dim.des;
int const y2 = yo_ - dim.asc;
for (pos_type i = pos - 1; i >= 0; --i) {
c = par_.getChar(i);
- if (!Encodings::isComposeChar_hebrew(c)) {
+ if (!Encodings::isHebrewComposeChar(c)) {
if (isPrintableNonspace(c)) {
int const width2 = pm_.singleWidth(i,
text_metrics_.displayFont(pit_, i));
for (pos_type i = pos - 1; i >= 0; --i) {
c = par_.getChar(i);
- if (!Encodings::isComposeChar_arabic(c)) {
+ if (!Encodings::isArabicComposeChar(c)) {
if (isPrintableNonspace(c)) {
int const width2 = pm_.singleWidth(i,
text_metrics_.displayFont(pit_, i));
str[0] = par_.transformChar(c, pos);
}
+ // selected text?
+ pit_type const p0 = pi_.base.bv->cursor().selBegin().pit();
+ bool selection = row_.sel_beg > -1 && row_.sel_beg != row_.sel_end
+ && ((pit_ == p0 && (pos >= row_.sel_beg && pos < row_.sel_end))
+ || (pit_ > p0 && pos < row_.sel_end));
+
// collect as much similar chars as we can
for (++vpos ; vpos < end ; ++vpos) {
pos = bidi_.vis2log(vpos);
if (pos < font_span.first || pos > font_span.last)
break;
+ if (row_.sel_beg > -1 && row_.sel_beg != row_.sel_end &&
+ ((pit_ == p0 && pos == row_.sel_beg) || pos == row_.sel_end))
+ break;
+
if (prev_change != par_.lookupChange(pos).type)
break;
* of arabic and hebrew characters, then these breaks may have
* to be re-applied.
- if (arabic && Encodings::isComposeChar_arabic(c))
+ if (arabic && Encodings::isArabicComposeChar(c))
break;
- if (hebrew && Encodings::isComposeChar_hebrew(c))
+ if (hebrew && Encodings::isHebrewComposeChar(c))
break;
*/
docstring s(&str[0], str.size());
- if (prev_change != Change::UNCHANGED) {
+ if (selection || prev_change != Change::UNCHANGED) {
FontInfo copy = font;
- if (prev_change == Change::DELETED) {
+ if (selection) {
+ copy.setColor(Color_selectiontext);
+ } else if (prev_change == Change::DELETED) {
copy.setColor(Color_deletedtext);
} else if (prev_change == Change::INSERTED) {
copy.setColor(Color_addedtext);
// draw as many chars as we can
if ((!hebrew && !arabic)
- || (hebrew && !Encodings::isComposeChar_hebrew(c))
- || (arabic && !Encodings::isComposeChar_arabic(c))) {
+ || (hebrew && !Encodings::isHebrewComposeChar(c))
+ || (arabic && !Encodings::isArabicComposeChar(c))) {
paintChars(vpos, orig_font.fontInfo(), hebrew, arabic);
} else if (hebrew) {
paintHebrewComposeChar(vpos, orig_font.fontInfo());