2012-08-28 22:39:01 -07:00
|
|
|
/*-*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
#ifndef NSDISPLAYLISTINVALIDATION_H_
|
|
|
|
#define NSDISPLAYLISTINVALIDATION_H_
|
|
|
|
|
2013-05-14 09:33:23 -07:00
|
|
|
#include "mozilla/Attributes.h"
|
2012-08-28 22:39:01 -07:00
|
|
|
#include "nsRect.h"
|
2013-11-30 14:20:41 -08:00
|
|
|
#include "nsColor.h"
|
2014-08-30 09:22:31 -07:00
|
|
|
#include "gfxRect.h"
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
class nsDisplayItem;
|
|
|
|
class nsDisplayListBuilder;
|
2012-11-09 15:14:59 -08:00
|
|
|
class nsDisplayBackgroundImage;
|
2013-07-17 23:34:58 -07:00
|
|
|
class nsDisplayThemedBackground;
|
2014-08-30 09:22:31 -07:00
|
|
|
class nsDisplaySVGEffects;
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* This stores the geometry of an nsDisplayItem, and the area
|
|
|
|
* that will be affected when painting the item.
|
|
|
|
*
|
|
|
|
* It is used to retain information about display items so they
|
|
|
|
* can be compared against new display items in the next paint.
|
|
|
|
*/
|
|
|
|
class nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayItemGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
virtual ~nsDisplayItemGeometry();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compute the area required to be invalidated if this
|
|
|
|
* display item is removed.
|
|
|
|
*/
|
2012-08-28 22:48:44 -07:00
|
|
|
const nsRect& ComputeInvalidationRegion() { return mBounds; }
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Shifts all retained areas of the nsDisplayItemGeometry by the given offset.
|
|
|
|
*
|
|
|
|
* This is used to compensate for scrolling, since the destination buffer
|
|
|
|
* can scroll without requiring a full repaint.
|
|
|
|
*
|
|
|
|
* @param aOffset Offset to shift by.
|
|
|
|
*/
|
2014-07-21 06:59:10 -07:00
|
|
|
virtual void MoveBy(const nsPoint& aOffset)
|
|
|
|
{
|
|
|
|
mBounds.MoveBy(aOffset);
|
|
|
|
}
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Bounds of the display item
|
|
|
|
*/
|
|
|
|
nsRect mBounds;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A default geometry implementation, used by nsDisplayItem. Retains
|
|
|
|
* and compares the bounds, and border rect.
|
|
|
|
*
|
|
|
|
* This should be sufficient for the majority of display items.
|
|
|
|
*/
|
|
|
|
class nsDisplayItemGenericGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayItemGenericGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
|
2013-05-14 09:33:23 -07:00
|
|
|
virtual void MoveBy(const nsPoint& aOffset) MOZ_OVERRIDE;
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
nsRect mBorderRect;
|
|
|
|
};
|
|
|
|
|
2013-03-07 18:15:10 -08:00
|
|
|
class nsDisplayItemBoundsGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayItemBoundsGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
|
|
|
|
bool mHasRoundedCorners;
|
|
|
|
};
|
|
|
|
|
2012-08-28 22:39:01 -07:00
|
|
|
class nsDisplayBorderGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayBorderGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
|
2013-05-14 09:33:23 -07:00
|
|
|
virtual void MoveBy(const nsPoint& aOffset) MOZ_OVERRIDE;
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
nsRect mContentRect;
|
|
|
|
};
|
|
|
|
|
|
|
|
class nsDisplayBackgroundGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
2012-11-09 15:14:59 -08:00
|
|
|
nsDisplayBackgroundGeometry(nsDisplayBackgroundImage* aItem, nsDisplayListBuilder* aBuilder);
|
2012-08-28 22:39:01 -07:00
|
|
|
|
2013-05-14 09:33:23 -07:00
|
|
|
virtual void MoveBy(const nsPoint& aOffset) MOZ_OVERRIDE;
|
2012-08-28 22:39:01 -07:00
|
|
|
|
2012-11-08 07:05:32 -08:00
|
|
|
nsRect mPositioningArea;
|
2012-08-28 22:39:01 -07:00
|
|
|
};
|
|
|
|
|
2013-07-17 23:34:58 -07:00
|
|
|
class nsDisplayThemedBackgroundGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayThemedBackgroundGeometry(nsDisplayThemedBackground* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
|
|
|
|
virtual void MoveBy(const nsPoint& aOffset) MOZ_OVERRIDE;
|
|
|
|
|
|
|
|
nsRect mPositioningArea;
|
2013-09-27 08:24:32 -07:00
|
|
|
bool mWindowIsActive;
|
2013-07-17 23:34:58 -07:00
|
|
|
};
|
|
|
|
|
2012-08-28 22:39:01 -07:00
|
|
|
class nsDisplayBoxShadowInnerGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayBoxShadowInnerGeometry(nsDisplayItem* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
|
2013-05-14 09:33:23 -07:00
|
|
|
virtual void MoveBy(const nsPoint& aOffset) MOZ_OVERRIDE;
|
2012-08-28 22:39:01 -07:00
|
|
|
|
|
|
|
nsRect mPaddingRect;
|
|
|
|
};
|
|
|
|
|
2014-07-21 06:59:10 -07:00
|
|
|
class nsDisplayBoxShadowOuterGeometry : public nsDisplayItemGenericGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplayBoxShadowOuterGeometry(nsDisplayItem* aItem,
|
|
|
|
nsDisplayListBuilder* aBuilder,
|
|
|
|
float aOpacity);
|
|
|
|
|
|
|
|
float mOpacity;
|
|
|
|
};
|
|
|
|
|
2013-11-24 17:59:00 -08:00
|
|
|
class nsDisplaySolidColorGeometry : public nsDisplayItemBoundsGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplaySolidColorGeometry(nsDisplayItem* aItem,
|
|
|
|
nsDisplayListBuilder* aBuilder,
|
|
|
|
nscolor aColor)
|
|
|
|
: nsDisplayItemBoundsGeometry(aItem, aBuilder)
|
|
|
|
, mColor(aColor)
|
|
|
|
{ }
|
|
|
|
|
|
|
|
nscolor mColor;
|
|
|
|
};
|
|
|
|
|
2014-08-30 09:22:31 -07:00
|
|
|
class nsDisplaySVGEffectsGeometry : public nsDisplayItemGeometry
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
nsDisplaySVGEffectsGeometry(nsDisplaySVGEffects* aItem, nsDisplayListBuilder* aBuilder);
|
|
|
|
|
|
|
|
virtual void MoveBy(const nsPoint& aOffset) MOZ_OVERRIDE;
|
|
|
|
|
|
|
|
gfxRect mBBox;
|
|
|
|
gfxPoint mUserSpaceOffset;
|
|
|
|
nsPoint mFrameOffsetToReferenceFrame;
|
|
|
|
};
|
|
|
|
|
2012-08-28 22:39:01 -07:00
|
|
|
#endif /*NSDISPLAYLISTINVALIDATION_H_*/
|