commit 7292532417a2e64ea7bac822531e3b6abca4e195
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Apr 21 13:14:58 2025 +0200

    Make TextMetrics hold a const pointer to Text
    
    Only a call to Paragraph::setBodyPos() remains.
---
 src/BufferView.cpp  |  4 ++--
 src/TextMetrics.cpp | 17 +++++++++--------
 src/TextMetrics.h   |  5 ++---
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 3f77c0b95b..4339e54bdd 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -3035,8 +3035,8 @@ TextMetrics & BufferView::textMetrics(Text const * t)
        TextMetricsCache::iterator tmc_it  = d->text_metrics_.find(t);
        if (tmc_it == d->text_metrics_.end()) {
                tmc_it = d->text_metrics_.emplace(std::piecewise_construct,
-                               std::forward_as_tuple(t),
-                               std::forward_as_tuple(this, const_cast<Text 
*>(t))).first;
+                           std::forward_as_tuple(t),
+                           std::forward_as_tuple(this, t)).first;
        }
        return tmc_it->second;
 }
diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index a10cee970e..aabe2bcedb 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -108,7 +108,7 @@ int numberOfHfills(Row const & row, ParagraphMetrics const 
& pm,
 /////////////////////////////////////////////////////////////////////
 
 
-TextMetrics::TextMetrics(BufferView * bv, Text * text)
+TextMetrics::TextMetrics(BufferView * bv, Text const * text)
     : bv_(bv), text_(text), im_(bv_->inputMethod()),
       dim_(bv_->workWidth(), 10, 10), max_width_(dim_.wid)
 {}
@@ -490,7 +490,7 @@ bool TextMetrics::isRTLBoundary(pit_type pit, pos_type pos,
 
 bool TextMetrics::redoParagraph(pit_type const pit, bool const align_rows)
 {
-       Paragraph & par = text_->getPar(pit);
+       Paragraph const & par = text_->getPar(pit);
        // This gets the dimension if it exists and an empty one otherwise.
        Dimension old_dim = dim(pit);
        ParagraphMetrics & pm = par_metrics_[pit];
@@ -521,7 +521,8 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool 
const align_rows)
        }
 
        // redo insets
-       par.setBeginOfBody();
+       // FIXME: contents should not be modified, move elsewhere.
+       const_cast<Paragraph &>(par).setBeginOfBody();
        Font const bufferfont = buffer.params().getFont();
        CoordCache::Insets & insetCache = bv_->coordCache().insets();
        map <Inset const *, int> extrawidths;
@@ -1600,7 +1601,7 @@ void TextMetrics::setCursorFromCoordinates(Cursor & cur, 
int x, int y)
        Row const * row = getRowNearY(y);
        LASSERT(row != nullptr, return);
        auto [pos, bound] = getPosNearX(*row, x);
-       text_->setCursor(cur, row->pit(), pos, true, bound);
+       cur.text()->setCursor(cur, row->pit(), pos, true, bound);
        // remember new position.
        cur.setTargetX();
 }
@@ -1681,7 +1682,7 @@ bool TextMetrics::cursorHome(Cursor & cur)
        LASSERT(text_ == cur.text(), return false);
        ParagraphMetrics const & pm = par_metrics_[cur.pit()];
        Row const & row = pm.getRow(cur.pos(),cur.boundary());
-       return text_->setCursor(cur, cur.pit(), row.pos());
+       return cur.text()->setCursor(cur, cur.pit(), row.pos());
 }
 
 
@@ -1705,7 +1706,7 @@ bool TextMetrics::cursorEnd(Cursor & cur)
                        --end;
        } else if (cur.paragraph().isEnvSeparator(end-1))
                --end;
-       return text_->setCursor(cur, cur.pit(), end, true, boundary);
+       return cur.text()->setCursor(cur, cur.pit(), end, true, boundary);
 }
 
 
@@ -1714,7 +1715,7 @@ void TextMetrics::deleteLineForward(Cursor & cur)
        LASSERT(text_ == cur.text(), return);
        if (cur.lastpos() == 0) {
                // Paragraph is empty, so we just go forward
-               text_->cursorForward(cur);
+               cur.text()->cursorForward(cur);
        } else {
                cur.resetAnchor();
                cur.selection(true); // to avoid deletion
@@ -1722,7 +1723,7 @@ void TextMetrics::deleteLineForward(Cursor & cur)
                cur.setSelection();
                // What is this test for ??? (JMarc)
                if (!cur.selection())
-                       text_->deleteWordForward(cur);
+                       cur.text()->deleteWordForward(cur);
                else
                        cap::cutSelection(cur, false);
                cur.checkBufferStructure();
diff --git a/src/TextMetrics.h b/src/TextMetrics.h
index 1109bae3cd..33c871b39b 100644
--- a/src/TextMetrics.h
+++ b/src/TextMetrics.h
@@ -40,7 +40,7 @@ public:
        /// Default constructor (only here for STL containers).
        TextMetrics() {}
        /// The only useful constructor.
-       TextMetrics(BufferView *, Text *);
+       TextMetrics(BufferView *, Text const *);
 
        /// A map from paragraph index number to paragraph metrics
        typedef std::map<pit_type, ParagraphMetrics> ParMetricsCache;
@@ -253,8 +253,7 @@ private:
        BufferView * bv_ = nullptr;
 
        /// The text contents (the model).
-       /// \todo FIXME: this should be const.
-       Text * text_ = nullptr;
+       Text const * text_ = nullptr;
 
        /// The input method instance
        frontend::InputMethod * im_ = nullptr;
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
https://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to