зеркало из 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();
|
||||
}
|
||||
|
||||
// --------------------
|
||||
// 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
|
||||
//
|
||||
|
@ -2004,7 +2028,9 @@ nsStyleImage::SetImageData(imgRequestProxy* aImage)
|
|||
mImage = aImage;
|
||||
mType = eStyleImageType_Image;
|
||||
}
|
||||
mSubImages.Clear();
|
||||
if (mCachedBIData) {
|
||||
mCachedBIData->PurgeCachedImages();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "mozilla/SheetType.h"
|
||||
#include "mozilla/StaticPtr.h"
|
||||
#include "mozilla/StyleStructContext.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsColor.h"
|
||||
#include "nsCoord.h"
|
||||
|
@ -246,6 +247,16 @@ enum nsStyleImageType {
|
|||
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.
|
||||
* (1) A real image loaded from an external source.
|
||||
|
@ -361,9 +372,11 @@ struct nsStyleImage
|
|||
|
||||
private:
|
||||
void DoCopy(const nsStyleImage& aOther);
|
||||
void EnsureCachedBIData() const;
|
||||
|
||||
// Cache for border-image painting.
|
||||
nsCOMArray<imgIContainer> mSubImages;
|
||||
// This variable keeps some cache data for border image and is lazily
|
||||
// allocated since it is only used in border image case.
|
||||
mozilla::UniquePtr<CachedBorderImageData> mCachedBIData;
|
||||
|
||||
nsStyleImageType mType;
|
||||
union {
|
||||
|
|
|
@ -16,19 +16,26 @@
|
|||
#include "nsIContent.h" // for GetParent()
|
||||
#include "nsTextFrame.h" // for nsTextFrame::ShouldSuppressLineBreak
|
||||
|
||||
inline void
|
||||
nsStyleImage::EnsureCachedBIData() const
|
||||
{
|
||||
if (!mCachedBIData) {
|
||||
const_cast<nsStyleImage*>(this)->mCachedBIData =
|
||||
mozilla::MakeUnique<CachedBorderImageData>();
|
||||
}
|
||||
}
|
||||
|
||||
inline void
|
||||
nsStyleImage::SetSubImage(uint8_t aIndex, imgIContainer* aSubImage) const
|
||||
{
|
||||
const_cast<nsStyleImage*>(this)->mSubImages.ReplaceObjectAt(aSubImage, aIndex);
|
||||
EnsureCachedBIData();
|
||||
mCachedBIData->SetSubImage(aIndex, aSubImage);
|
||||
}
|
||||
|
||||
inline imgIContainer*
|
||||
nsStyleImage::GetSubImage(uint8_t aIndex) const
|
||||
{
|
||||
imgIContainer* subImage = nullptr;
|
||||
if (aIndex < mSubImages.Count())
|
||||
subImage = mSubImages[aIndex];
|
||||
return subImage;
|
||||
return (mCachedBIData) ? mCachedBIData->GetSubImage(aIndex) : nullptr;
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
Загрузка…
Ссылка в новой задаче