X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLength.h;h=8f192f85c6730d05a68a2102b20b06b8f06371fb;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=73515575223e84f58a69716a781ff2b12027dbf8;hpb=a5263e0f927034885870a65053ef3908d1c6f885;p=lyx.git diff --git a/src/Length.h b/src/Length.h index 7351557522..8f192f85c6 100644 --- a/src/Length.h +++ b/src/Length.h @@ -5,7 +5,7 @@ * Licence details can be found in the file COPYING. * * \author Matthias Ettrich - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes * \author John Levon * @@ -20,6 +20,8 @@ namespace lyx { +class MetricsBase; + // Solaris/x86 version 9 and earlier define these #undef PC #undef SP @@ -38,24 +40,25 @@ class Length { public: /// length units enum UNIT { - SP, ///< Scaled point (65536sp = 1pt) TeX's smallest unit. - PT, ///< Point = 1/72.27in = 0.351mm BP, ///< Big point (72bp = 1in), also PostScript point - DD, ///< Didot point = 1/72 of a French inch, = 0.376mm - MM, ///< Millimeter = 2.845pt - PC, ///< Pica = 12pt = 4.218mm CC, ///< Cicero = 12dd = 4.531mm CM, ///< Centimeter = 10mm = 2.371pc - IN, ///< Inch = 25.4mm = 72.27pt = 6.022pc - EX, ///< Height of a small "x" for the current font. + DD, ///< Didot point = 1/72 of a French inch, = 0.376mm EM, ///< Width of capital "M" in current font. + EX, ///< Height of a small "x" for the current font. + IN, ///< Inch = 25.4mm = 72.27pt = 6.022pc + MM, ///< Millimeter = 2.845pt MU, ///< Math unit (18mu = 1em) for positioning in math mode + PC, ///< Pica = 12pt = 4.218mm + PT, ///< Point = 1/72.27in = 0.351mm + SP, ///< Scaled point (65536sp = 1pt) TeX's smallest unit. PTW, //< Percent of TextWidth PCW, //< Percent of ColumnWidth PPW, //< Percent of PageWidth PLW, //< Percent of LineWidth - PTH, //< Percent of TextHeight // Herbert 2002-05-16 - PPH, //< Percent of PaperHeight // Herbert 2002-05-16 + PTH, //< Percent of TextHeight // Herbert 2002-05-16 + PPH, //< Percent of PaperHeight // Herbert 2002-05-16 + BLS, //< Percent of BaselineSkip // uwestoehr 2017-04-01 UNIT_NONE ///< no unit }; @@ -67,8 +70,6 @@ public: /// "data" must be a decimal number, followed by a unit explicit Length(std::string const & data); - /// - void swap(Length & rhs); /// double value() const; /// @@ -87,14 +88,34 @@ public: docstring const asDocstring() const; /// return string representation for LaTeX std::string const asLatexString() const; - /// return the on-screen size of this length + /// return string representation for HTML + std::string const asHTMLString() const; + /** return the on-screen size of this length. + * + * If the second argument is not provided, then the unit EM will + * only be approximated. It is better if possible to use + * FontMetrics::em() to get this value. + */ int inPixels(int text_width, int em_width = 0) const; - /// return the on-screen size of this length of an image + + /** return the on-screen size of this length + * + * This version of the function uses the current inset width as + * width and the EM value of the current font. + */ + int inPixels(MetricsBase const &) const; + /// return the value in Big Postscript points. + /// Caution: Inaccurate for em, ex, mu and percent units. int inBP() const; + /// return the default unit (centimeter or inch) + static UNIT defaultUnit(); + friend bool isValidLength(std::string const & data, Length * result); private: + /// Convert value to inch for text width and em width given in inch + double inInch(double text_width, double em_width) const; /// double val_; /// @@ -193,7 +214,6 @@ extern char const * const unit_name_gui[]; Length::UNIT unitFromString(std::string const & data); - } // namespace lyx #endif // LENGTH_H