X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLength.cpp;h=a4d77f34ed041cbb049a20c858e2cddde8c94f25;hb=29d80772fc832a914c73b4de3010b7f4c108a5e3;hp=35f6b0cb424060116e30511e127867e173227641;hpb=ccbac353eaea45f8480523caba9c0697cb3eacb2;p=lyx.git diff --git a/src/Length.cpp b/src/Length.cpp index 35f6b0cb42..a4d77f34ed 100644 --- a/src/Length.cpp +++ b/src/Length.cpp @@ -17,12 +17,11 @@ #include "Length.h" #include "LyXRC.h" -#include "MetricsInfo.h" - -#include "frontends/FontMetrics.h" +#include "support/debug.h" #include "support/docstream.h" #include "support/lstrings.h" +#include "support/lyxlib.h" #include #include @@ -50,7 +49,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; @@ -75,7 +74,8 @@ docstring const Length::asDocstring() const { odocstringstream os; if (unit_ != UNIT_NONE) - os << formatFPNumber(val_) << unit_name[unit_]; // setw? + os << from_ascii(formatFPNumber(val_)) + << from_ascii(unit_name[unit_]); // setw? return os.str(); } @@ -104,6 +104,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: @@ -144,6 +147,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_) << '%'; @@ -195,7 +199,7 @@ bool Length::empty() const int Length::inPixels(int text_width, int em_width_base) const { // Zoom factor specified by user in percent - double const zoom = lyxrc.zoom / 100.0; // [percent] + double const zoom = lyxrc.currentZoom / 100.0; // [percent] // DPI setting for monitor: pixels/inch double const dpi = lyxrc.dpi; // screen resolution [pixels/inch] @@ -214,7 +218,7 @@ int Length::inPixels(int text_width, int em_width_base) const double const text_width_in = text_width / (zoom * dpi); double const result = zoom * dpi * inInch(text_width_in, em_width_in); - return static_cast(result + ((result >= 0) ? 0.5 : -0.5)); + return support::iround(result); } @@ -288,6 +292,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; @@ -296,12 +306,6 @@ 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()); -} - - int Length::inBP() const { // return any Length value as a one with @@ -310,7 +314,7 @@ int Length::inBP() const double const text_width_in = 210.0 / 2.54; // assume A4 double const em_width_in = 10.0 / 72.27; double result = 72.0 * inInch(text_width_in, em_width_in); - return static_cast(result + 0.5); + return support::iround(result); } @@ -353,7 +357,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); }