fix the drawing for cells with a specified vertical alignment

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33799 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Edwin Leuven 2010-03-19 09:41:31 +00:00
parent 32faa2a273
commit 1a1bf4988b
2 changed files with 24 additions and 16 deletions

View File

@ -518,6 +518,7 @@ Tabular::CellData::CellData(Buffer * buf)
multirow(Tabular::CELL_NORMAL),
alignment(LYX_ALIGN_CENTER),
valignment(LYX_VALIGN_TOP),
voffset(0),
top_line(false),
bottom_line(false),
left_line(false),
@ -1221,20 +1222,7 @@ int Tabular::textHOffset(idx_type cell) const
int Tabular::textVOffset(idx_type cell) const
{
row_type const r = cellRow(cell);
int y = cellHeight(cell) - rowDescent(r) - rowAscent(r);
switch (getVAlignment(cell)) {
case LYX_VALIGN_TOP:
y = 0;
break;
case LYX_VALIGN_MIDDLE:
y = y/2;
break;
case LYX_VALIGN_BOTTOM:
break;
}
return y;
return cellInfo(cell).voffset;
}
@ -3235,8 +3223,26 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
if (!p_width.zero())
dim.wid = m.base.textwidth;
tabular.setCellWidth(cell, dim.wid);
maxAsc = max(maxAsc, dim.asc);
maxDesc = max(maxDesc, dim.des);
// FIXME?: do we need a second metrics call
// to get the descent of the text in last par?
TextMetrics const & tm =
mi.base.bv->textMetrics(tabular.cellInset(cell)->getText(0));
int const backdes = tm.last().second->descent();
switch (tabular.getVAlignment(cell)) {
case Tabular::LYX_VALIGN_TOP:
tabular.cell_info[r][c].voffset = 0;
break;
case Tabular::LYX_VALIGN_MIDDLE:
tabular.cell_info[r][c].voffset = -(dim.des - backdes - TEXT_TO_INSET_OFFSET)/2;
break;
case Tabular::LYX_VALIGN_BOTTOM:
tabular.cell_info[r][c].voffset = -(dim.des - backdes - TEXT_TO_INSET_OFFSET);
break;
}
maxAsc = max(maxAsc, dim.asc - tabular.cell_info[r][c].voffset);
maxDesc = max(maxDesc, dim.des + tabular.cell_info[r][c].voffset);
}
int const top_space = tabular.row_info[r].top_space_default ?
default_line_space :

View File

@ -491,6 +491,8 @@ public:
///
VAlignment valignment;
///
int voffset;
///
bool top_line;
///
bool bottom_line;