From 293767645f75c540a48e9498ec5dca6aabdd5455 Mon Sep 17 00:00:00 2001 From: Dekel Tsur Date: Thu, 24 Oct 2002 18:31:47 +0000 Subject: [PATCH] Fix LyXLength::inPixels git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5507 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/insets/insetminipage.C | 3 +-- src/insets/insettabular.C | 2 +- src/insets/insetwrap.C | 3 +-- src/lyxlength.C | 30 ++++++++++++++++++++---------- src/lyxlength.h | 2 +- src/text.C | 2 +- src/vspace.C | 2 +- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/insets/insetminipage.C b/src/insets/insetminipage.C index b0db87f00f..a4057dbfbd 100644 --- a/src/insets/insetminipage.C +++ b/src/insets/insetminipage.C @@ -351,6 +351,5 @@ int InsetMinipage::getMaxWidth(BufferView * bv, UpdatableInset const * inset) int InsetMinipage::latexTextWidth(BufferView * bv) const { - return width_.inPixels(InsetCollapsable::latexTextWidth(bv), - bv->text->defaultHeight()); + return width_.inPixels(InsetCollapsable::latexTextWidth(bv)); } diff --git a/src/insets/insettabular.C b/src/insets/insettabular.C index 388e506ab4..fb01fa3015 100644 --- a/src/insets/insettabular.C +++ b/src/insets/insettabular.C @@ -2243,7 +2243,7 @@ int InsetTabular::getMaxWidthOfCell(BufferView * bv, int cell) const if (len.zero()) return -1; - return len.inPixels(latexTextWidth(bv), bv->text->defaultHeight()); + return len.inPixels(latexTextWidth(bv)); } diff --git a/src/insets/insetwrap.C b/src/insets/insetwrap.C index 67d5639c7f..47c2f17255 100644 --- a/src/insets/insetwrap.C +++ b/src/insets/insetwrap.C @@ -205,8 +205,7 @@ int InsetWrap::getMaxWidth(BufferView * bv, UpdatableInset const * inset) int InsetWrap::latexTextWidth(BufferView * bv) const { - return width_.inPixels(InsetCollapsable::latexTextWidth(bv), - bv->text->defaultHeight()); + return width_.inPixels(InsetCollapsable::latexTextWidth(bv)); } diff --git a/src/lyxlength.C b/src/lyxlength.C index 77218b3e7b..40eb3b5d06 100644 --- a/src/lyxlength.C +++ b/src/lyxlength.C @@ -123,7 +123,7 @@ bool LyXLength::zero() const } -int LyXLength::inPixels(int default_width, int default_height) const +int LyXLength::inPixels(int text_width, int em_width_base) const { // Zoom factor specified by user in percent double const zoom = lyxrc.zoom / 100.0; // [percent] @@ -131,12 +131,18 @@ int LyXLength::inPixels(int default_width, int default_height) const // DPI setting for monitor: pixels/inch double const dpi = lyxrc.dpi; // screen resolution [pixels/inch] + double const em_width = (em_width_base > 0) + ? em_width_base + : 10*(dpi/72.27)*zoom; + // A different estimate for em_width is + // font_metrics::width('M', LyXFont(LyXFont::ALL_SANE)) + // but this estimate might not be more accurate as the screen font + // is different then the latex font. + // Pixel values are scaled so that the ratio // between lengths and font sizes on the screen // is the same as on paper. - // we don't care about sign of value, we - // display negative space with text too #ifdef WITH_WARNINGS #warning if you don't care than either call this function differently or let it return negative values and call abs() explicitly when needed (Andre') #endif @@ -191,26 +197,30 @@ int LyXLength::inPixels(int default_width, int default_height) const case LyXLength::EX: // Ex: The height of an "x" // 0.4305 is the ration between 1ex and 1em in cmr10 - result = zoom * val_ * default_height * 0.4305; + result = val_ * em_width * 0.4305; break; case LyXLength::EM: // Em: The width of an "m" - // 1em is approx 10points in cmr10 - result = zoom * val_ * default_height; + result = val_ * em_width; break; case LyXLength::MU: // math unit = 1/18em - result = val_ * default_height / 18; + result = val_ * em_width / 18; break; case LyXLength::PCW: // Always % of workarea case LyXLength::PTW: - case LyXLength::PPW: case LyXLength::PLW: - result = val_ * default_width / 100; + result = val_ * text_width / 100; + break; + case LyXLength::PPW: + // paperwidth/textwidth is 1.7 for A4 paper with default margins + result = val_ * text_width * 1.7 / 100; break; case LyXLength::PTH: + result = val_ * text_width * 1.787 / 100; + break; case LyXLength::PPH: - result = val_ * default_height / 100; + result = val_ * text_width * 2.2 / 100; break; case LyXLength::UNIT_NONE: result = 0; // this cannot happen diff --git a/src/lyxlength.h b/src/lyxlength.h index 93272d7429..565d820fd6 100644 --- a/src/lyxlength.h +++ b/src/lyxlength.h @@ -68,7 +68,7 @@ public: /// return string representation for LaTeX string const asLatexString() const; /// return the on-screen size of this length - int inPixels(int default_width, int default_height) const; + int inPixels(int text_width, int em_width = 0) const; /// return the on-screen size of this length of an image int inBP() const; diff --git a/src/text.C b/src/text.C index 6e802b8c01..03f7607331 100644 --- a/src/text.C +++ b/src/text.C @@ -847,7 +847,7 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const LyXLength const len = row->par()->params().leftIndent(); int const tw = inset_owner ? inset_owner->latexTextWidth(bview) : workWidth(bview); - x += len.inPixels(tw, bview->text->defaultHeight()); + x += len.inPixels(tw); } LyXAlignment align; // wrong type diff --git a/src/vspace.C b/src/vspace.C index 5966cb66af..c0628df06e 100644 --- a/src/vspace.C +++ b/src/vspace.C @@ -505,7 +505,7 @@ int VSpace::inPixels(BufferView const * bv) const break; case LENGTH: - retval = len_.len().inPixels(bv->workWidth(), default_height); + retval = len_.len().inPixels(bv->workWidth()); break; }