Fix LyXLength::inPixels

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@5507 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Dekel Tsur 2002-10-24 18:31:47 +00:00
parent 8f0bec8628
commit 293767645f
7 changed files with 26 additions and 18 deletions

View File

@ -351,6 +351,5 @@ int InsetMinipage::getMaxWidth(BufferView * bv, UpdatableInset const * inset)
int InsetMinipage::latexTextWidth(BufferView * bv) const int InsetMinipage::latexTextWidth(BufferView * bv) const
{ {
return width_.inPixels(InsetCollapsable::latexTextWidth(bv), return width_.inPixels(InsetCollapsable::latexTextWidth(bv));
bv->text->defaultHeight());
} }

View File

@ -2243,7 +2243,7 @@ int InsetTabular::getMaxWidthOfCell(BufferView * bv, int cell) const
if (len.zero()) if (len.zero())
return -1; return -1;
return len.inPixels(latexTextWidth(bv), bv->text->defaultHeight()); return len.inPixels(latexTextWidth(bv));
} }

View File

@ -205,8 +205,7 @@ int InsetWrap::getMaxWidth(BufferView * bv, UpdatableInset const * inset)
int InsetWrap::latexTextWidth(BufferView * bv) const int InsetWrap::latexTextWidth(BufferView * bv) const
{ {
return width_.inPixels(InsetCollapsable::latexTextWidth(bv), return width_.inPixels(InsetCollapsable::latexTextWidth(bv));
bv->text->defaultHeight());
} }

View File

@ -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 // Zoom factor specified by user in percent
double const zoom = lyxrc.zoom / 100.0; // [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 // DPI setting for monitor: pixels/inch
double const dpi = lyxrc.dpi; // screen resolution [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 // Pixel values are scaled so that the ratio
// between lengths and font sizes on the screen // between lengths and font sizes on the screen
// is the same as on paper. // is the same as on paper.
// we don't care about sign of value, we
// display negative space with text too
#ifdef WITH_WARNINGS #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') #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 #endif
@ -191,26 +197,30 @@ int LyXLength::inPixels(int default_width, int default_height) const
case LyXLength::EX: case LyXLength::EX:
// Ex: The height of an "x" // Ex: The height of an "x"
// 0.4305 is the ration between 1ex and 1em in cmr10 // 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; break;
case LyXLength::EM: case LyXLength::EM:
// Em: The width of an "m" // Em: The width of an "m"
// 1em is approx 10points in cmr10 result = val_ * em_width;
result = zoom * val_ * default_height;
break; break;
case LyXLength::MU: case LyXLength::MU:
// math unit = 1/18em // math unit = 1/18em
result = val_ * default_height / 18; result = val_ * em_width / 18;
break; break;
case LyXLength::PCW: // Always % of workarea case LyXLength::PCW: // Always % of workarea
case LyXLength::PTW: case LyXLength::PTW:
case LyXLength::PPW:
case LyXLength::PLW: 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; break;
case LyXLength::PTH: case LyXLength::PTH:
result = val_ * text_width * 1.787 / 100;
break;
case LyXLength::PPH: case LyXLength::PPH:
result = val_ * default_height / 100; result = val_ * text_width * 2.2 / 100;
break; break;
case LyXLength::UNIT_NONE: case LyXLength::UNIT_NONE:
result = 0; // this cannot happen result = 0; // this cannot happen

View File

@ -68,7 +68,7 @@ public:
/// return string representation for LaTeX /// return string representation for LaTeX
string const asLatexString() const; string const asLatexString() const;
/// return the on-screen size of this length /// 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 /// return the on-screen size of this length of an image
int inBP() const; int inBP() const;

View File

@ -847,7 +847,7 @@ int LyXText::leftMargin(BufferView * bview, Row const * row) const
LyXLength const len = row->par()->params().leftIndent(); LyXLength const len = row->par()->params().leftIndent();
int const tw = inset_owner ? int const tw = inset_owner ?
inset_owner->latexTextWidth(bview) : workWidth(bview); inset_owner->latexTextWidth(bview) : workWidth(bview);
x += len.inPixels(tw, bview->text->defaultHeight()); x += len.inPixels(tw);
} }
LyXAlignment align; // wrong type LyXAlignment align; // wrong type

View File

@ -505,7 +505,7 @@ int VSpace::inPixels(BufferView const * bv) const
break; break;
case LENGTH: case LENGTH:
retval = len_.len().inPixels(bv->workWidth(), default_height); retval = len_.len().inPixels(bv->workWidth());
break; break;
} }