diff options
Diffstat (limited to 'layout/svg/SVGImageContext.h')
-rw-r--r-- | layout/svg/SVGImageContext.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/layout/svg/SVGImageContext.h b/layout/svg/SVGImageContext.h new file mode 100644 index 000000000..f1e1b94d2 --- /dev/null +++ b/layout/svg/SVGImageContext.h @@ -0,0 +1,88 @@ +/* -*- 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 MOZILLA_SVGCONTEXT_H_ +#define MOZILLA_SVGCONTEXT_H_ + +#include "mozilla/Maybe.h" +#include "SVGPreserveAspectRatio.h" +#include "Units.h" + +namespace mozilla { + +// SVG image-specific rendering context. For imgIContainer::Draw. +// Used to pass information such as +// - viewport information from CSS, and +// - overridden attributes from an SVG <image> element +// to the image's internal SVG document when it's drawn. +class SVGImageContext +{ +public: + SVGImageContext() + : mGlobalOpacity(1.0) + { } + + // Note: 'aIsPaintingSVGImageElement' should be used to indicate whether + // the SVG image in question is being painted for an SVG <image> element. + SVGImageContext(CSSIntSize aViewportSize, + Maybe<SVGPreserveAspectRatio> aPreserveAspectRatio, + gfxFloat aOpacity = 1.0, + bool aIsPaintingSVGImageElement = false) + : mViewportSize(aViewportSize) + , mPreserveAspectRatio(aPreserveAspectRatio) + , mGlobalOpacity(aOpacity) + , mIsPaintingSVGImageElement(aIsPaintingSVGImageElement) + { } + + const CSSIntSize& GetViewportSize() const { + return mViewportSize; + } + + const Maybe<SVGPreserveAspectRatio>& GetPreserveAspectRatio() const { + return mPreserveAspectRatio; + } + + gfxFloat GetGlobalOpacity() const { + return mGlobalOpacity; + } + + bool IsPaintingForSVGImageElement() const { + return mIsPaintingSVGImageElement; + } + + bool operator==(const SVGImageContext& aOther) const { + return mViewportSize == aOther.mViewportSize && + mPreserveAspectRatio == aOther.mPreserveAspectRatio && + mGlobalOpacity == aOther.mGlobalOpacity && + mIsPaintingSVGImageElement == aOther.mIsPaintingSVGImageElement; + } + + bool operator!=(const SVGImageContext& aOther) const { + return !(*this == aOther); + } + + uint32_t Hash() const { + return HashGeneric(mViewportSize.width, + mViewportSize.height, + mPreserveAspectRatio.map(HashPAR).valueOr(0), + HashBytes(&mGlobalOpacity, sizeof(gfxFloat)), + mIsPaintingSVGImageElement); + } + +private: + static uint32_t HashPAR(const SVGPreserveAspectRatio& aPAR) { + return aPAR.Hash(); + } + + // NOTE: When adding new member-vars, remember to update Hash() & operator==. + CSSIntSize mViewportSize; + Maybe<SVGPreserveAspectRatio> mPreserveAspectRatio; + gfxFloat mGlobalOpacity; + bool mIsPaintingSVGImageElement; +}; + +} // namespace mozilla + +#endif // MOZILLA_SVGCONTEXT_H_ |