#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 <sstream>
#include <iomanip>
Length::Length(string const & data)
- : val_(0), unit_(Length::PT)
+ : val_(0), unit_(Length::UNIT_NONE)
{
Length tmp;
{
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();
}
case PPH:
os << formatFPNumber(val_ / 100.0) << "\\paperheight";
break;
+ case BLS:
+ os << formatFPNumber(val_ / 100.0) << "\\baselineskip";
+ break;
case UNIT_NONE:
break;
default:
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_) << '%';
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]
double const text_width_in = text_width / (zoom * dpi);
double const result = zoom * dpi * inInch(text_width_in, em_width_in);
- return static_cast<int>(result + ((result >= 0) ? 0.5 : -0.5));
+ return support::iround(result);
}
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;
}
-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
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<int>(result + 0.5);
+ double const result = 72.0 * inInch(text_width_in, em_width_in);
+ return support::iround(result);
}
GlueLength::GlueLength(string const & data)
{
- isValidGlueLength(data, this);
+ if (!isValidGlueLength(data, this))
+ LYXERR0("Invalid glue length " + data);
}