]> git.lyx.org Git - lyx.git/blob - src/FontIterator.h
* BufferView::updateMetrics(): split up the method in two for the SinglePar case.
[lyx.git] / src / FontIterator.h
1 // -*- C++ -*-
2 /**
3  * \file src/FontIterator.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Alfredo Braunstein
8  *
9  * Full author contact details are available in file CREDITS.
10  *
11  *
12  * Calling Text::getFont is slow. While rebreaking we scan a
13  * paragraph from left to right calling getFont for every char.  This
14  * simple class address this problem by hidding an optimization trick
15  * (not mine btw -AB): the font is reused in the whole font span.  The
16  * class handles transparently the "hidden" (not part of the fontlist)
17  * label font (as getFont does).
18  */
19
20 #ifndef FONTITERATOR_H
21 #define FONTITERATOR_H
22
23 #include "Font.h"
24
25 #include "support/types.h"
26
27
28 namespace lyx {
29
30 class Paragraph;
31 class TextMetrics;
32
33
34 class FontIterator : std::iterator<std::forward_iterator_tag, Font>
35 {
36 public:
37         ///
38         FontIterator(TextMetrics const & tm,
39                 Paragraph const & par, pit_type pit, pos_type pos);
40         ///
41         Font const & operator*() const;
42         ///
43         FontIterator & operator++();
44         ///
45         Font * operator->();
46
47 private:
48         ///
49         TextMetrics const & tm_;
50         ///
51         Paragraph const & par_;
52         ///
53         pit_type pit_;
54         ///
55         pos_type pos_;
56         ///
57         Font font_;
58         ///
59         pos_type endspan_;
60         ///
61         pos_type bodypos_;
62 };
63
64
65 } // namespace lyx
66
67 #endif // FONTITERATOR_H