mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-26 22:17:41 +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),
|
: width_(0), height_(0), buffer_(buf), wh_(0),
|
||||||
cursor_(*this),
|
cursor_(*this),
|
||||||
multiparsel_cache_(false), anchor_ref_(0), offset_ref_(0),
|
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;
|
xsel_cache_.set = false;
|
||||||
intl_->initKeyMapper(lyxrc.use_kbmap);
|
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();
|
CursorSlice & bot = cursor_.bottom();
|
||||||
TextMetrics & tm = text_metrics_[bot.text()];
|
TextMetrics & tm = text_metrics_[bot.text()];
|
||||||
pit_type const pit = bot.pit();
|
pit_type const pit = bot.pit();
|
||||||
tm.redoParagraph(pit);
|
|
||||||
ParagraphMetrics const & pm = tm.parMetrics(pit);
|
ParagraphMetrics const & pm = tm.parMetrics(pit);
|
||||||
anchor_ref_ = pit;
|
anchor_ref_ = pit;
|
||||||
offset_ref_ = bv_funcs::coordOffset(*this, cursor_, cursor_.boundary()).y_
|
//DocIterator dit;
|
||||||
+ pm.ascent() - height_ / 2;
|
//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)
|
if (!singlepar)
|
||||||
tm.redoParagraph(pit);
|
tm.redoParagraph(pit);
|
||||||
|
|
||||||
|
updateOffsetRef();
|
||||||
|
|
||||||
int y0 = tm.parMetrics(pit).ascent() - offset_ref_;
|
int y0 = tm.parMetrics(pit).ascent() - offset_ref_;
|
||||||
|
|
||||||
// Redo paragraphs above anchor if necessary.
|
// Redo paragraphs above anchor if necessary.
|
||||||
|
@ -284,6 +284,10 @@ private:
|
|||||||
pit_type anchor_ref_;
|
pit_type anchor_ref_;
|
||||||
///
|
///
|
||||||
int offset_ref_;
|
int offset_ref_;
|
||||||
|
///
|
||||||
|
void updateOffsetRef();
|
||||||
|
///
|
||||||
|
bool need_centering_;
|
||||||
|
|
||||||
/// keyboard mapping object.
|
/// keyboard mapping object.
|
||||||
boost::scoped_ptr<Intl> const intl_;
|
boost::scoped_ptr<Intl> const intl_;
|
||||||
|
Loading…
Reference in New Issue
Block a user