2 * \file MetricsInfo.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "BufferView.h"
15 #include "MetricsInfo.h"
17 #include "insets/Inset.h"
19 #include "mathed/MathSupport.h"
21 #include "frontends/Painter.h"
23 #include "support/docstring.h"
24 #include "support/lassert.h"
31 /////////////////////////////////////////////////////////////////////////
35 /////////////////////////////////////////////////////////////////////////
37 MetricsBase::MetricsBase()
38 : bv(0), font(), style(LM_ST_TEXT
), fontname("mathnormal"),
43 MetricsBase::MetricsBase(BufferView
* b
, FontInfo
const & f
, int w
)
44 : bv(b
), font(f
), style(LM_ST_TEXT
), fontname("mathnormal"),
49 /////////////////////////////////////////////////////////////////////////
53 /////////////////////////////////////////////////////////////////////////
55 MetricsInfo::MetricsInfo(BufferView
* bv
, FontInfo
const & font
, int textwidth
,
56 MacroContext
const & mc
)
57 : base(bv
, font
, textwidth
), macrocontext(mc
)
61 /////////////////////////////////////////////////////////////////////////
65 /////////////////////////////////////////////////////////////////////////
67 PainterInfo::PainterInfo(BufferView
* bv
, lyx::frontend::Painter
& painter
)
68 : pain(painter
), ltr_pos(false), change_(), selected(false),
69 full_repaint(true), background_color(Color_background
)
75 void PainterInfo::draw(int x
, int y
, char_type c
)
77 pain
.text(x
, y
, c
, base
.font
);
81 void PainterInfo::draw(int x
, int y
, docstring
const & str
)
83 pain
.text(x
, y
, str
, base
.font
);
87 ColorCode
PainterInfo::backgroundColor(Inset
const * inset
, bool sel
) const
89 ColorCode
const color_bg
= inset
->backgroundColor();
92 // This inset is in a selection
93 return Color_selection
;
95 if (color_bg
!= Color_none
)
96 // This inset has its own color
99 if (background_color
== Color_none
)
100 // This inset has no own color and does not inherit a color
101 return Color_background
;
103 // This inset has no own color, but inherits a color
104 return background_color
;
110 /////////////////////////////////////////////////////////////////////////
114 /////////////////////////////////////////////////////////////////////////
116 Styles
smallerScriptStyle(Styles st
)
123 case LM_ST_SCRIPTSCRIPT
:
124 default: // shut up compiler
125 return LM_ST_SCRIPTSCRIPT
;
130 ScriptChanger::ScriptChanger(MetricsBase
& mb
)
131 : StyleChanger(mb
, smallerScriptStyle(mb
.style
))
135 /////////////////////////////////////////////////////////////////////////
139 /////////////////////////////////////////////////////////////////////////
141 Styles
smallerFracStyle(Styles st
)
149 case LM_ST_SCRIPTSCRIPT
:
150 default: // shut up compiler
151 return LM_ST_SCRIPTSCRIPT
;
156 FracChanger::FracChanger(MetricsBase
& mb
)
157 : StyleChanger(mb
, smallerFracStyle(mb
.style
))
161 /////////////////////////////////////////////////////////////////////////
165 /////////////////////////////////////////////////////////////////////////
167 ArrayChanger::ArrayChanger(MetricsBase
& mb
)
168 : StyleChanger(mb
, mb
.style
== LM_ST_DISPLAY
? LM_ST_TEXT
: mb
.style
)
172 /////////////////////////////////////////////////////////////////////////
176 /////////////////////////////////////////////////////////////////////////
178 ShapeChanger::ShapeChanger(FontInfo
& font
, FontShape shape
)
179 : Changer
<FontInfo
, FontShape
>(font
)
181 save_
= orig_
.shape();
182 orig_
.setShape(shape
);
186 ShapeChanger::~ShapeChanger()
188 orig_
.setShape(save_
);
192 /////////////////////////////////////////////////////////////////////////
196 /////////////////////////////////////////////////////////////////////////
198 StyleChanger::StyleChanger(MetricsBase
& mb
, Styles style
)
199 : Changer
<MetricsBase
>(mb
)
201 static const int diff
[4][4] =
207 int t
= diff
[mb
.style
][style
];
218 StyleChanger::~StyleChanger()
224 /////////////////////////////////////////////////////////////////////////
228 /////////////////////////////////////////////////////////////////////////
230 FontSetChanger::FontSetChanger(MetricsBase
& mb
, char const * name
)
231 : Changer
<MetricsBase
>(mb
)
234 FontSize oldsize
= save_
.font
.size();
237 augmentFont(mb
.font
, from_ascii(name
));
238 mb
.font
.setSize(oldsize
);
242 FontSetChanger::FontSetChanger(MetricsBase
& mb
, docstring
const & name
)
243 : Changer
<MetricsBase
>(mb
)
246 FontSize oldsize
= save_
.font
.size();
247 mb
.fontname
= to_utf8(name
);
249 augmentFont(mb
.font
, name
);
250 mb
.font
.setSize(oldsize
);
254 FontSetChanger::~FontSetChanger()
260 /////////////////////////////////////////////////////////////////////////
264 /////////////////////////////////////////////////////////////////////////
266 WidthChanger::WidthChanger(MetricsBase
& mb
, int w
)
267 : Changer
<MetricsBase
>(mb
)
274 WidthChanger::~WidthChanger()
280 /////////////////////////////////////////////////////////////////////////
284 /////////////////////////////////////////////////////////////////////////
286 ColorChanger::ColorChanger(FontInfo
& font
, string
const & color
)
287 : Changer
<FontInfo
, string
>(font
)
289 save_
= lcolor
.getFromLyXName(color
);
290 font
.setColor(lcolor
.getFromLyXName(color
));
294 ColorChanger::~ColorChanger()
296 orig_
.setColor(lcolor
.getFromLyXName(save_
));