mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-17 02:05:48 +00:00
42b23f3fb2
The bookmarks are shown with circled numbers in the right margin (or the left margin in RTL mode). A new color "bookmarks" has been added. Currently bookmark 0 (the return position) is not displayed because it is very disturbing in practice. To make this work, a new method BookmarksSection::bookmarksInPar retuns the list of bookmarks in a paragraph along with their position. Force redraw when using bookmark-save and bookmark-clear. Caveats: - this solution does not show the precise position of the bookmark (this is supposedly not a problem). - if several bookmarks are on the same row, they will currently be garbled. It would be easy to make sure that only one is shown ; what would be more difficult would be to move the second bookmark lower. - it is possible to make sure that the markers are correctly centered in the margin, and that the margin size is large enough to hold the marker (I did not try all fonts). Fixes bug #2496.
99 lines
2.3 KiB
C++
99 lines
2.3 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 <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 BufferView;
|
|
class Paragraph;
|
|
|
|
/// 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 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;
|
|
///
|
|
Paragraph const & par() const { return *par_; }
|
|
|
|
/// 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
|