mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Improve handling of top and bottom margin
The 20px space on top and bottom of document have traditionally been obtained by adding them to the ascent/descent of the first/last row. This leads to annoyances like selections that are drawn in these margins and issues with the nesting marker. The change is to add the value to the ParagraphMetrics ascent/descent only and to correct one place where the ascent of the first row may be different from the ascent of the ParagraphMetrcs object. There may be other places where this should be done. Fixes bug #9545.
This commit is contained in:
parent
32f06d01ec
commit
907f020724
@ -360,6 +360,20 @@ int BufferView::leftMargin() const
|
||||
}
|
||||
|
||||
|
||||
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();
|
||||
|
@ -104,9 +104,12 @@ public:
|
||||
|
||||
/// right margin
|
||||
int rightMargin() const;
|
||||
|
||||
/// left margin
|
||||
int leftMargin() const;
|
||||
/// top margin
|
||||
int topMargin() const;
|
||||
/// bottom margin
|
||||
int bottomMargin() const;
|
||||
|
||||
/// return the on-screen size of this length
|
||||
/*
|
||||
|
@ -557,28 +557,6 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows)
|
||||
if (row_index < pm.rows().size())
|
||||
pm.rows().resize(row_index);
|
||||
|
||||
// FIXME: It might be better to move this in another method
|
||||
// specially tailored for the main text.
|
||||
// Top and bottom margin of the document (only at top-level)
|
||||
if (text_->isMainText()) {
|
||||
// original value was 20px, which is 0.2in at 100dpi
|
||||
int const margin = bv_->zoomedPixels(20);
|
||||
if (pit == 0) {
|
||||
pm.rows().front().dim().asc += margin;
|
||||
/* coverity thinks that we should update pm.dim().asc
|
||||
* below, but all the rows heights are actually counted as
|
||||
* part of the paragraph metric descent see loop above).
|
||||
*/
|
||||
// coverity[copy_paste_error]
|
||||
pm.dim().des += margin;
|
||||
}
|
||||
ParagraphList const & pars = text_->paragraphs();
|
||||
if (pit + 1 == pit_type(pars.size())) {
|
||||
pm.rows().back().dim().des += margin;
|
||||
pm.dim().des += margin;
|
||||
}
|
||||
}
|
||||
|
||||
// The space above and below the paragraph.
|
||||
int const top = parTopSpacing(pit);
|
||||
pm.rows().front().dim().asc += top;
|
||||
@ -589,6 +567,18 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows)
|
||||
pm.dim().asc += pm.rows()[0].ascent();
|
||||
pm.dim().des -= pm.rows()[0].ascent();
|
||||
|
||||
// Top and bottom margin of the document (only at top-level)
|
||||
// FIXME: It might be better to move this in another method
|
||||
// specially tailored for the main text.
|
||||
if (text_->isMainText()) {
|
||||
if (pit == 0)
|
||||
pm.dim().asc += bv_->topMargin();
|
||||
ParagraphList const & pars = text_->paragraphs();
|
||||
if (pit + 1 == pit_type(pars.size())) {
|
||||
pm.dim().des += bv_->bottomMargin();
|
||||
}
|
||||
}
|
||||
|
||||
changed |= old_dim.height() != pm.dim().height();
|
||||
|
||||
return changed;
|
||||
@ -1333,7 +1323,7 @@ Row const & TextMetrics::getPitAndRowNearY(int & y, pit_type & pit,
|
||||
{
|
||||
ParagraphMetrics const & pm = par_metrics_[pit];
|
||||
|
||||
int yy = pm.position() - pm.ascent();
|
||||
int yy = pm.position() - pm.rows().front().ascent();
|
||||
LBUFERR(!pm.rows().empty());
|
||||
RowList::const_iterator rit = pm.rows().begin();
|
||||
RowList::const_iterator rlast = pm.rows().end();
|
||||
|
Loading…
Reference in New Issue
Block a user