lyx_mirror/src/ParagraphMetrics.h
Jean-Marc Lasgouttes a71610b9d7 Remove row crc computation
This computation did not make sense anymore since we began to put the
contents in the Row object. The fact that it worked was a coincidence.

Instead, we set rows as changed() on creation and reset that once they
have been drawn. This will allow in the future for a finer definition
of what to redraw or not.

Also update the PAINTING_ANALYSIS document

(cherry picked from commit 9e2da4a3ea)
2018-02-15 12:29:25 +01:00

106 lines
2.4 KiB
C++

// -*- C++ -*-
/**
* \file ParagraphMetrics.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author Asger Alstrup
* \author Lars Gullik Bjønnes
* \author John Levon
* \author André Pönitz
* \author Jürgen Vigna
* \author Abdelrazak Younes
*
* Full author contact details are available in file CREDITS.
*/
#ifndef PARAGRAPH_METRICS_H
#define PARAGRAPH_METRICS_H
#include "Dimension.h"
#include "Row.h"
#include <map>
#include <vector>
namespace lyx {
/**
* Each paragraph is broken up into a number of rows on the screen.
* This is a list of such on-screen rows, ordered from the top row
* downwards.
*/
typedef std::vector<Row> RowList;
class Buffer;
class BufferView;
class BufferParams;
class Font;
class Inset;
class Paragraph;
class MetricsInfo;
class PainterInfo;
/// Helper class for paragraph metrics.
class ParagraphMetrics {
public:
/// Default constructor (only here for STL containers).
ParagraphMetrics() : position_(0), par_(0) {}
/// The only useful constructor.
explicit ParagraphMetrics(Paragraph const & par);
/// Copy operator.
ParagraphMetrics & operator=(ParagraphMetrics const &);
void reset(Paragraph const & par);
///
Row & getRow(pos_type pos, bool boundary);
///
Row const & getRow(pos_type pos, bool boundary) const;
///
size_t pos2row(pos_type pos) const;
/// TextMetrics::redoParagraph updates this
Dimension const & dim() const { return dim_; }
Dimension & dim() { return dim_; }
/// total height of paragraph
int height() const { return dim_.height(); }
/// total width of paragraph, may differ from workwidth
int width() const { return dim_.width(); }
/// ascend of paragraph above baseline
int ascent() const { return dim_.ascent(); }
/// descend of paragraph below baseline
int descent() const { return dim_.descent(); }
/// Text updates the rows using this access point
RowList & rows() { return rows_; }
/// The painter and others use this
RowList const & rows() const { return rows_; }
///
int rightMargin(BufferView const & bv) const;
/// dump some information to lyxerr
void dump() const;
///
bool hfillExpansion(Row const & row, pos_type pos) const;
///
int position() const { return position_; }
void setPosition(int position);
private:
///
int position_;
///
mutable RowList rows_;
/// cached dimensions of paragraph
Dimension dim_;
///
Paragraph const * par_;
};
} // namespace lyx
#endif // PARAGRAPH_METRICS_H