зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1285320 - (Part 1) Add struct "CachedBorderImageData" to keep cached data for border in nsStyleImage. r=dholbert
--HG-- extra : rebase_source : 5c654bd0dab03864ed1e1bf2883525bccea73d8a
This commit is contained in:
Родитель
b89b0e13a4
Коммит
2850db7128
|
@ -1909,6 +1909,30 @@ nsStyleGradient::HasCalc()
|
||||||
mRadiusX.IsCalcUnit() || mRadiusY.IsCalcUnit();
|
mRadiusX.IsCalcUnit() || mRadiusY.IsCalcUnit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------
|
||||||
|
// CachedBorderImageData
|
||||||
|
//
|
||||||
|
void
|
||||||
|
CachedBorderImageData::PurgeCachedImages()
|
||||||
|
{
|
||||||
|
mSubImages.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CachedBorderImageData::SetSubImage(uint8_t aIndex, imgIContainer* aSubImage)
|
||||||
|
{
|
||||||
|
mSubImages.ReplaceObjectAt(aSubImage, aIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
imgIContainer*
|
||||||
|
CachedBorderImageData::GetSubImage(uint8_t aIndex)
|
||||||
|
{
|
||||||
|
imgIContainer* subImage = nullptr;
|
||||||
|
if (aIndex < mSubImages.Count())
|
||||||
|
subImage = mSubImages[aIndex];
|
||||||
|
return subImage;
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------
|
// --------------------
|
||||||
// nsStyleImage
|
// nsStyleImage
|
||||||
//
|
//
|
||||||
|
@ -2004,7 +2028,9 @@ nsStyleImage::SetImageData(imgRequestProxy* aImage)
|
||||||
mImage = aImage;
|
mImage = aImage;
|
||||||
mType = eStyleImageType_Image;
|
mType = eStyleImageType_Image;
|
||||||
}
|
}
|
||||||
mSubImages.Clear();
|
if (mCachedBIData) {
|
||||||
|
mCachedBIData->PurgeCachedImages();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "mozilla/SheetType.h"
|
#include "mozilla/SheetType.h"
|
||||||
#include "mozilla/StaticPtr.h"
|
#include "mozilla/StaticPtr.h"
|
||||||
#include "mozilla/StyleStructContext.h"
|
#include "mozilla/StyleStructContext.h"
|
||||||
|
#include "mozilla/UniquePtr.h"
|
||||||
#include "nsAutoPtr.h"
|
#include "nsAutoPtr.h"
|
||||||
#include "nsColor.h"
|
#include "nsColor.h"
|
||||||
#include "nsCoord.h"
|
#include "nsCoord.h"
|
||||||
|
@ -246,6 +247,16 @@ enum nsStyleImageType {
|
||||||
eStyleImageType_Element
|
eStyleImageType_Element
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CachedBorderImageData
|
||||||
|
{
|
||||||
|
void PurgeCachedImages();
|
||||||
|
void SetSubImage(uint8_t aIndex, imgIContainer* aSubImage);
|
||||||
|
imgIContainer* GetSubImage(uint8_t aIndex);
|
||||||
|
|
||||||
|
private:
|
||||||
|
nsCOMArray<imgIContainer> mSubImages;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a paintable image of one of the following types.
|
* Represents a paintable image of one of the following types.
|
||||||
* (1) A real image loaded from an external source.
|
* (1) A real image loaded from an external source.
|
||||||
|
@ -361,9 +372,11 @@ struct nsStyleImage
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void DoCopy(const nsStyleImage& aOther);
|
void DoCopy(const nsStyleImage& aOther);
|
||||||
|
void EnsureCachedBIData() const;
|
||||||
|
|
||||||
// Cache for border-image painting.
|
// This variable keeps some cache data for border image and is lazily
|
||||||
nsCOMArray<imgIContainer> mSubImages;
|
// allocated since it is only used in border image case.
|
||||||
|
mozilla::UniquePtr<CachedBorderImageData> mCachedBIData;
|
||||||
|
|
||||||
nsStyleImageType mType;
|
nsStyleImageType mType;
|
||||||
union {
|
union {
|
||||||
|
|
|
@ -16,19 +16,26 @@
|
||||||
#include "nsIContent.h" // for GetParent()
|
#include "nsIContent.h" // for GetParent()
|
||||||
#include "nsTextFrame.h" // for nsTextFrame::ShouldSuppressLineBreak
|
#include "nsTextFrame.h" // for nsTextFrame::ShouldSuppressLineBreak
|
||||||
|
|
||||||
|
inline void
|
||||||
|
nsStyleImage::EnsureCachedBIData() const
|
||||||
|
{
|
||||||
|
if (!mCachedBIData) {
|
||||||
|
const_cast<nsStyleImage*>(this)->mCachedBIData =
|
||||||
|
mozilla::MakeUnique<CachedBorderImageData>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
nsStyleImage::SetSubImage(uint8_t aIndex, imgIContainer* aSubImage) const
|
nsStyleImage::SetSubImage(uint8_t aIndex, imgIContainer* aSubImage) const
|
||||||
{
|
{
|
||||||
const_cast<nsStyleImage*>(this)->mSubImages.ReplaceObjectAt(aSubImage, aIndex);
|
EnsureCachedBIData();
|
||||||
|
mCachedBIData->SetSubImage(aIndex, aSubImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline imgIContainer*
|
inline imgIContainer*
|
||||||
nsStyleImage::GetSubImage(uint8_t aIndex) const
|
nsStyleImage::GetSubImage(uint8_t aIndex) const
|
||||||
{
|
{
|
||||||
imgIContainer* subImage = nullptr;
|
return (mCachedBIData) ? mCachedBIData->GetSubImage(aIndex) : nullptr;
|
||||||
if (aIndex < mSubImages.Count())
|
|
||||||
subImage = mSubImages[aIndex];
|
|
||||||
return subImage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
Загрузка…
Ссылка в новой задаче