From ab02a907f0de3d638e024dbe65566b85578f12fb Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Mon, 25 Feb 2019 11:58:50 +0100 Subject: [PATCH] Move some TextMetrics code around. No change intended. --- src/TextMetrics.cpp | 100 ++++++++++++++++++++++---------------------- src/TextMetrics.h | 21 +++++----- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp index 89f8d92075..28d0d87b0e 100644 --- a/src/TextMetrics.cpp +++ b/src/TextMetrics.cpp @@ -130,13 +130,6 @@ bool TextMetrics::contains(pit_type pit) const } -ParagraphMetrics const & TextMetrics::parMetrics(pit_type pit) const -{ - return const_cast(this)->parMetrics(pit, true); -} - - - pair TextMetrics::first() const { ParMetricsCache::const_iterator it = par_metrics_.begin(); @@ -152,6 +145,20 @@ pair TextMetrics::last() const } +bool TextMetrics::isLastRow(Row const & row) const +{ + ParagraphList const & pars = text_->paragraphs(); + return row.endpos() >= pars[row.pit()].size() + && row.pit() + 1 == pit_type(pars.size()); +} + + +bool TextMetrics::isFirstRow(Row const & row) const +{ + return row.pos() == 0 && row.pit() == 0; +} + + ParagraphMetrics & TextMetrics::parMetrics(pit_type pit, bool redo) { ParMetricsCache::iterator pmc_it = par_metrics_.find(pit); @@ -165,6 +172,42 @@ ParagraphMetrics & TextMetrics::parMetrics(pit_type pit, bool redo) } +ParagraphMetrics const & TextMetrics::parMetrics(pit_type pit) const +{ + return const_cast(this)->parMetrics(pit, true); +} + + +void TextMetrics::newParMetricsDown() +{ + pair const & last = *par_metrics_.rbegin(); + pit_type const pit = last.first + 1; + if (pit == int(text_->paragraphs().size())) + return; + + // do it and update its position. + redoParagraph(pit); + par_metrics_[pit].setPosition(last.second.position() + + last.second.descent() + par_metrics_[pit].ascent()); + updatePosCache(pit); +} + + +void TextMetrics::newParMetricsUp() +{ + pair const & first = *par_metrics_.begin(); + if (first.first == 0) + return; + + pit_type const pit = first.first - 1; + // do it and update its position. + redoParagraph(pit); + par_metrics_[pit].setPosition(first.second.position() + - first.second.ascent() - par_metrics_[pit].descent()); + updatePosCache(pit); +} + + bool TextMetrics::metrics(MetricsInfo & mi, Dimension & dim, int min_width, bool const expand_on_multipars) { @@ -1204,35 +1247,6 @@ pos_type TextMetrics::x2pos(pit_type pit, int row, int x) const } -void TextMetrics::newParMetricsDown() -{ - pair const & last = *par_metrics_.rbegin(); - pit_type const pit = last.first + 1; - if (pit == int(text_->paragraphs().size())) - return; - - // do it and update its position. - redoParagraph(pit); - par_metrics_[pit].setPosition(last.second.position() - + last.second.descent() + par_metrics_[pit].ascent()); - updatePosCache(pit); -} - - -void TextMetrics::newParMetricsUp() -{ - pair const & first = *par_metrics_.begin(); - if (first.first == 0) - return; - - pit_type const pit = first.first - 1; - // do it and update its position. - redoParagraph(pit); - par_metrics_[pit].setPosition(first.second.position() - - first.second.ascent() - par_metrics_[pit].descent()); - updatePosCache(pit); -} - // y is screen coordinate pit_type TextMetrics::getPitNearY(int y) { @@ -1566,20 +1580,6 @@ void TextMetrics::deleteLineForward(Cursor & cur) } -bool TextMetrics::isLastRow(Row const & row) const -{ - ParagraphList const & pars = text_->paragraphs(); - return row.endpos() >= pars[row.pit()].size() - && row.pit() + 1 == pit_type(pars.size()); -} - - -bool TextMetrics::isFirstRow(Row const & row) const -{ - return row.pos() == 0 && row.pit() == 0; -} - - int TextMetrics::leftMargin(pit_type pit) const { return leftMargin(pit, text_->paragraphs()[pit].size()); diff --git a/src/TextMetrics.h b/src/TextMetrics.h index 1a3ce0ecca..ba1371fd87 100644 --- a/src/TextMetrics.h +++ b/src/TextMetrics.h @@ -42,11 +42,13 @@ public: /// bool contains(pit_type pit) const; /// - ParagraphMetrics const & parMetrics(pit_type) const; - /// std::pair first() const; /// std::pair last() const; + /// is this row the last in the text? + bool isLastRow(Row const & row) const; + /// is this row the first in the text? + bool isFirstRow(Row const & row) const; /// Dimension const & dim() const { return dim_; } @@ -54,15 +56,17 @@ public: Point const & origin() const { return origin_; } - /// compute text metrics. - bool metrics(MetricsInfo & mi, Dimension & dim, int min_width = 0, - bool const expand_on_multipars = true); - + /// + ParagraphMetrics const & parMetrics(pit_type) const; /// void newParMetricsDown(); /// void newParMetricsUp(); + /// compute text metrics. + bool metrics(MetricsInfo & mi, Dimension & dim, int min_width = 0, + bool const expand_on_multipars = true); + /// The "nodraw" drawing stage for one single paragraph: set the /// positions of the insets contained this paragraph in metrics /// cache. Related to BufferView::updatePosCache. @@ -220,11 +224,6 @@ public: /// void deleteLineForward(Cursor & cur); - /// is this row the last in the text? - bool isLastRow(Row const & row) const; - /// is this row the first in the text? - bool isFirstRow(Row const & row) const; - /// Returns an inset if inset was hit, or 0 if not. /// \warning This method is not recursive! It will return the /// outermost inset within this Text.