]> git.lyx.org Git - features.git/blob - src/MetricsInfo.h
Correct computation of math font size
[features.git] / src / MetricsInfo.h
1 // -*- C++ -*-
2 /**
3  * \file MetricsInfo.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author André Pönitz
8  * \author Stefan Schimanski
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12
13 #ifndef METRICSINFO_H
14 #define METRICSINFO_H
15
16 #include "Changes.h"
17 #include "ColorCode.h"
18 #include "FontInfo.h"
19
20 #include "support/strfwd.h"
21 #include "support/Changer.h"
22
23
24 #include <string>
25
26
27 namespace lyx {
28
29 namespace frontend { class Painter; }
30 class BufferView;
31 class Inset;
32 class MacroContext;
33
34
35 //
36 // This is the part common to MetricsInfo and PainterInfo
37 //
38 class MetricsBase {
39 public:
40         ///
41         MetricsBase(BufferView * bv = 0, FontInfo font = FontInfo(),
42                     int textwidth = 0);
43
44         /// the current view
45         BufferView * bv;
46         /// current font
47         FontInfo font;
48         /// name of current font - mathed specific
49         std::string fontname;
50         /// This is the width available in pixels
51         int textwidth;
52         /// count wether the current mathdata is nested in macro(s)
53         int macro_nesting;
54
55         /// Temporarily change a full font.
56         Changer changeFontSet(std::string const & font, bool cond = true);
57         // Temporarily change to the style suitable for use in fractions
58         Changer changeFrac(bool cond = true);
59         // Temporarily change the style to (script)script style
60         Changer changeScript(bool cond = true);
61         ///
62         int solidLineThickness() const { return solid_line_thickness_; }
63         ///
64         int solidLineOffset() const { return solid_line_offset_; }
65         ///
66         int dottedLineThickness() const { return dotted_line_thickness_; }
67 private:
68         int solid_line_thickness_;
69         int solid_line_offset_;
70         int dotted_line_thickness_;
71 };
72
73
74 //
75 // This contains a MetricsBase and information that's only relevant during
76 // the first phase of the two-phase draw
77 //
78 class MetricsInfo {
79 public:
80         ///
81         MetricsInfo();
82         ///
83         MetricsInfo(BufferView * bv, FontInfo font, int textwidth,
84                     MacroContext const & mc);
85
86         ///
87         MetricsBase base;
88         /// The context to resolve macros
89         MacroContext const & macrocontext;
90 };
91
92
93 //
94 // This contains a MetricsBase and information that's only relevant during
95 // the second phase of the two-phase draw
96 //
97 class PainterInfo {
98 public:
99         ///
100         PainterInfo(BufferView * bv, frontend::Painter & pain);
101         ///
102         void draw(int x, int y, char_type c);
103         ///
104         void draw(int x, int y, docstring const & str);
105         /// Determines the background color for the specified inset based on the
106         /// selection state, the background color inherited from the parent inset 
107         /// and the inset's own background color.
108         /// \param sel whether to take the selection state into account
109         ColorCode backgroundColor(Inset const * inset, bool sel = true) const;
110
111         /// Determines the text color based on the intended color, the
112         /// change tracking state and the selection state. 
113         /// \param color what the color should be by default
114         Color textColor(Color const & color) const;
115
116         ///
117         MetricsBase base;
118         ///
119         frontend::Painter & pain;
120         /// Whether the text at this point is right-to-left (for InsetNewline)
121         bool ltr_pos;
122         /// The change the parent is part of (change tracking)
123         Change change_;
124         /// Whether the parent is selected as a whole
125         bool selected;
126         /// Whether the spell checker is enabled for the parent
127         bool do_spellcheck;
128         ///
129         bool full_repaint;
130         /// Current background color
131         ColorCode background_color;
132 };
133
134 class TextMetricsInfo {};
135
136 } // namespace lyx
137
138 #endif