X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLength.cpp;h=bc8fb7ea550b0453d630cdafa26361ebfc5ccd73;hb=c1ee1bc0baf00a64734ec5eb345884c057e4d9c1;hp=d862f40213d3a4bdea1e834bc0f3cf586d1b1616;hpb=c0ce79452f0d286255bcbdf04b8d601a9a734e8d;p=lyx.git diff --git a/src/Length.cpp b/src/Length.cpp index d862f40213..bc8fb7ea55 100644 --- a/src/Length.cpp +++ b/src/Length.cpp @@ -21,6 +21,7 @@ #include "frontends/FontMetrics.h" +#include "support/debug.h" #include "support/docstream.h" #include "support/lstrings.h" #include "support/lyxlib.h" @@ -51,7 +52,7 @@ Length::Length(double v, Length::UNIT u) Length::Length(string const & data) - : val_(0), unit_(Length::PT) + : val_(0), unit_(Length::UNIT_NONE) { Length tmp; @@ -106,6 +107,9 @@ string const Length::asLatexString() const case PPH: os << formatFPNumber(val_ / 100.0) << "\\paperheight"; break; + case BLS: + os << formatFPNumber(val_ / 100.0) << "\\baselineskip"; + break; case UNIT_NONE: break; default: @@ -146,6 +150,7 @@ string const Length::asHTMLString() const case PCW: case PTH: case PPH: + case BLS: // what it's a percentage of probably won't make sense for HTML, // so we'll assume people have chosen these appropriately os << formatFPNumber(val_) << '%'; @@ -290,6 +295,12 @@ double Length::inInch(double text_width, double em_width) const case Length::PPH: result = val_ * text_width * 2.2 / 100; break; + case Length::BLS: + // baselineskip is approximately 1.2 times the font size for the cmr fonts + // The value actually depends on the current paragraph (see TextMetrics::setRowHeight), + // but we do not have this information here. + result = val_ * em_width * 1.2 / 100; + break; case Length::UNIT_NONE: result = 0; // this cannot happen break; @@ -300,7 +311,14 @@ double Length::inInch(double text_width, double em_width) const int Length::inPixels(MetricsBase const & base) const { - return inPixels(base.textwidth, theFontMetrics(base.font).em()); + FontInfo fi = base.font; + if (unit_ == Length::MU) + // mu is 1/18th of an em in the math symbol font + fi.setFamily(SYMBOL_FAMILY); + else + // Math style is only taken into account in the case of mu + fi.setStyle(LM_ST_TEXT); + return inPixels(base.textwidth, theFontMetrics(fi).em()); } @@ -355,7 +373,8 @@ GlueLength::GlueLength(Length const & len, Length const & plus, GlueLength::GlueLength(string const & data) { - isValidGlueLength(data, this); + if (!isValidGlueLength(data, this)) + LYXERR0("Invalid glue length " + data); }