#include "tracer.h"
#include "font.h"
#include "encoding.h"
+#include "lyxscreen.h"
using std::max;
using std::min;
LyXParagraph::size_type pos =
(is_space && lpos + 1 <= bidi_end &&
!row->par()->IsLineSeparator(lpos + 1) &&
- (!row->par()->table
- || !row->par()->IsNewline(lpos + 1)) )
+ (
+#ifndef NEW_TABULAR
+ !row->par()->table ||
+#endif
+ !row->par()->IsNewline(lpos + 1)) )
? lpos + 1 : lpos;
LyXFont font = row->par()->GetFontSettings(buf->params, pos);
bool new_rtl = font.isVisibleRightToLeft();
}
LyXParagraph::size_type vpos = bidi_start - 1;
- for (LyXParagraph::size_type lpos = bidi_start; lpos <= bidi_end; ++lpos) {
+ for (LyXParagraph::size_type lpos = bidi_start;
+ lpos <= bidi_end; ++lpos) {
vpos += log2vis_list[lpos - bidi_start];
vis2log_list[vpos - bidi_start] = lpos;
log2vis_list[lpos - bidi_start] = vpos;
if (!lyxrc.rtl_support)
return false; // This is just for speedup
- if (!bidi_InRange(pos - 1) ||
- (par->table && par->IsNewline(pos-1)) )
+ if (!bidi_InRange(pos - 1)
+#ifndef NEW_TABULAR
+ || (par->table && par->IsNewline(pos-1))
+#endif
+ )
return false;
bool rtl = bidi_level(pos - 1) % 2;
bool rtl2 = rtl;
- if (pos == par->Last() ||
- (par->table && par->IsNewline(pos)))
+ if (pos == par->Last()
+#ifndef NEW_TABULAR
+ || (par->table && par->IsNewline(pos))
+#endif
+ )
rtl2 = par->isRightToLeftPar(buf->params);
else if (bidi_InRange(pos))
rtl2 = bidi_level(pos) % 2;
bool rtl = font.isVisibleRightToLeft();
bool rtl2 = rtl;
- if (pos == par->Last() ||
- (par->table && par->IsNewline(pos)))
+ if (pos == par->Last()
+#ifndef NEW_TABULAR
+ || (par->table && par->IsNewline(pos))
+#endif
+ )
rtl2 = par->isRightToLeftPar(buf->params);
else if (bidi_InRange(pos))
rtl2 = bidi_level(pos) % 2;
// tmpinset->update(bview, font, false);
tmpinset->draw(bview, font, offset+row->baseline(), x,
cleared);
- if (status == CHANGED_IN_DRAW)
+ if (status == CHANGED_IN_DRAW) {
UpdateInset(bview, tmpinset);
+ status = CHANGED_IN_DRAW;
+ }
}
++vpos;
}
/* is it a bottom line? */
- if (row_ptr->par()->ParFromPos(RowLast(row_ptr) + 1) == par
+ if (
+#ifndef NEW_INSETS
+ row_ptr->par()->ParFromPos(RowLast(row_ptr) + 1) == par
+#else
+ row_ptr->par() == par
+#endif
&& (!row_ptr->next() || row_ptr->next()->par() != row_ptr->par())) {
/* the paper margins */
height += row_ptr->height();
float x, dummy;
PrepareToPrint(bview, row_ptr, x, dummy, dummy, dummy, false);
- row_ptr->width(maxwidth+x);
+ row_ptr->width(int(maxwidth + x));
if (inset_owner) {
Row * r = firstrow;
width = max(0,workWidth(bview));
layout.labeltype!= LABEL_SENSITIVE)
return;
- SetUndo(bview->buffer(), Undo::INSERT,
+ SetUndo(bview->buffer(), Undo::INSERT,
+#ifndef NEW_INSETS
cursor.par()->ParFromPos(cursor.pos())->previous,
- cursor.par()->ParFromPos(cursor.pos())->next);
+ cursor.par()->ParFromPos(cursor.pos())->next
+#else
+ cursor.par()->previous,
+ cursor.par()->next
+#endif
+ );
#ifndef NEW_TABULAR
/* table stuff -- begin */
SetHeightOfRow(bview, cursor.row());
- while (!cursor.par()->Next()->table && cursor.par()->Next()->Last()
+ while (
+#ifndef NEW_TABULAR
+ !cursor.par()->Next()->table &&
+#endif
+ cursor.par()->Next()->Last()
&& cursor.par()->Next()->IsNewline(0))
cursor.par()->Next()->Erase(0);
* same Paragraph one to the right and make a rebreak */
void LyXText::InsertChar(BufferView * bview, char c)
{
- SetUndo(bview->buffer(), Undo::INSERT,
+ SetUndo(bview->buffer(), Undo::INSERT,
+#ifndef NEW_INSETS
cursor.par()->ParFromPos(cursor.pos())->previous,
- cursor.par()->ParFromPos(cursor.pos())->next);
+ cursor.par()->ParFromPos(cursor.pos())->next
+#else
+ cursor.par()->previous,
+ cursor.par()->next
+#endif
+ );
// When the free-spacing option is set for the current layout,
// disable the double-space checking
#endif
// center displayed insets
+ Inset * inset;
if (row->par()->GetChar(row->pos()) == LyXParagraph::META_INSET
- && row->par()->GetInset(row->pos())
- && row->par()->GetInset(row->pos())->display())
+ && (inset=row->par()->GetInset(row->pos()))
+ && (inset->display())) // || (inset->scroll() < 0)))
align = LYX_ALIGN_CENTER;
switch (align) {
// version did. (JMarc)
void LyXText::ChangeWordCase(BufferView * bview, LyXText::TextCase action)
{
+#ifndef NEW_INSETS
LyXParagraph * tmppar = cursor.par()->ParFromPos(cursor.pos());
+#else
+ LyXParagraph * tmppar = cursor.par();
+#endif
SetUndo(bview->buffer(),Undo::FINISH, tmppar->previous, tmppar->next);
+#ifndef NEW_INSETS
LyXParagraph::size_type tmppos =
cursor.par()->PositionInParFromPos(cursor.pos());
+#else
+ LyXParagraph::size_type tmppos = cursor.pos();
+#endif
while (tmppos < tmppar->size()) {
unsigned char c = tmppar->GetChar(tmppos);
if (IsKommaChar(c) || IsLineSeparatorChar(c))
if (old_cursor.par() != cursor.par() || old_cursor.pos() != cursor.pos()) {
LyXCursor tmpcursor = cursor;
cursor = old_cursor; // to make sure undo gets the right cursor position
- SetUndo(bview->buffer(), Undo::DELETE,
+ SetUndo(bview->buffer(), Undo::DELETE,
+#ifndef NEW_INSETS
cursor.par()->ParFromPos(cursor.pos())->previous,
- cursor.par()->ParFromPos(cursor.pos())->next);
+ cursor.par()->ParFromPos(cursor.pos())->next
+#else
+ cursor.par()->previous,
+ cursor.par()->next
+#endif
+ );
cursor = tmpcursor;
Backspace(bview);
}
return;
}
}
-
+
+#ifndef NEW_INSETS
if (cursor.par()->ParFromPos(cursor.pos())->previous){
SetUndo(bview->buffer(), Undo::DELETE,
cursor.par()->ParFromPos(cursor.pos())->previous->previous,
cursor.par()->ParFromPos(cursor.pos())->next);
}
+#else
+ if (cursor.par()->previous) {
+ SetUndo(bview->buffer(), Undo::DELETE,
+ cursor.par()->previous->previous,
+ cursor.par()->next);
+ }
+#endif
LyXParagraph * tmppar = cursor.par();
Row * tmprow = cursor.row();
} else {
/* this is the code for a normal backspace, not pasting
* any paragraphs */
- SetUndo(bview->buffer(), Undo::DELETE,
+ SetUndo(bview->buffer(), Undo::DELETE,
+#ifndef NEW_INSETS
cursor.par()->ParFromPos(cursor.pos())->previous,
- cursor.par()->ParFromPos(cursor.pos())->next);
+ cursor.par()->ParFromPos(cursor.pos())->next
+#else
+ cursor.par()->previous,
+ cursor.par()->next
+#endif
+ );
// We used to do CursorLeftIntern() here, but it is
// not a good idea since it triggers the auto-delete
// mechanism. So we do a CursorLeftIntern()-lite,
LyXParagraph::size_type last = RowLastPrintable(row_ptr);
LyXParagraph::size_type vpos, pos;
- float x, tmpx;
- int y_top, y_bottom;
- float fill_separator, fill_hfill, fill_label_hfill;
+ float x;
+ float tmpx;
+ int y_top;
+ int y_bottom;
LyXFont font(LyXFont::ALL_SANE);
int maxdesc;
<< row_ptr->height() << endl;
return;
}
+
+ float fill_separator;
+ float fill_hfill;
+ float fill_label_hfill;
PrepareToPrint(bview, row_ptr, x, fill_separator,
fill_hfill, fill_label_hfill);
x += x_offset;
// clear the area where we want to paint/print
- int ww;
- ww = bview->workWidth();
+ int ww = bview->workWidth();
bool clear_area = true;
Inset * inset = 0;
- if ((last == row_ptr->pos()) &&
+ if (!bview->screen()->forceClear() && (last == row_ptr->pos()) &&
(row_ptr->par()->GetChar(row_ptr->pos()) == LyXParagraph::META_INSET) &&
- (inset=row_ptr->par()->GetInset(row_ptr->pos())))
- {
+ (inset = row_ptr->par()->GetInset(row_ptr->pos()))) {
clear_area = inset->doClearArea();
}
- if (cleared) { // we don't need to clear it's already done!!!
+ // we don't need to clear it's already done!!!
+ if (cleared) {
clear_area = true;
} else if (clear_area) {
- int w;
- if (inset_owner)
- w = inset_owner->width(bview, font);
- else
- w = ww;
+ int w = (inset_owner ? inset_owner->width(bview, font) : ww);
pain.fillRectangle(x_offset, y_offset, w, row_ptr->height());
} else if (inset != 0) {
int h = row_ptr->baseline() - inset->ascent(bview, font);
if (h > 0) {
- int w;
- if (inset_owner)
- w = inset_owner->width(bview, font);
- else
- w = ww;
+ int w = (inset_owner ?
+ inset_owner->width(bview, font) : ww);
pain.fillRectangle(x_offset, y_offset, w, h);
}
h += inset->ascent(bview, font) + inset->descent(bview, font);
if ((row_ptr->height() - h) > 0) {
- int w;
- if (inset_owner)
- w = inset_owner->width(bview, font);
- else
- w = ww;
- pain.fillRectangle(x_offset,h, w, row_ptr->height()-h);
+ int w = (inset_owner ?
+ inset_owner->width(bview, font) : ww);
+ pain.fillRectangle(x_offset,y_offset+h, w, row_ptr->height()-h);
}
if (!inset_owner && !inset->display() && !inset->needFullRow())
{
}
if (selection) {
- int w;
- if (inset_owner)
- w = inset_owner->width(bview, font);
- else
- w = ww;
+ int w = (inset_owner ? inset_owner->width(bview, font) : ww);
/* selection code */
if (bidi_same_direction) {
if (sel_start_cursor.row() == row_ptr &&
} else if (sel_start_cursor.row() == row_ptr ||
sel_end_cursor.row() == row_ptr) {
float tmpx = x;
- int cell = 0;
#ifndef NEW_TABULAR
+ int cell = 0;
if (row_ptr->par()->table) {
cell = NumberOfCell(row_ptr->par(), row_ptr->pos());
tmpx += row_ptr->par()->table->GetBeginningOfTextInCell(cell);
#else
LyXParagraph * par = row_ptr->par();
#endif
- if ((row_ptr->par()->ParFromPos(last + 1) == par) &&
- (!row_ptr->next() || (row_ptr->next()->par() != row_ptr->par())))
+ if (
+#ifndef NEW_INSETS
+ (row_ptr->par()->ParFromPos(last + 1) == par)
+#else
+ (row_ptr->par() == par)
+#endif
+ && (!row_ptr->next() || (row_ptr->next()->par() != row_ptr->par())))
{
/* think about the margins */
if (!row_ptr->next() && bv_owner)
(!rtl && vc == last + 1 && x > tmpx + 5) ))
c = last + 1;
#endif
- else if (vc == row->pos() ||
- (row->par()->table
- && vc <= last && row->par()->IsNewline(vc-1)) ) {
+ else if (vc == row->pos()
+#ifndef NEW_TABULAR
+ || (row->par()->table
+ && vc <= last && row->par()->IsNewline(vc-1))
+#endif
+ ) {
c = vis2log(vc);
if (bidi_level(c) % 2 == 1)
++c;
}
}
- if (!row->par()->table && row->pos() <= last && c > last
- && row->par()->IsNewline(last)) {
+ if (
+#ifndef NEW_TABULAR
+ !row->par()->table &&
+#endif
+ row->pos() <= last && c > last
+ && row->par()->IsNewline(last)) {
if (bidi_level(last) % 2 == 0)
tmpx -= SingleWidth(bview, row->par(), last);
else