better fix for anchorrow problem

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7555 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-08-15 13:12:24 +00:00
parent 9a7cef54a6
commit 43637efd25
4 changed files with 15 additions and 62 deletions

View File

@ -76,7 +76,8 @@ void QScreen::draw(LyXText * text, BufferView * bv, unsigned int y)
text->top_y(y); text->top_y(y);
drawFromTo(text, bv, 0, owner_.height(), 0, 0); // not needed in the xforms frontend anymore
//drawFromTo(text, bv, 0, owner_.height(), 0, 0);
repaint(); repaint();
owner_.getPainter().end(); owner_.getPainter().end();

View File

@ -66,13 +66,8 @@ public:
/// our buffer's default layout font /// our buffer's default layout font
LyXFont defaultfont_; LyXFont defaultfont_;
private: private:
/** the 'anchor' row: the position of this row remains constant /// offset of dran area to document start.
* with respect to the top of the screen int anchor_y_;
*/
RowList::iterator anchor_row_;
/** the pixel offset with respect to this row of top_y
*/
int anchor_row_offset_;
public: public:
/// update all cached row positions /// update all cached row positions
void updateRowPositions(); void updateRowPositions();

View File

@ -97,10 +97,7 @@ void LyXText::updateRowPositions()
int LyXText::top_y() const int LyXText::top_y() const
{ {
if (anchor_row_ == endRow()) return anchor_y_;
return 0;
return anchor_row_->y() + anchor_row_offset_;
} }
@ -109,32 +106,8 @@ void LyXText::top_y(int newy)
if (ownerParagraphs().begin()->rows.empty()) if (ownerParagraphs().begin()->rows.empty())
return; return;
if (isInInset()) { anchor_y_ = newy;
anchor_row_ = firstRow(); lyxerr[Debug::GUI] << "changing reference to offset: " << anchor_y_ << endl;
anchor_row_offset_ = newy;
return;
}
lyxerr[Debug::GUI] << "setting top y = " << newy << endl;
int y = newy;
ParagraphList::iterator dummypit;
anchor_row_ = getRowNearY(y, dummypit);
anchor_row_offset_ = newy - y;
lyxerr[Debug::GUI] << "changing reference to row: " << &*anchor_row_
<< " offset: " << anchor_row_offset_ << endl;
}
void LyXText::anchor_row(RowList::iterator rit)
{
int old_y = top_y();
anchor_row_offset_ = 0;
anchor_row_ = rit;
anchor_row_offset_ = old_y - top_y();
lyxerr[Debug::GUI] << "anchor_row(): changing reference to row: "
<< &*anchor_row_ << " offset: "
<< anchor_row_offset_ << endl;
} }

View File

@ -60,19 +60,15 @@ using lyx::pos_type;
LyXText::LyXText(BufferView * bv) LyXText::LyXText(BufferView * bv)
: height(0), width(0), anchor_row_offset_(0), : height(0), width(0), anchor_y_(0),
inset_owner(0), the_locking_inset(0), bv_owner(bv) inset_owner(0), the_locking_inset(0), bv_owner(bv)
{ {}
anchor_row_ = endRow();
}
LyXText::LyXText(BufferView * bv, InsetText * inset) LyXText::LyXText(BufferView * bv, InsetText * inset)
: height(0), width(0), anchor_row_offset_(0), : height(0), width(0), anchor_y_(0),
inset_owner(inset), the_locking_inset(0), bv_owner(bv) inset_owner(inset), the_locking_inset(0), bv_owner(bv)
{ {}
anchor_row_ = endRow();
}
void LyXText::init(BufferView * bview) void LyXText::init(BufferView * bview)
@ -87,8 +83,7 @@ void LyXText::init(BufferView * bview)
width = 0; width = 0;
height = 0; height = 0;
anchor_row_ = endRow(); anchor_y_ = 0;
anchor_row_offset_ = 0;
current_font = getFont(beg, 0); current_font = getFont(beg, 0);
@ -559,12 +554,9 @@ void LyXText::redoParagraph(ParagraphList::iterator pit)
RowList::iterator end = pit->rows.end(); RowList::iterator end = pit->rows.end();
// remove rows of paragraph // remove rows of paragraph
int anchor_cnt = -1; for (int i = 0; rit != end; ++rit, ++i)
for (int i = 0; rit != end; ++rit, ++i) {
if (rit == anchor_row_)
anchor_cnt = i;
height -= rit->height(); height -= rit->height();
}
pit->rows.clear(); pit->rows.clear();
// rebreak the paragraph // rebreak the paragraph
@ -589,13 +581,6 @@ void LyXText::redoParagraph(ParagraphList::iterator pit)
setHeightOfRow(pit, tmprow); setHeightOfRow(pit, tmprow);
} }
if (anchor_cnt == -1) {
if (anchor_cnt >= pit->rows.size())
anchor_cnt = pit->rows.size();
anchor_row_ = pit->rows.begin();
advance(anchor_row_, anchor_cnt);
}
//lyxerr << "redoParagraph: " << pit->rows.size() << " rows\n"; //lyxerr << "redoParagraph: " << pit->rows.size() << " rows\n";
} }
@ -617,8 +602,7 @@ void LyXText::metrics(MetricsInfo & mi, Dimension & dim)
width = 0; width = 0;
height = 0; height = 0;
anchor_row_ = endRow(); //anchor_y_ = 0;
anchor_row_offset_ = 0;
ParagraphList::iterator pit = ownerParagraphs().begin(); ParagraphList::iterator pit = ownerParagraphs().begin();
ParagraphList::iterator end = ownerParagraphs().end(); ParagraphList::iterator end = ownerParagraphs().end();