From 42c8e7bff9b0924f04853acf3ac4922ce453d9b3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Wed, 12 Sep 2001 15:56:09 +0000 Subject: [PATCH] don't draw \vec, \hat etc much wider than LaTeX does git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2746 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/mathed/math_decorationinset.C | 19 +++++- src/mathed/math_decorationinset.h | 2 + src/mathed/support.C | 103 +++++++++++++----------------- src/mathed/support.h | 4 +- 4 files changed, 67 insertions(+), 61 deletions(-) diff --git a/src/mathed/math_decorationinset.C b/src/mathed/math_decorationinset.C index 0213ad027f..2cd1af5a9e 100644 --- a/src/mathed/math_decorationinset.C +++ b/src/mathed/math_decorationinset.C @@ -48,6 +48,18 @@ bool MathDecorationInset::protect() const } +bool MathDecorationInset::wide() const +{ + return + name_ == "overbrace" || + name_ == "underbrace" || + name_ == "overleftarrow" || + name_ == "overrightarrow" || + name_ == "widehat" || + name_ == "widetilde"; +} + + void MathDecorationInset::metrics(MathStyles st) const { xcell(0).metrics(st); @@ -73,7 +85,12 @@ void MathDecorationInset::draw(Painter & pain, int x, int y) const xo(x); yo(x); xcell(0).draw(pain, x, y); - mathed_draw_deco(pain, x, y + dy_, width_, dh_, name_); + if (wide()) + mathed_draw_deco(pain, x, y + dy_, width_, dh_, name_); + else { + int w = 2 + mathed_char_width(LM_TC_VAR, size(), 'x'); + mathed_draw_deco(pain, x + (width_ - w) / 2, y + dy_, w, dh_, name_); + } } diff --git a/src/mathed/math_decorationinset.h b/src/mathed/math_decorationinset.h index 97b5b26681..200b8ea998 100644 --- a/src/mathed/math_decorationinset.h +++ b/src/mathed/math_decorationinset.h @@ -35,6 +35,8 @@ private: bool upper() const; /// bool protect() const; + /// is it a wide decoration? + bool wide() const; /// string const name_; diff --git a/src/mathed/support.C b/src/mathed/support.C index e568e925ca..3734269e60 100644 --- a/src/mathed/support.C +++ b/src/mathed/support.C @@ -26,15 +26,15 @@ bool isBinaryOp(char c, MathTextCodes type) class Matrix { public: /// - typedef float matriz_data[2][2]; + typedef double matriz_data[2][2]; /// Matrix(); /// void rotate(int); /// - void escalate(float, float); + void escalate(double, double); /// - void transform(float, float, float &, float &); + void transform(double, double, double &, double &); private: /// matriz_data m_; @@ -57,8 +57,8 @@ void Matrix::rotate(int code) r[0][1] = 0; r[1][0] = 0; r[1][1] = 1; - float const cs = (code & 1) ? 0 : (1 - code); - float const sn = (code & 1) ? (2 - code) : 0; + double const cs = (code & 1) ? 0 : (1 - code); + double const sn = (code & 1) ? (2 - code) : 0; r[0][0] = cs; r[0][1] = sn; r[1][0] = -r[0][1]; @@ -66,7 +66,7 @@ void Matrix::rotate(int code) multiply(r); } -void Matrix::escalate(float x, float y) +void Matrix::escalate(double x, double y) { matriz_data s; s[0][0] = x; @@ -89,7 +89,7 @@ void Matrix::multiply(matriz_data & a) m_[1][1] = c[1][1]; } -void Matrix::transform(float xp, float yp, float & x, float & y) +void Matrix::transform(double xp, double yp, double & x, double & y) { x = m_[0][0] * xp + m_[0][1] * yp; y = m_[1][0] * xp + m_[1][1] * yp; @@ -291,7 +291,7 @@ namespace { */ -float const parenthHigh[] = { +double const parenthHigh[] = { 2.0, 13.0, 0.9840, 0.0014, 0.7143, 0.0323, 0.4603, 0.0772, 0.2540, 0.1278, 0.1746, 0.1966, 0.0952, 0.3300, @@ -302,7 +302,7 @@ float const parenthHigh[] = { }; -float const parenth[] = { +double const parenth[] = { 2.0, 13.0, 0.9930, 0.0071, 0.7324, 0.0578, 0.5141, 0.1126, 0.3380, 0.1714, 0.2183, 0.2333, 0.0634, 0.3621, @@ -313,7 +313,7 @@ float const parenth[] = { }; -float const brace[] = { +double const brace[] = { 2.0, 21.0, 0.9492, 0.0020, 0.9379, 0.0020, 0.7458, 0.0243, 0.5819, 0.0527, 0.4859, 0.0892, 0.4463, 0.1278, @@ -327,7 +327,7 @@ float const brace[] = { // Is this correct? (Lgb) -float const arrow[] = { +double const arrow[] = { 4, 7, 0.0150, 0.7500, 0.2000, 0.6000, 0.3500, 0.3500, 0.5000, 0.0500, 0.6500, 0.3500, 0.8000, 0.6000, @@ -338,7 +338,7 @@ float const arrow[] = { // Is this correct? (Lgb) -float const Arrow[] = { +double const Arrow[] = { 4, 7, 0.0150, 0.7500, 0.2000, 0.6000, 0.3500, 0.3500, 0.5000, 0.0500, 0.6500, 0.3500, 0.8000, 0.6000, @@ -349,7 +349,7 @@ float const Arrow[] = { }; -float const udarrow[] = { +double const udarrow[] = { 2, 3, 0.015, 0.25, 0.5, 0.05, 0.95, 0.25, 2, 3, @@ -359,7 +359,7 @@ float const udarrow[] = { }; -float const Udarrow[] = { +double const Udarrow[] = { 2, 3, 0.015, 0.25, 0.5, 0.05, 0.95, 0.25, 2, 3, @@ -370,47 +370,47 @@ float const Udarrow[] = { }; -float const brack[] = { +double const brack[] = { 2.0, 4, 0.95, 0.05, 0.05, 0.05, 0.05, 0.95, 0.95, 0.95, 0.0 }; -float const corner[] = { +double const corner[] = { 2.0, 3, 0.95, 0.05, 0.05, 0.05, 0.05, 0.95, 0.0 }; -float const angle[] = { +double const angle[] = { 2.0, 3, 1, 0, 0.05, 0.5, 1, 1, 0.0 }; -float const slash[] = { +double const slash[] = { 1, 0.95, 0.05, 0.05, 0.95, 0.0 }; -float const hline[] = { +double const hline[] = { 1, 0.05, 0.5, 0.95, 0.5, 0.0 }; -float const hline2[] = { +double const hline2[] = { 1, 0.1, 0.5, 0.3, 0.5, 1, 0.7, 0.5, 0.9, 0.5, 0.0 }; -float const hline3[] = { +double const hline3[] = { 1, 0.1, 0, 0.15, 0, 1, 0.475, 0, 0.525, 0, 1, 0.85, 0, 0.9, 0, @@ -418,7 +418,7 @@ float const hline3[] = { }; -float const dline3[] = { +double const dline3[] = { 1, 0.1, 0.1, 0.15, 0.15, 1, 0.475, 0.475, 0.525, 0.525, 1, 0.85, 0.85, 0.9, 0.9, @@ -426,26 +426,26 @@ float const dline3[] = { }; -float const hlinesmall[] = { +double const hlinesmall[] = { 1, 0.4, 0.5, 0.6, 0.5, 0.0 }; -float const vert[] = { +double const vert[] = { 1, 0.5, 0.05, 0.5, 0.95, 0.0 }; -float const Vert[] = { +double const Vert[] = { 1, 0.3, 0.05, 0.3, 0.95, 1, 0.7, 0.05, 0.7, 0.95, 0.0 }; -float const tilde[] = { +double const tilde[] = { 2.0, 4, 0.05, 0.8, 0.25, 0.2, 0.75, 0.8, 0.95, 0.2, 0.0 @@ -453,13 +453,13 @@ float const tilde[] = { struct deco_struct { - float const * data; + double const * data; int angle; }; struct named_deco_struct { char const * name; - float const * data; + double const * data; int angle; }; @@ -632,10 +632,6 @@ int mathed_string_width(MathTextCodes type, MathStyles size, string const & s) void mathed_draw_deco(Painter & pain, int x, int y, int w, int h, const string & name) { - Matrix mt; - Matrix sqmt; - int i = 0; - if (name == ".") { pain.line(x + w/2, y, x + w/2, y + h, LColor::mathcursor, Painter::line_onoffdash); @@ -650,11 +646,14 @@ void mathed_draw_deco(Painter & pain, int x, int y, int w, int h, } int const r = mds->angle; - float const * d = mds->data; + double const * d = mds->data; if (h > 70 && (name == "(" || name == ")")) d = parenthHigh; + Matrix mt; + Matrix sqmt; + mt.rotate(r); mt.escalate(w, h); @@ -669,39 +668,28 @@ void mathed_draw_deco(Painter & pain, int x, int y, int w, int h, if (r >= 2) x += w; - int code; - do { - float xx; - float yy; - float x2; - float y2; - - code = int(d[i++]); - switch (code) { - case 0: break; - case 1: - case 3: - { - xx = d[i++]; yy = d[i++]; - x2 = d[i++]; y2 = d[i++]; + for (int i = 0; d[i]; ) { + int code = int(d[i++]); + if (code & 1) { // code == 1 || code == 3 + double xx = d[i++]; + double yy = d[i++]; + double x2 = d[i++]; + double y2 = d[i++]; if (code == 3) sqmt.transform(xx, yy, xx, yy); else mt.transform(xx, yy, xx, yy); mt.transform(x2, y2, x2, y2); pain.line(x + int(xx), y + int(yy), - x + int(x2), y + int(y2), - LColor::mathline); - break; - } - case 2: - case 4: - { + x + int(x2), y + int(y2), + LColor::mathline); + } else { int xp[32]; int yp[32]; int const n = int(d[i++]); for (int j = 0; j < n; ++j) { - xx = d[i++]; yy = d[i++]; + double xx = d[i++]; + double yy = d[i++]; // lyxerr << " " << xx << " " << yy << " "; if (code == 4) sqmt.transform(xx, yy, xx, yy); @@ -713,8 +701,7 @@ void mathed_draw_deco(Painter & pain, int x, int y, int w, int h, } pain.lines(xp, yp, n, LColor::mathline); } - } - } while (code); + } } diff --git a/src/mathed/support.h b/src/mathed/support.h index e6b90a2762..3352ec379f 100644 --- a/src/mathed/support.h +++ b/src/mathed/support.h @@ -19,8 +19,8 @@ int mathed_char_width(MathTextCodes type, MathStyles size, unsigned char c); int mathed_char_ascent(MathTextCodes type, MathStyles size, unsigned char c); int mathed_char_descent(MathTextCodes type, MathStyles size, unsigned char c); -void mathed_draw_deco - (Painter & pain, int x, int y, int w, int h, string const & name); +void mathed_draw_deco(Painter & pain, int x, int y, int w, int h, + string const & name); void mathed_string_dim(MathTextCodes type, MathStyles size, string const & s, int & asc, int & des, int & wid); -- 2.39.2