X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2Finsetlatexaccent.C;h=94c1e2b19c0757d3e573aefdb98a01c2f925b77e;hb=e28331ed63062dea10d0a21b9ec12034b4b17b9a;hp=9f9d03c92f9ccadcca5b901f944a080fe5d9a3d6;hpb=c46b7d89553209b8df4e9de392ee07ef711f092f;p=lyx.git diff --git a/src/insets/insetlatexaccent.C b/src/insets/insetlatexaccent.C index 9f9d03c92f..94c1e2b19c 100644 --- a/src/insets/insetlatexaccent.C +++ b/src/insets/insetlatexaccent.C @@ -19,15 +19,16 @@ #include "lyxrc.h" #include "metricsinfo.h" -#include "frontends/font_metrics.h" +#include "frontends/FontMetrics.h" #include "frontends/Painter.h" #include "support/lstrings.h" -using lyx::char_type; -using lyx::docstring; -using lyx::support::contains; -using lyx::support::trim; + +namespace lyx { + +using support::contains; +using support::trim; using std::endl; using std::string; @@ -241,48 +242,40 @@ void InsetLatexAccent::checkContents() } -void InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const +bool InsetLatexAccent::metrics(MetricsInfo & mi, Dimension & dim) const { LyXFont & font = mi.base.font; + frontend::FontMetrics const & fm = theFontMetrics(font); + // This function is a bit too simplistic and is just a // "try to make a fit for all accents" approach, to // make it better we need to know what kind of accent is // used and add to max based on that. if (candisp) { if (ic == ' ') - dim.asc = font_metrics::ascent('a', font); + dim.asc = fm.ascent('a'); else - dim.asc = font_metrics::ascent(ic, font); + dim.asc = fm.ascent(ic); if (plusasc) - dim.asc += (font_metrics::maxAscent(font) + 3) / 3; + dim.asc += (fm.maxAscent() + 3) / 3; if (ic == ' ') - dim.des = font_metrics::descent('a', font); + dim.des = fm.descent('a'); else - dim.des = font_metrics::descent(ic, font); + dim.des = fm.descent(ic); if (plusdesc) dim.des += 3; - dim.wid = font_metrics::width(ic, font); + dim.wid = fm.width(ic); } else { - dim.asc = font_metrics::maxAscent(font) + 4; - dim.des = font_metrics::maxDescent(font) + 4; + dim.asc = fm.maxAscent() + 4; + dim.des = fm.maxDescent() + 4; docstring dcon(contents.begin(), contents.end()); - dim.wid = font_metrics::width(dcon, font) + 4; + dim.wid = fm.width(dcon) + 4; } + bool const changed = dim_ != dim; dim_ = dim; -} - - -int InsetLatexAccent::lbearing(LyXFont const & font) const -{ - return font_metrics::lbearing(ic, font); -} - - -int InsetLatexAccent::rbearing(LyXFont const & font) const -{ - return font_metrics::rbearing(ic, font); + return changed; } @@ -338,10 +331,12 @@ void InsetLatexAccent::drawAccent(PainterInfo const & pi, int x, int y, char_type accent) const { LyXFont const & font = pi.base.font; - x -= font_metrics::center(accent, font); - y -= font_metrics::ascent(ic, font); - y -= font_metrics::descent(accent, font); - y -= font_metrics::height(accent, font) / 2; + frontend::FontMetrics const & fm = theFontMetrics(font); + + x -= fm.center(accent); + y -= fm.ascent(ic); + y -= fm.descent(accent); + y -= fm.height(accent) / 2; pi.pain.text(x, y, accent, font); } @@ -360,13 +355,15 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const if (lyxrc.font_norm_type == LyXRC::ISO_10646_1) font.setLanguage(english_language); + frontend::FontMetrics const & fm = theFontMetrics(font); + if (candisp) { - int x2 = int(x + (rbearing(font) - lbearing(font)) / 2); + int x2 = int(x + (fm.rbearing(ic) - fm.lbearing(ic)) / 2); int hg; int y; if (plusasc) { // mark at the top - hg = font_metrics::maxDescent(font); + hg = fm.maxDescent(); y = baseline - dim_.asc; if (font.shape() == LyXFont::ITALIC_SHAPE) x2 += int(0.8 * hg); // italic @@ -383,15 +380,15 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const pi.pain.text(x, baseline, ic, font); if (remdot) { - int tmpvar = baseline - font_metrics::ascent('i', font); + int tmpvar = baseline - fm.ascent('i'); int tmpx = 0; if (font.shape() == LyXFont::ITALIC_SHAPE) tmpx += int(0.8 * hg); // italic lyxerr[Debug::KEY] << "Removing dot." << endl; // remove the dot first pi.pain.fillRectangle(x + tmpx, tmpvar, dim_.wid, - font_metrics::ascent('i', pi.base.font) - - font_metrics::ascent('x', pi.base.font) - 1, + fm.ascent('i') - + fm.ascent('x') - 1, backgroundColor()); // the five lines below is a simple hack to // make the display of accent 'i' and 'j' @@ -430,21 +427,21 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const case UNDERBAR: { char_type const underbar = 0x5F; //('\x5F'); - pi.pain.text(x2 - font_metrics::center(underbar, font), + pi.pain.text(x2 - fm.center(underbar), baseline, underbar, font); break; } case CEDILLA: { char_type const cedilla = 0xB8; //('\xB8'); - pi.pain.text(x2 - font_metrics::center(cedilla, font), + pi.pain.text(x2 - fm.center(cedilla), baseline, cedilla, font); break; } case UNDERDOT: - pi.pain.text(x2 - font_metrics::center('.', font), - int(baseline + 1.5 * font_metrics::height('.', font)), + pi.pain.text(x2 - fm.center('.'), + int(baseline + 1.5 * fm.height('.')), '.', font); break; @@ -496,8 +493,7 @@ void InsetLatexAccent::draw(PainterInfo & pi, int x, int baseline) const } case HUNGARIAN_UMLAUT: - drawAccent(pi, x2 - font_metrics::center('´', font), baseline, '´'); - drawAccent(pi, x2 + font_metrics::center('´', font), baseline, '´'); + drawAccent(pi, x2, baseline, 0x02DD); break; case UMLAUT: @@ -577,39 +573,32 @@ void InsetLatexAccent::read(Buffer const &, LyXLex & lex) } -int InsetLatexAccent::latex(Buffer const &, ostream & os, +int InsetLatexAccent::latex(Buffer const &, odocstream & os, OutputParams const &) const { - os << contents; + os << from_ascii(contents); return 0; } -int InsetLatexAccent::plaintext(Buffer const &, ostream & os, +int InsetLatexAccent::plaintext(Buffer const &, odocstream & os, OutputParams const &) const { - os << contents; - return 0; -} - - -int InsetLatexAccent::linuxdoc(Buffer const &, ostream & os, - OutputParams const &) const -{ - os << contents; + os << from_ascii(contents); return 0; } -int InsetLatexAccent::docbook(Buffer const &, ostream & os, +int InsetLatexAccent::docbook(Buffer const &, odocstream & os, OutputParams const &) const { - os << contents; + // FIXME UNICODE + os << from_ascii(contents); return 0; } -int InsetLatexAccent::textString(Buffer const & buf, ostream & os, +int InsetLatexAccent::textString(Buffer const & buf, odocstream & os, OutputParams const & op) const { return plaintext(buf, os, op); @@ -632,3 +621,6 @@ ostream & operator<<(ostream & o, InsetLatexAccent::ACCENT_TYPES at) { return o << int(at); } + + +} // namespace lyx