lyx_mirror/src/mathed/InsetMathKern.cpp
Jean-Marc Lasgouttes 66fa801e74 Improve support for on screen length calculation
The computation of length on screen depend in particular of the computation of the size of an em. Many places of the code used to rely on the width of the M character, which is not really correct:
http://en.wikipedia.org/wiki/Em_%28typography%29

In digital typography, the best value to use is the point size of the font.

* Implement FontMetrics::em(), which returns the value in pixels of the EM unit.
 Convert code to use it.

* Introduce Length::inPixel(MetricsBase const &), which takes the textwidth and em information from the MetricsBase object. Convert code to use it.

* Fix several places where Length::inPixel is used without a proper em value.

* add mathed_font_em() helper function. It should eventually be removed like some other functions in MathSupport.

* Add dummy implementation of FontMetrics to tex2lyx for linking purposes.
2015-03-26 17:10:15 +01:00

77 lines
1.2 KiB
C++

/**
* \file InsetMathKern.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
#include "InsetMathKern.h"
#include "MathStream.h"
#include "MathStream.h"
#include "MathSupport.h"
#include "Dimension.h"
#include "support/docstring.h"
namespace lyx {
InsetMathKern::InsetMathKern()
{
}
InsetMathKern::InsetMathKern(Length const & w)
: wid_(w)
{
}
InsetMathKern::InsetMathKern(docstring const & s)
: wid_(to_utf8(s))
{
}
Inset * InsetMathKern::clone() const
{
return new InsetMathKern(*this);
}
void InsetMathKern::metrics(MetricsInfo & mi, Dimension & dim) const
{
dim.asc = 0;
dim.des = 0;
dim.wid = wid_.inPixels(mi.base);
}
void InsetMathKern::draw(PainterInfo &, int, int) const
{}
void InsetMathKern::write(WriteStream & os) const
{
if (wid_.empty())
os << "\\kern" << ' ';
else
os << "\\kern" << from_utf8(wid_.asLatexString()) << ' ';
}
void InsetMathKern::normalize(NormalStream & os) const
{
if (wid_.empty())
os << "[kern]";
else
os << "[kern " << from_utf8(wid_.asLatexString()) << ']';
}
} // namespace lyx