mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-27 14:29:21 +00:00
anchorRow
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6526 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
73a37f0b2d
commit
3ea0a9e5f4
@ -1,3 +1,9 @@
|
|||||||
|
2003-03-18 Alfredo Braunstein <abraunst@libero.it>
|
||||||
|
|
||||||
|
* lyxtext.h:
|
||||||
|
* text.C:
|
||||||
|
* text2.C: anchor row on setCursor
|
||||||
|
|
||||||
2003-03-18 Alfredo Braunstein <abraunst@libero.it>
|
2003-03-18 Alfredo Braunstein <abraunst@libero.it>
|
||||||
|
|
||||||
* lyxtext.h: remove almost all mutable keywords
|
* lyxtext.h: remove almost all mutable keywords
|
||||||
|
@ -84,17 +84,20 @@ public:
|
|||||||
/// the current font
|
/// the current font
|
||||||
LyXFont real_current_font;
|
LyXFont real_current_font;
|
||||||
private:
|
private:
|
||||||
/** the first visible row on screen
|
/** the 'anchor' row: the position of this row remains constant
|
||||||
|
* with respect to the top of the screen
|
||||||
*/
|
*/
|
||||||
Row * top_row_;
|
Row * anchor_row_;
|
||||||
/** the pixel offset with respect to this row of top_y
|
/** the pixel offset with respect to this row of top_y
|
||||||
*/
|
*/
|
||||||
int top_row_offset_;
|
int anchor_row_offset_;
|
||||||
public:
|
public:
|
||||||
/// get the y coord. of the top of the screen (relative to doc start)
|
/// get the y coord. of the top of the screen (relative to doc start)
|
||||||
int top_y() const;
|
int top_y() const;
|
||||||
/// set it
|
/// set the y coord. of the top of the screen (relative to doc start)
|
||||||
void top_y(int newy);
|
void top_y(int newy);
|
||||||
|
/// set the anchoring row. top_y will be computed relative to this
|
||||||
|
void anchor_row(Row * row);
|
||||||
///
|
///
|
||||||
InsetText * inset_owner;
|
InsetText * inset_owner;
|
||||||
///
|
///
|
||||||
|
27
src/text.C
27
src/text.C
@ -74,14 +74,15 @@ BufferView * LyXText::bv() const
|
|||||||
|
|
||||||
int LyXText::top_y() const
|
int LyXText::top_y() const
|
||||||
{
|
{
|
||||||
if (!top_row_)
|
if (!anchor_row_)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int y = 0;
|
int y = 0;
|
||||||
for (Row * row = firstrow; row && row != top_row_; row = row->next()) {
|
for (Row * row = firstrow;
|
||||||
|
row && row != anchor_row_; row = row->next()) {
|
||||||
y += row->height();
|
y += row->height();
|
||||||
}
|
}
|
||||||
return y + top_row_offset_;
|
return y + anchor_row_offset_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -92,10 +93,22 @@ void LyXText::top_y(int newy)
|
|||||||
lyxerr[Debug::GUI] << "setting top y = " << newy << endl;
|
lyxerr[Debug::GUI] << "setting top y = " << newy << endl;
|
||||||
|
|
||||||
int y = newy;
|
int y = newy;
|
||||||
top_row_ = getRowNearY(y);
|
anchor_row_ = getRowNearY(y);
|
||||||
top_row_offset_ = newy - y;
|
anchor_row_offset_ = newy - y;
|
||||||
lyxerr[Debug::GUI] << "changing reference to row: " << top_row_
|
lyxerr[Debug::GUI] << "changing reference to row: " << anchor_row_
|
||||||
<< " offset: " << top_row_offset_ << endl;
|
<< " offset: " << anchor_row_offset_ << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LyXText::anchor_row(Row * row)
|
||||||
|
{
|
||||||
|
int old_y = top_y();
|
||||||
|
anchor_row_offset_ = 0;
|
||||||
|
anchor_row_ = row;
|
||||||
|
anchor_row_offset_ = old_y - top_y();
|
||||||
|
lyxerr[Debug::GUI] << "anchor_row(): changing reference to row: "
|
||||||
|
<< anchor_row_ << " offset: " << anchor_row_offset_
|
||||||
|
<< endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
20
src/text2.C
20
src/text2.C
@ -52,7 +52,7 @@ using lyx::pos_type;
|
|||||||
|
|
||||||
|
|
||||||
LyXText::LyXText(BufferView * bv)
|
LyXText::LyXText(BufferView * bv)
|
||||||
: height(0), width(0), top_row_(0), top_row_offset_(0),
|
: height(0), width(0), anchor_row_(0), anchor_row_offset_(0),
|
||||||
inset_owner(0), the_locking_inset(0), need_break_row(0),
|
inset_owner(0), the_locking_inset(0), need_break_row(0),
|
||||||
bv_owner(bv), firstrow(0), lastrow(0)
|
bv_owner(bv), firstrow(0), lastrow(0)
|
||||||
{
|
{
|
||||||
@ -61,7 +61,7 @@ LyXText::LyXText(BufferView * bv)
|
|||||||
|
|
||||||
|
|
||||||
LyXText::LyXText(BufferView * bv, InsetText * inset)
|
LyXText::LyXText(BufferView * bv, InsetText * inset)
|
||||||
: height(0), width(0), top_row_(0), top_row_offset_(0),
|
: height(0), width(0), anchor_row_(0), anchor_row_offset_(0),
|
||||||
inset_owner(inset), the_locking_inset(0), need_break_row(0),
|
inset_owner(inset), the_locking_inset(0), need_break_row(0),
|
||||||
bv_owner(bv), firstrow(0), lastrow(0)
|
bv_owner(bv), firstrow(0), lastrow(0)
|
||||||
{
|
{
|
||||||
@ -331,13 +331,13 @@ void LyXText::removeRow(Row * row)
|
|||||||
// what about refresh_y
|
// what about refresh_y
|
||||||
}
|
}
|
||||||
|
|
||||||
if (top_row_ == row) {
|
if (anchor_row_ == row) {
|
||||||
if (row->next()) {
|
if (row_prev) {
|
||||||
top_row_ = row->next();
|
anchor_row_ = row_prev;
|
||||||
top_row_offset_ -= row->height();
|
anchor_row_offset_ = 0;
|
||||||
} else {
|
} else {
|
||||||
top_row_ = row_prev;
|
anchor_row_ = row->next();
|
||||||
top_row_offset_ = 0;
|
anchor_row_offset_ -= row->height();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1793,6 +1793,10 @@ void LyXText::setCursor(LyXCursor & cur, Paragraph * par,
|
|||||||
cur.ix(int(x));
|
cur.ix(int(x));
|
||||||
} else
|
} else
|
||||||
cur.ix(cur.x());
|
cur.ix(cur.x());
|
||||||
|
//if the cursor is in a visible row, anchor to it
|
||||||
|
int topy = top_y();
|
||||||
|
if (topy < y && y < topy + bv()->workHeight())
|
||||||
|
anchor_row(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user