mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-07 15:57:31 +09:00
Issue #146 - Part 3: Create nsDisplayTableBackgroundImage to avoid
display list collisions when processing the background image of a table.
This commit is contained in:
parent
c8aaad0428
commit
a96ec7b886
2 changed files with 75 additions and 7 deletions
|
|
@ -2814,6 +2814,8 @@ protected:
|
|||
void PaintInternal(nsDisplayListBuilder* aBuilder, nsRenderingContext* aCtx,
|
||||
const nsRect& aBounds, nsRect* aClipRect);
|
||||
|
||||
virtual nsIFrame* StyleFrame() { return mFrame; }
|
||||
|
||||
// Determine whether we want to be separated into our own layer, independent
|
||||
// of whether this item can actually be layerized.
|
||||
enum ImageLayerization {
|
||||
|
|
@ -2859,6 +2861,41 @@ static_assert(
|
|||
"TableType cannot fit with TableTypeBits::COUNT");
|
||||
TableType GetTableTypeFromFrame(nsIFrame* aFrame);
|
||||
|
||||
/**
|
||||
* A display item to paint background image for table. For table parts, such
|
||||
* as row, row group, col, col group, when drawing its background, we'll
|
||||
* create separate background image display item for its containning cell.
|
||||
* Those background image display items will reference to same DisplayItemData
|
||||
* if we keep the mFrame point to cell's ancestor frame. We don't want to this
|
||||
* happened bacause share same DisplatItemData will cause many bugs. So that
|
||||
* we let mFrame point to cell frame and store the table type of the ancestor
|
||||
* frame. And use mFrame and table type as key to generate DisplayItemData to
|
||||
* avoid sharing DisplayItemData.
|
||||
*
|
||||
* Also store ancestor frame as mStyleFrame for all rendering informations.
|
||||
*/
|
||||
class nsDisplayTableBackgroundImage : public nsDisplayBackgroundImage {
|
||||
public:
|
||||
nsDisplayTableBackgroundImage(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aFrame,
|
||||
uint32_t aLayer,
|
||||
const nsRect& aBackgroundRect,
|
||||
const nsStyleBackground* aBackgroundStyle,
|
||||
nsIFrame* aCellFrame);
|
||||
|
||||
virtual uint32_t GetPerFrameKey() override {
|
||||
return (static_cast<uint8_t>(mTableType) << nsDisplayItem::TYPE_BITS) |
|
||||
nsDisplayItem::GetPerFrameKey();
|
||||
}
|
||||
|
||||
virtual bool IsInvalid(nsRect& aRect) override;
|
||||
protected:
|
||||
virtual nsIFrame* StyleFrame() override { return mStyleFrame; }
|
||||
|
||||
nsIFrame* mStyleFrame;
|
||||
TableType mTableType;
|
||||
};
|
||||
|
||||
/**
|
||||
* A display item to paint the native theme background for a frame.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue