This can only be done where splitting of string is identical in row breaking and display. It will be possible to reintroduce this when row painting uses the tokenized row information.
* Draw also RtL text string-wise. This speeds-up drawing.
-* Do not cut strings at separators in RowPainter when text is not
- justified. This speeds-up painting by reducing the number of strings
- to draw.
-
* Do not cut strings at selection boundary in RowPainter. This avoids
ligature/kerning breaking in latin text, and bad rendering problems
in Arabic.
Paragraph const & par = text_->getPar(pit);
- double w = width - row.right_margin - row.width();
+ double const w = width - row.right_margin - row.width();
// FIXME: put back this assertion when the crash on new doc is solved.
//LASSERT(w >= 0, /**/);
} else if (int(row.width()) < max_width_) {
// is it block, flushleft or flushright?
// set x how you need it
- int const align = getAlign(par, row.pos());
-
- switch (align) {
+ switch (getAlign(par, row.pos())) {
case LYX_ALIGN_BLOCK: {
int const ns = numberOfSeparators(row);
/** If we have separators, and this row has
}
#endif
+ // Finally, handle hfill insets
pos_type const endpos = row.endpos();
pos_type body_pos = par.beginOfBody();
if (body_pos > 0
&& (body_pos > endpos || !par.isLineSeparator(body_pos - 1)))
body_pos = 0;
-
ParagraphMetrics & pm = par_metrics_[pit];
Row::iterator cit = row.begin();
Row::iterator const cend = row.end();
int const width = max_width_ - right_margin;
pos_type const body_pos = par.beginOfBody();
row.clear();
- row.x = leftMargin(max_width_, pit, pos);
- row.dimension().wid = row.x;
+ row.dimension().wid = leftMargin(max_width_, pit, pos);
row.right_margin = right_margin;
if (pos >= end || row.width() > width) {
int GuiPainter::text(int x, int y, char_type c, FontInfo const & f)
{
- docstring s(1, c);
- return text(x, y, s, f);
+ return text(x, y, docstring(1, c), f);
}
int GuiPainter::text(int x, int y, docstring const & s,
FontInfo const & f)
{
+ //LYXERR0("text: x=" << x << ", s=" << s);
if (s.empty())
return 0;
}
str.push_back(c);
- pos_type const end = row_.endpos();
FontSpan const font_span = par_.fontSpan(pos);
// Track-change status.
Change const & change_running = par_.lookupChange(pos);
-
// spelling correct?
bool const spell_state =
lyxrc.spellcheck_continuously && par_.isMisspelled(pos);
// collect as much similar chars as we can
+ pos_type const end = row_.endpos();
for (++vpos ; vpos < end ; ++vpos) {
pos = bidi_.vis2log(vpos);
if (c == '\t')
break;
- // When row_.separator == 0, it is possible to print a
- // string longer than a word in one fell swoop.
- // Therefore there is no need to break at spaces.
- if (!isPrintableNonspace(c)
- && (c != ' ' || row_.separator > 0))
+ if (!isPrintableNonspace(c))
break;
// FIXME: Why only round brackets and why the difference to
void RowPainter::paintText()
{
+ //LYXERR0("-------------------------------------------------------");
pos_type const end = row_.endpos();
// Spaces at logical line breaks in bidi text must be skipped during
// painting. However, they may appear visually in the middle