}
-/// Looks for next inset with the given code
-void findInset(DocIterator & dit, InsetCode code, bool same_content)
-{
- findInset(dit, vector<InsetCode>(1, code), same_content);
-}
-
-
/// Moves cursor to the next inset with one of the given codes.
void gotoInset(BufferView * bv, vector<InsetCode> const & codes,
bool same_content)
}
-/// Moves cursor to the next inset with given code.
-void gotoInset(BufferView * bv, InsetCode code, bool same_content)
-{
- gotoInset(bv, vector<InsetCode>(1, code), same_content);
-}
-
-
/// A map from a Text to the associated text metrics
typedef map<Text const *, TextMetrics> TextMetricsCache;
}
+int BufferView::topMargin() const
+{
+ // original value was 20px, which is 0.2in at 100dpi
+ return zoomedPixels(20);
+}
+
+
+int BufferView::bottomMargin() const
+{
+ // original value was 20px, which is 0.2in at 100dpi
+ return zoomedPixels(20);
+}
+
+
int BufferView::inPixels(Length const & len) const
{
Font const font = buffer().params().getFont();
if (height_ == 0)
return false;
- LYXERR(Debug::SCROLLING, "recentering!");
+ if (recenter)
+ LYXERR(Debug::SCROLLING, "recentering and scrolling to cursor");
+ else
+ LYXERR(Debug::SCROLLING, "scrolling to cursor");
CursorSlice const & bot = dit.bottom();
TextMetrics & tm = d->text_metrics_[bot.text()];
}
case LFUN_NOTE_NEXT:
- gotoInset(this, NOTE_CODE, false);
+ gotoInset(this, { NOTE_CODE }, false);
+ // FIXME: if SinglePar is changed to act on the inner
+ // paragraph, this will not be OK anymore. The update is
+ // useful for auto-open collapsible insets.
+ dr.screenUpdate(Update::SinglePar | Update::FitCursor);
break;
case LFUN_REFERENCE_NEXT: {
- vector<InsetCode> tmp;
- tmp.push_back(LABEL_CODE);
- tmp.push_back(REF_CODE);
- gotoInset(this, tmp, true);
+ gotoInset(this, { LABEL_CODE, REF_CODE }, true);
+ // FIXME: if SinglePar is changed to act on the inner
+ // paragraph, this will not be OK anymore. The update is
+ // useful for auto-open collapsible insets.
+ dr.screenUpdate(Update::SinglePar | Update::FitCursor);
break;
}
case LFUN_BIBTEX_DATABASE_ADD: {
Cursor tmpcur = cur;
- findInset(tmpcur, BIBTEX_CODE, false);
+ findInset(tmpcur, { BIBTEX_CODE }, false);
InsetBibtex * inset = getInsetByCode<InsetBibtex>(tmpcur,
BIBTEX_CODE);
if (inset) {
case LFUN_BIBTEX_DATABASE_DEL: {
Cursor tmpcur = cur;
- findInset(tmpcur, BIBTEX_CODE, false);
+ findInset(tmpcur, { BIBTEX_CODE }, false);
InsetBibtex * inset = getInsetByCode<InsetBibtex>(tmpcur,
BIBTEX_CODE);
if (inset) {
Text & buftext = buffer_.text();
pit_type const bottom_pit = d->cursor_.bottom().pit();
TextMetrics & tm = textMetrics(&buftext);
- int old_height = tm.parMetrics(bottom_pit).height();
+ Dimension const old_dim = tm.parMetrics(bottom_pit).dim();
// make sure inline completion pointer is ok
if (d->inlineCompletionPos_.fixIfBroken())
// (if this paragraph contains insets etc., rebreaking will
// recursively descend)
tm.redoParagraph(bottom_pit);
- ParagraphMetrics const & pm = tm.parMetrics(bottom_pit);
- if (pm.height() != old_height)
+ ParagraphMetrics & pm = tm.parMetrics(bottom_pit);
+ if (pm.height() != old_dim.height()) {
// Paragraph height has changed so we cannot proceed to
// the singlePar optimisation.
return false;
+ }
+ // Since position() points to the baseline of the first row, we
+ // may have to update it. See ticket #11601 for an example where
+ // the height does not change but the ascent does.
+ pm.setPosition(pm.position() - old_dim.ascent() + pm.ascent());
tm.updatePosCache(bottom_pit);
// Rebreak anchor paragraph.
tm.redoParagraph(d->anchor_pit_);
- ParagraphMetrics & anchor_pm = tm.par_metrics_[d->anchor_pit_];
+ ParagraphMetrics & anchor_pm = tm.parMetrics(d->anchor_pit_);
// position anchor
if (d->anchor_pit_ == 0) {
pit_type pit1 = d->anchor_pit_ - 1;
for (; pit1 >= 0 && y1 >= 0; --pit1) {
tm.redoParagraph(pit1);
- ParagraphMetrics & pm = tm.par_metrics_[pit1];
+ ParagraphMetrics & pm = tm.parMetrics(pit1);
y1 -= pm.descent();
// Save the paragraph position in the cache.
pm.setPosition(y1);
pit_type pit2 = d->anchor_pit_ + 1;
for (; pit2 < npit && y2 <= height_; ++pit2) {
tm.redoParagraph(pit2);
- ParagraphMetrics & pm = tm.par_metrics_[pit2];
+ ParagraphMetrics & pm = tm.parMetrics(pit2);
y2 += pm.ascent();
// Save the paragraph position in the cache.
pm.setPosition(y2);