revert awful spaghetti (r33780)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33793 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Edwin Leuven 2010-03-18 19:02:01 +00:00
parent 3efcfa3cf1
commit 1e67084666
2 changed files with 2 additions and 115 deletions

View File

@ -514,9 +514,6 @@ string const featureAsString(Tabular::Feature action)
Tabular::CellData::CellData(Buffer * buf)
: cellno(0),
width(0),
height(0),
ascent(0),
descent(0),
multicolumn(Tabular::CELL_NORMAL),
multirow(Tabular::CELL_NORMAL),
alignment(LYX_ALIGN_CENTER),
@ -589,9 +586,7 @@ Tabular::RowData::RowData()
endfoot(false),
endlastfoot(false),
newpage(false),
caption(false),
valignment(LYX_VALIGN_TOP),
maxheight(0)
caption(false)
{}
@ -3242,12 +3237,6 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
tabular.setCellWidth(cell, dim.wid);
maxAsc = max(maxAsc, dim.asc);
maxDesc = max(maxDesc, dim.des);
// store the height for every cell
// this is later needed in InsetTabular::draw to determine the valignment
tabular.cell_info[r][c].height = dim.asc + dim.des;
tabular.cell_info[r][c].ascent = dim.asc;
tabular.cell_info[r][c].descent = dim.des;
}
int const top_space = tabular.row_info[r].top_space_default ?
default_line_space :
@ -3264,7 +3253,6 @@ void InsetTabular::metrics(MetricsInfo & mi, Dimension & dim) const
dim.wid = tabular.width() + 2 * ADD_TO_TABULAR_WIDTH;
}
bool InsetTabular::isCellSelected(Cursor & cur, row_type row, col_type col)
const
{
@ -3311,31 +3299,7 @@ void InsetTabular::draw(PainterInfo & pi, int x, int y) const
bool const original_selection_state = pi.selected;
idx_type idx = 0;
int cy = 0;
first_visible_cell = Tabular::npos;
// determine the highest cell because its valignment sets the row valignment
// also store its height
for (row_type r = 0; r < tabular.nrows(); ++r) {
for (col_type c = 0; c < tabular.ncols(); ++c) {
if (tabular.cell_info[r][c].height >= tabular.row_info[r].maxheight) {
tabular.row_info[r].maxheight = tabular.cell_info[r][c].height;
switch (tabular.getVAlignment(tabular.cellIndex(r, c))) {
case Tabular::LYX_VALIGN_TOP:
tabular.row_info[r].valignment = Tabular::LYX_VALIGN_TOP;
break;
case Tabular::LYX_VALIGN_MIDDLE:
tabular.row_info[r].valignment = Tabular::LYX_VALIGN_MIDDLE;
break;
case Tabular::LYX_VALIGN_BOTTOM:
tabular.row_info[r].valignment = Tabular::LYX_VALIGN_BOTTOM;
break;
}
}
}
}
// step over all cells
for (row_type r = 0; r < tabular.nrows(); ++r) {
int nx = x;
for (col_type c = 0; c < tabular.ncols(); ++c) {
@ -3353,75 +3317,8 @@ void InsetTabular::draw(PainterInfo & pi, int x, int y) const
first_visible_cell = idx;
pi.selected |= isCellSelected(cur, r, c);
// set the position for the vertical alignment
// if the cell is not the highest, align it according to the row valignment
// and according to its own valignment
// Note: The fractions of the scent values were found by testing
// there is no bettwer way for the calculation because of LyX's definition
// of ascent and descent. The correct way would be to calculate based
// on the text height, the line space and paragraph separation.
cy = y;
if (tabular.cell_info[r][c].height < tabular.row_info[r].maxheight) {
switch (tabular.row_info[r].valignment) {
case Tabular::LYX_VALIGN_TOP:
switch (tabular.getVAlignment(idx)) {
case Tabular::LYX_VALIGN_TOP:
break;
case Tabular::LYX_VALIGN_MIDDLE:
cy += - tabular.cell_info[r][c].descent / 2
+ 0.3 * tabular.cell_info[r][c].ascent;
// FIXME the row also needs to be increased at the upper border
break;
case Tabular::LYX_VALIGN_BOTTOM:
cy += - tabular.cell_info[r][c].descent
+ 0.6 * tabular.cell_info[r][c].ascent;
// FIXME the row also needs to be increased at the upper border
break;
}
break;
case Tabular::LYX_VALIGN_MIDDLE:
switch (tabular.getVAlignment(idx)) {
case Tabular::LYX_VALIGN_TOP:
cy += tabular.row_info[r].maxheight / 2
- 0.75 * tabular.cell_info[r][c].ascent;
break;
case Tabular::LYX_VALIGN_MIDDLE:
cy += tabular.row_info[r].maxheight / 2
- tabular.cell_info[r][c].descent / 2
- 0.5 * tabular.cell_info[r][c].ascent;
break;
case Tabular::LYX_VALIGN_BOTTOM:
cy += tabular.row_info[r].maxheight / 2
- tabular.cell_info[r][c].descent
- 0.2 * tabular.cell_info[r][c].ascent;
break;
}
break;
case Tabular::LYX_VALIGN_BOTTOM:
switch (tabular.getVAlignment(idx)) {
case Tabular::LYX_VALIGN_TOP:
cy += tabular.row_info[r].maxheight
- 1.5 * tabular.cell_info[r][c].ascent;
break;
case Tabular::LYX_VALIGN_MIDDLE:
cy += tabular.row_info[r].maxheight
- tabular.cell_info[r][c].descent / 2
- 1.2 * tabular.cell_info[r][c].ascent;
// FIXME the row also needs to be increased at the lower border
break;
case Tabular::LYX_VALIGN_BOTTOM:
cy += tabular.row_info[r].maxheight
- tabular.cell_info[r][c].descent
- 0.9 * tabular.cell_info[r][c].ascent;
// FIXME the row also needs to be increased at the lower border
break;
}
break;
}
}
int const cx = nx + tabular.textHOffset(idx);
int const cy = y + tabular.textVOffset(idx);
// Cache the Inset position.
bv->coordCache().insets().add(cell(idx).get(), cx, cy);
cell(idx)->draw(pi, cx, cy);

View File

@ -483,12 +483,6 @@ public:
///
int width;
///
int height;
///
int ascent;
///
int descent;
///
int multicolumn;
///
int multirow;
@ -555,10 +549,6 @@ public:
bool newpage;
/// caption
bool caption;
///
VAlignment valignment;
///
int maxheight;
};
///
typedef std::vector<RowData> row_vector;