Make addition of cell border display items depend...
This commit is contained in:
parent
454656013f
commit
c9470de8bb
|
@ -1268,6 +1268,74 @@ PaintRowGroupBackgroundByColIdx(nsTableRowGroupFrame* aRowGroup,
|
|||
}
|
||||
}
|
||||
|
||||
static inline bool FrameHasBorder(nsIFrame* f)
|
||||
{
|
||||
if (!f->StyleVisibility()->IsVisible()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (f->StyleBorder()->HasBorder()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void nsTableFrame::CalcHasBCBorders()
|
||||
{
|
||||
if (!IsBorderCollapse()) {
|
||||
SetHasBCBorders(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (FrameHasBorder(this)) {
|
||||
SetHasBCBorders(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check col and col group has borders.
|
||||
for (nsIFrame* f : this->GetChildList(kColGroupList)) {
|
||||
if (FrameHasBorder(f)) {
|
||||
SetHasBCBorders(true);
|
||||
return;
|
||||
}
|
||||
|
||||
nsTableColGroupFrame *colGroup = static_cast<nsTableColGroupFrame*>(f);
|
||||
for (nsTableColFrame* col = colGroup->GetFirstColumn(); col; col = col->GetNextCol()) {
|
||||
if (FrameHasBorder(col)) {
|
||||
SetHasBCBorders(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check row group, row and cell has borders.
|
||||
RowGroupArray rowGroups;
|
||||
OrderRowGroups(rowGroups);
|
||||
for (nsTableRowGroupFrame* rowGroup : rowGroups) {
|
||||
if (FrameHasBorder(rowGroup)) {
|
||||
SetHasBCBorders(true);
|
||||
return;
|
||||
}
|
||||
|
||||
for (nsTableRowFrame* row = rowGroup->GetFirstRow(); row; row = row->GetNextRow()) {
|
||||
if (FrameHasBorder(row)) {
|
||||
SetHasBCBorders(true);
|
||||
return;
|
||||
}
|
||||
|
||||
for (nsTableCellFrame* cell = row->GetFirstCell(); cell; cell = cell->GetNextCell()) {
|
||||
if (FrameHasBorder(cell)) {
|
||||
SetHasBCBorders(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetHasBCBorders(false);
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
nsTableFrame::DisplayGenericTablePart(nsDisplayListBuilder* aBuilder,
|
||||
nsFrame* aFrame,
|
||||
|
@ -1375,11 +1443,16 @@ nsTableFrame::DisplayGenericTablePart(nsDisplayListBuilder* aBuilder,
|
|||
nsTableFrame* table = static_cast<nsTableFrame*>(aFrame);
|
||||
// In the collapsed border model, overlay all collapsed borders.
|
||||
if (table->IsBorderCollapse()) {
|
||||
aLists.BorderBackground()->AppendNewToTop(
|
||||
new (aBuilder) nsDisplayTableBorderCollapse(aBuilder, table));
|
||||
if (table->HasBCBorders()) {
|
||||
aLists.BorderBackground()->AppendNewToTop(
|
||||
new (aBuilder) nsDisplayTableBorderCollapse(aBuilder, table));
|
||||
}
|
||||
} else {
|
||||
aLists.BorderBackground()->AppendNewToTop(
|
||||
new (aBuilder) nsDisplayBorder(aBuilder, table));
|
||||
const nsStyleBorder* borderStyle = aFrame->StyleBorder();
|
||||
if (borderStyle->HasBorder()) {
|
||||
aLists.BorderBackground()->AppendNewToTop(
|
||||
new (aBuilder) nsDisplayBorder(aBuilder, table));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4101,6 +4174,7 @@ nsTableFrame::AddBCDamageArea(const TableArea& aValue)
|
|||
#endif
|
||||
|
||||
SetNeedToCalcBCBorders(true);
|
||||
SetNeedToCalcHasBCBorders(true);
|
||||
// Get the property
|
||||
BCPropertyData* value = GetOrCreateBCProperty();
|
||||
if (value) {
|
||||
|
@ -4141,6 +4215,7 @@ nsTableFrame::SetFullBCDamageArea()
|
|||
NS_ASSERTION(IsBorderCollapse(), "invalid SetFullBCDamageArea call");
|
||||
|
||||
SetNeedToCalcBCBorders(true);
|
||||
SetNeedToCalcHasBCBorders(true);
|
||||
|
||||
BCPropertyData* value = GetOrCreateBCProperty();
|
||||
if (value) {
|
||||
|
|
|
@ -761,6 +761,13 @@ public:
|
|||
bool NeedToCollapse() const;
|
||||
void SetNeedToCollapse(bool aValue);
|
||||
|
||||
bool NeedToCalcHasBCBorders() const;
|
||||
void SetNeedToCalcHasBCBorders(bool aValue);
|
||||
|
||||
void CalcHasBCBorders();
|
||||
bool HasBCBorders();
|
||||
void SetHasBCBorders(bool aValue);
|
||||
|
||||
/** The GeometryDirty bit is similar to the NS_FRAME_IS_DIRTY frame
|
||||
* state bit, which implies that all descendants are dirty. The
|
||||
* GeometryDirty still implies that all the parts of the table are
|
||||
|
@ -870,6 +877,8 @@ protected:
|
|||
uint32_t mIStartContBCBorder:8;
|
||||
uint32_t mNeedToCollapse:1; // rows, cols that have visibility:collapse need to be collapsed
|
||||
uint32_t mResizedColumns:1; // have we resized columns since last reflow?
|
||||
uint32_t mNeedToCalcHasBCBorders:1;
|
||||
uint32_t mHasBCBorders:1;
|
||||
} mBits;
|
||||
|
||||
nsTableCellMap* mCellMap; // maintains the relationships between rows, cols, and cells
|
||||
|
@ -965,6 +974,30 @@ inline void nsTableFrame::SetNeedToCalcBCBorders(bool aValue)
|
|||
mBits.mNeedToCalcBCBorders = (unsigned)aValue;
|
||||
}
|
||||
|
||||
inline bool nsTableFrame::NeedToCalcHasBCBorders() const
|
||||
{
|
||||
return (bool)mBits.mNeedToCalcHasBCBorders;
|
||||
}
|
||||
|
||||
inline void nsTableFrame::SetNeedToCalcHasBCBorders(bool aValue)
|
||||
{
|
||||
mBits.mNeedToCalcHasBCBorders = (unsigned)aValue;
|
||||
}
|
||||
|
||||
inline bool nsTableFrame::HasBCBorders()
|
||||
{
|
||||
if (NeedToCalcHasBCBorders()) {
|
||||
CalcHasBCBorders();
|
||||
SetNeedToCalcHasBCBorders(false);
|
||||
}
|
||||
return (bool)mBits.mHasBCBorders;
|
||||
}
|
||||
|
||||
inline void nsTableFrame::SetHasBCBorders(bool aValue)
|
||||
{
|
||||
mBits.mHasBCBorders = (unsigned)aValue;
|
||||
}
|
||||
|
||||
inline nscoord
|
||||
nsTableFrame::GetContinuousIStartBCBorderWidth() const
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue