mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-26 14:15:32 +00:00
Fix bug 3427:
http://bugzilla.lyx.org/show_bug.cgi?id=3427 The problem was that offset_ref_ was calculated based on an empty metrics. The solution is delay the calculation up until the next metrics update. * BufferView: - center(): now just set the anchor_ref and program a new screen recentering. - updateOffsetRef(): update the offset_ref_ git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19721 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
8202f63160
commit
5203c56db4
@ -126,7 +126,7 @@ BufferView::BufferView(Buffer & buf)
|
||||
: width_(0), height_(0), buffer_(buf), wh_(0),
|
||||
cursor_(*this),
|
||||
multiparsel_cache_(false), anchor_ref_(0), offset_ref_(0),
|
||||
intl_(new Intl), last_inset_(0)
|
||||
need_centering_(false), intl_(new Intl), last_inset_(0)
|
||||
{
|
||||
xsel_cache_.set = false;
|
||||
intl_->initKeyMapper(lyxrc.use_kbmap);
|
||||
@ -478,16 +478,37 @@ int BufferView::workWidth() const
|
||||
}
|
||||
|
||||
|
||||
void BufferView::center()
|
||||
void BufferView::updateOffsetRef()
|
||||
{
|
||||
if (!need_centering_)
|
||||
return;
|
||||
|
||||
if (height_ == 0)
|
||||
return;
|
||||
|
||||
CursorSlice & bot = cursor_.bottom();
|
||||
TextMetrics & tm = text_metrics_[bot.text()];
|
||||
pit_type const pit = bot.pit();
|
||||
tm.redoParagraph(pit);
|
||||
ParagraphMetrics const & pm = tm.parMetrics(pit);
|
||||
anchor_ref_ = pit;
|
||||
offset_ref_ = bv_funcs::coordOffset(*this, cursor_, cursor_.boundary()).y_
|
||||
+ pm.ascent() - height_ / 2;
|
||||
//DocIterator dit;
|
||||
//dit.push_back(bot);
|
||||
//dit.pos() = 0;
|
||||
|
||||
Point p = bv_funcs::coordOffset(*this, cursor_, cursor_.boundary());
|
||||
offset_ref_ = p.y_ + pm.ascent() - height_ / 2;
|
||||
|
||||
lyxerr << "p.y_ " << p.y_ << " pm.ascent() " << pm.ascent() << " h/2 " << height_/2
|
||||
<< " offset_ref_ " << offset_ref_ << endl;
|
||||
|
||||
need_centering_ = false;
|
||||
}
|
||||
|
||||
|
||||
void BufferView::center()
|
||||
{
|
||||
anchor_ref_ = cursor_.bottom().pit();
|
||||
need_centering_ = true;
|
||||
}
|
||||
|
||||
|
||||
@ -1350,6 +1371,8 @@ void BufferView::updateMetrics(bool singlepar)
|
||||
if (!singlepar)
|
||||
tm.redoParagraph(pit);
|
||||
|
||||
updateOffsetRef();
|
||||
|
||||
int y0 = tm.parMetrics(pit).ascent() - offset_ref_;
|
||||
|
||||
// Redo paragraphs above anchor if necessary.
|
||||
|
@ -284,6 +284,10 @@ private:
|
||||
pit_type anchor_ref_;
|
||||
///
|
||||
int offset_ref_;
|
||||
///
|
||||
void updateOffsetRef();
|
||||
///
|
||||
bool need_centering_;
|
||||
|
||||
/// keyboard mapping object.
|
||||
boost::scoped_ptr<Intl> const intl_;
|
||||
|
Loading…
Reference in New Issue
Block a user