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
|
/* static */ void
|
||||||
nsTableFrame::DisplayGenericTablePart(nsDisplayListBuilder* aBuilder,
|
nsTableFrame::DisplayGenericTablePart(nsDisplayListBuilder* aBuilder,
|
||||||
nsFrame* aFrame,
|
nsFrame* aFrame,
|
||||||
|
@ -1375,11 +1443,16 @@ nsTableFrame::DisplayGenericTablePart(nsDisplayListBuilder* aBuilder,
|
||||||
nsTableFrame* table = static_cast<nsTableFrame*>(aFrame);
|
nsTableFrame* table = static_cast<nsTableFrame*>(aFrame);
|
||||||
// In the collapsed border model, overlay all collapsed borders.
|
// In the collapsed border model, overlay all collapsed borders.
|
||||||
if (table->IsBorderCollapse()) {
|
if (table->IsBorderCollapse()) {
|
||||||
aLists.BorderBackground()->AppendNewToTop(
|
if (table->HasBCBorders()) {
|
||||||
new (aBuilder) nsDisplayTableBorderCollapse(aBuilder, table));
|
aLists.BorderBackground()->AppendNewToTop(
|
||||||
|
new (aBuilder) nsDisplayTableBorderCollapse(aBuilder, table));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
aLists.BorderBackground()->AppendNewToTop(
|
const nsStyleBorder* borderStyle = aFrame->StyleBorder();
|
||||||
new (aBuilder) nsDisplayBorder(aBuilder, table));
|
if (borderStyle->HasBorder()) {
|
||||||
|
aLists.BorderBackground()->AppendNewToTop(
|
||||||
|
new (aBuilder) nsDisplayBorder(aBuilder, table));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4101,6 +4174,7 @@ nsTableFrame::AddBCDamageArea(const TableArea& aValue)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SetNeedToCalcBCBorders(true);
|
SetNeedToCalcBCBorders(true);
|
||||||
|
SetNeedToCalcHasBCBorders(true);
|
||||||
// Get the property
|
// Get the property
|
||||||
BCPropertyData* value = GetOrCreateBCProperty();
|
BCPropertyData* value = GetOrCreateBCProperty();
|
||||||
if (value) {
|
if (value) {
|
||||||
|
@ -4141,6 +4215,7 @@ nsTableFrame::SetFullBCDamageArea()
|
||||||
NS_ASSERTION(IsBorderCollapse(), "invalid SetFullBCDamageArea call");
|
NS_ASSERTION(IsBorderCollapse(), "invalid SetFullBCDamageArea call");
|
||||||
|
|
||||||
SetNeedToCalcBCBorders(true);
|
SetNeedToCalcBCBorders(true);
|
||||||
|
SetNeedToCalcHasBCBorders(true);
|
||||||
|
|
||||||
BCPropertyData* value = GetOrCreateBCProperty();
|
BCPropertyData* value = GetOrCreateBCProperty();
|
||||||
if (value) {
|
if (value) {
|
||||||
|
|
|
@ -761,6 +761,13 @@ public:
|
||||||
bool NeedToCollapse() const;
|
bool NeedToCollapse() const;
|
||||||
void SetNeedToCollapse(bool aValue);
|
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
|
/** The GeometryDirty bit is similar to the NS_FRAME_IS_DIRTY frame
|
||||||
* state bit, which implies that all descendants are dirty. The
|
* state bit, which implies that all descendants are dirty. The
|
||||||
* GeometryDirty still implies that all the parts of the table are
|
* GeometryDirty still implies that all the parts of the table are
|
||||||
|
@ -870,6 +877,8 @@ protected:
|
||||||
uint32_t mIStartContBCBorder:8;
|
uint32_t mIStartContBCBorder:8;
|
||||||
uint32_t mNeedToCollapse:1; // rows, cols that have visibility:collapse need to be collapsed
|
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 mResizedColumns:1; // have we resized columns since last reflow?
|
||||||
|
uint32_t mNeedToCalcHasBCBorders:1;
|
||||||
|
uint32_t mHasBCBorders:1;
|
||||||
} mBits;
|
} mBits;
|
||||||
|
|
||||||
nsTableCellMap* mCellMap; // maintains the relationships between rows, cols, and cells
|
nsTableCellMap* mCellMap; // maintains the relationships between rows, cols, and cells
|
||||||
|
@ -965,6 +974,30 @@ inline void nsTableFrame::SetNeedToCalcBCBorders(bool aValue)
|
||||||
mBits.mNeedToCalcBCBorders = (unsigned)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
|
inline nscoord
|
||||||
nsTableFrame::GetContinuousIStartBCBorderWidth() const
|
nsTableFrame::GetContinuousIStartBCBorderWidth() const
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue