#include "frontends/font_metrics.h"
#include "frontends/nullpainter.h"
+#include "frontends/LyXView.h"
+#include "frontends/WorkArea.h"
#include "frontends/Painter.h"
#include "insets/insettext.h"
#include <boost/crc.hpp>
+using lyx::frontend::Painter;
+using lyx::frontend::NullPainter;
+using lyx::char_type;
using lyx::pos_type;
using lyx::pit_type;
namespace {
+/// Flag: do a full redraw of inside text of inset
+/// Working variable indicating a full screen refresh
+bool refreshInside;
+
/**
* A class used for painting an individual row of text.
*/
theCoords.insets().add(inset, int(x_), yo_);
InsetText const * const in = inset->asTextInset();
// non-wide insets are painted completely. Recursive
- bool tmp = bv_.repaintAll();
+ bool tmp = refreshInside;
if (!in || !in->Wide()) {
- bv_.repaintAll(true);
+ refreshInside = true;
lyxerr[Debug::PAINTING] << endl << "Paint inset fully" << endl;
}
- if (bv_.repaintAll())
+ if (refreshInside)
inset->drawSelection(pi, int(x_), yo_);
inset->draw(pi, int(x_), yo_);
- bv_.repaintAll(tmp);
+ refreshInside = tmp;
x_ += inset->width();
}
string str;
// first char
- char c = par_.getChar(pos);
+ char_type c = par_.getChar(pos);
str += c;
++vpos;
for (pos_type i = pos - 1; i >= 0; --i) {
c = par_.getChar(i);
- if (!Encodings::IsComposeChar_hebrew(c)) {
+ if (!Encodings::isComposeChar_hebrew(c)) {
if (isPrintableNonspace(c)) {
int const width2 =
text_.singleWidth(par_, i, c, text_.getFont(par_, i));
string str;
// first char
- char c = par_.getChar(pos);
+ char_type c = par_.getChar(pos);
c = par_.transformChar(c, pos);
str += c;
++vpos;
for (pos_type i = pos - 1; i >= 0; --i) {
c = par_.getChar(i);
- if (!Encodings::IsComposeChar_arabic(c)) {
+ if (!Encodings::isComposeChar_arabic(c)) {
if (isPrintableNonspace(c)) {
int const width2 =
text_.singleWidth(par_, i, c, text_.getFont(par_, i));
pos_type pos = text_.bidi.vis2log(vpos);
pos_type const end = row_.endpos();
FontSpan const font_span = par_.fontSpan(pos);
- Change::Type const prev_change = par_.lookupChange(pos);
+ Change::Type const prev_change = par_.lookupChange(pos).type;
// first character
string str;
if (prev_change != par_.lookupChange(pos))
break;
- char c = par_.getChar(pos);
+ char_type c = par_.getChar(pos);
if (!isPrintableNonspace(c))
break;
- if (arabic && Encodings::IsComposeChar_arabic(c))
+ if (arabic && Encodings::isComposeChar_arabic(c))
break;
- if (hebrew && Encodings::IsComposeChar_hebrew(c))
+ if (hebrew && Encodings::isComposeChar_hebrew(c))
break;
if (arabic)
}
// usual characters, no insets
- char const c = par_.getChar(pos);
+ char_type const c = par_.getChar(pos);
// special case languages
std::string const & lang = orig_font.language()->lang();
// draw as many chars as we can
if ((!hebrew && !arabic)
- || (hebrew && !Encodings::IsComposeChar_hebrew(c))
- || (arabic && !Encodings::IsComposeChar_arabic(c))) {
+ || (hebrew && !Encodings::isComposeChar_hebrew(c))
+ || (arabic && !Encodings::isComposeChar_arabic(c))) {
paintChars(vpos, orig_font, hebrew, arabic);
} else if (hebrew) {
paintHebrewComposeChar(vpos, orig_font);
lyx::size_type rowno(0);
for (RowList::const_iterator rit = rb; rit != re; ++rit, ++rowno) {
y += rit->ascent();
- // Allow setting of bv->repaintAll() for nested insets in
+ // Allow setting of refreshInside for nested insets in
// this row only
- bool tmp = pi.base.bv->repaintAll();
+ bool tmp = refreshInside;
// Row signature; has row changed since last paint?
lyx::size_type const row_sig = calculateRowSignature(*rit, par, x, y);
if (in) {
InsetText const * const t = in->asTextInset();
if (t)
- t->Wide() = in_inset_alone_on_row &&
- t->Tall();
+ t->Wide() = in_inset_alone_on_row;
}
}
// (if paragraph background was not cleared)
if (!repaintAll &&
(!in_inset_alone_on_row || row_has_changed)) {
- pi.pain.fillRectangle(( rowno ? 0 : x - 10 ), y - rit->ascent(),
- pi.base.bv->workWidth(), rit->height(),
+ pi.pain.fillRectangle(x, y - rit->ascent(),
+ text.maxwidth_, rit->height(),
text.backgroundColor());
// If outer row has changed, force nested
// insets to repaint completely
if (row_has_changed)
- pi.base.bv->repaintAll(true);
+ refreshInside = true;
}
// Instrumentation for testing row cache (see also
}
y += rit->descent();
// Restore, see above
- pi.base.bv->repaintAll(tmp);
+ refreshInside = tmp;
}
lyxerr[Debug::PAINTING] << "." << endl;
}
void paintText(BufferView const & bv, ViewMetricsInfo const & vi)
{
- Painter & pain = bv.painter();
+ Painter & pain = bv.owner()->workArea()->getPainter();
LyXText * const text = bv.text();
bool const select = bv.cursor().selection();
PainterInfo pi(const_cast<BufferView *>(&bv), pain);
// Should the whole screen, including insets, be refreshed?
- bool repaintAll(select || !vi.singlepar);
+ bool repaintAll = select || !vi.singlepar;
if (repaintAll) {
// Clear background (if not delegated to rows)
int yy = vi.y1;
// draw contents
for (pit_type pit = vi.p1; pit <= vi.p2; ++pit) {
- bv.repaintAll(repaintAll);
+ refreshInside = repaintAll;
Paragraph const & par = text->getPar(pit);
yy += par.ascent();
paintPar(pi, *bv.text(), pit, 0, yy, repaintAll);
y -= text.getPar(0).ascent();
// This flag can not be set from within same inset:
- bool repaintAll = pi.base.bv->repaintAll();
+ bool repaintAll = refreshInside;
for (int pit = 0; pit < int(text.paragraphs().size()); ++pit) {
y += text.getPar(pit).ascent();
paintPar(pi, text, pit, x, y, repaintAll);