#include "Length.h"
#include "LyXRC.h"
+#include "MetricsInfo.h"
+
+#include "frontends/FontMetrics.h"
#include "support/docstream.h"
}
-void Length::swap(Length & rhs)
-{
- std::swap(val_, rhs.val_);
- std::swap(unit_, rhs.unit_);
-}
-
-
string const Length::asString() const
{
ostringstream os;
- os << val_ << unit_name[unit_]; // setw?
+ if (unit_ != UNIT_NONE)
+ os << val_ << unit_name[unit_]; // setw?
return os.str();
}
docstring const Length::asDocstring() const
{
odocstringstream os;
- os << val_ << unit_name[unit_]; // setw?
+ if (unit_ != UNIT_NONE)
+ os << val_ << unit_name[unit_]; // setw?
return os.str();
}
case PLW:
os << val_ / 100.0 << "\\linewidth";
break;
+ case PTH:
+ os << val_ / 100.0 << "\\textheight";
+ break;
case PPH:
os << val_ / 100.0 << "\\paperheight";
break;
- case PTH:
- os << val_ / 100.0 << "\\textheight";
+ case UNIT_NONE:
break;
default:
os << val_ << unit_name[unit_];
? em_width_base
: 10*(dpi/72.27)*zoom;
// A different estimate for em_width is
- // theFontMetrics(FontInfo(sane_font)).width('M')
+ // theFontMetrics(FontInfo(sane_font)).em()
// but this estimate might not be more accurate as the screen font
// is different then the latex font.
}
+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
Length::UNIT Length::defaultUnit()
{
- // FIXME user a proper pref, since we should get rid of
- // default_papersize in lyxrc.
- UNIT u = Length::CM;
- switch (lyxrc.default_papersize) {
- case PAPER_USLETTER:
- case PAPER_USLEGAL:
- case PAPER_USEXECUTIVE:
- u = Length::IN;
- break;
- default:
- break;
- }
-
- return u;
+ return lyxrc.default_length_unit;
}
string const GlueLength::asString() const
{
+ if (len_.empty())
+ return string();
+
ostringstream buffer;
buffer << len_.value();
string const GlueLength::asLatexString() const
{
ostringstream buffer;
-
- buffer << len_.value() << unit_name[len_.unit()];
-
+ // use Length::asLatexString() to handle also the percent lengths
+ buffer << len_.Length::asLatexString();
if (!plus_.zero())
- buffer << " plus " << plus_.value() << unit_name[plus_.unit()];
+ buffer << " plus " << plus_.Length::asLatexString();
if (!minus_.zero())
- buffer << " minus " << minus_.value() << unit_name[minus_.unit()];
+ buffer << " minus " << minus_.Length::asLatexString();
return buffer.str();
}