Files
palemoon27/image/VectorImage.h
T
roytam1 a2174af992 import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1143038 - Use AppConstants in tabbrowser.xml (r=gavin) (7974d0be4)
- Bug 1087726: Make JS callers of ios.newChannel call ios.newChannel2 in browser/ (r=gijs) (995267699)
- Bug 1149037 - Make nsLayoutUtils::ComputeSizeForDrawing* take a CSSIntSize param instead of a unit-less nsIntSize. r=roc (34aebc313)
- Bug 1149215 - Remove nsLayoutUtils::GetWholeImageDestination that use unitless nsIntSize. r=dholbert (dba5c0392)
- Bug 1149222 part 1 - Make nsLayoutUtils::DrawBackgroundImage and SVGImageContext use CSSIntSize instead of unitless nsIntSize. r=dholbert (32052dcf6)
- Bug 1149222 part 2 - Make nsSVGImageFrame::PaintSVG use LayoutDeviceSize & LayoutDevicePixel::ToAppUnits, when setting up its dest-rect. r=mats (d7505c2ab)
- Bug 1102048 (Part 15, VectorImage) - Make image/src files comply with the Mozilla Coding Style Guide. r=seth (c38d91d61)
- do not uselessly run the preprocessor (280c69776)
- Bug 1130816 - Bad argument passed to newChannelFromURI2 in WindowsPreviewPerTab.jsm (r=gijs) (70cd2eec7)
- AppConstants.jsm changes - Bug 1149334 - Remove preprocessing of nsUpdateService.js and use AppConstants.jsm. r=gavin.sharp (ab53e3bc2)
- Bug 1153657 - Performance Monitoring is not ready to ride the trains. r=yoric (582aef2de)
- Bug 1140672 - Remove app update file migration code for Windows. r=spohl (c7d6a39ab)
- Bug 1137901 - Remove param from refreshUpdateStatus. r=spohl (4d6bfc4e0)
- Remove FHR from app update Bug 1121018 - FHR data migration: org.mozilla.update. r=spohl (70db64336)
- lost bits of 1. main patch - Bug 843497 - Update check says 'up to date' for out (0975d2954)
- 1. File renames for Bug 1136358 - Preprocessing and file includes make it difficult to debug app update tests. r=spohl (c94361eee)
- 2. Build changes for Bug 1136358 - Preprocessing and file includes make it difficult to debug app update tests. r=spohl, r=gps (d4f2581a1)
- 3. Main patch for Bug 1136358 - Preprocessing and file includes make it difficult to debug app update tests. r=spohl (f4f7e68c6)
- 4. Use XPCOMUtils for Bug 1136358 - Preprocessing and file includes make it difficult to debug app update tests. r=spohl (0f4a9df9e)
- Bug 1137447 - New app update telemetry for patch type (complete or partial), extended error codes, and general cleanup. r=bbondy (12fb03ead)
- Bug 1149590 - Update/Upgrade for application dowloaded and installed, setting to ask/prompt for action ignored. r=spohl (2be30a384)
- changes for nsUpdateService.js - Bug 1149334 - Remove preprocessing of nsUpdateService.js and use AppConstants.jsm. r=spohl (e404305ee)
- Bug 1139958 - Start using AppConstants.jsm in Toolkit r=mossop (3e39e1160)
- Bug 1150688 - Update sections of GMPInstallManager.jsm, which were copied from nsUpdateService.js, to reflect the changes to nsUpdateService.js from bug 1149334. r=spohl (3fa552f68)
- Followup patch to Bug 1139958 forgot to add a comment to AppConstants.jsm r=mossop (be2408473)
2020-05-30 12:49:10 +08:00

133 lines
4.6 KiB
C++

/* -*- 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_image_VectorImage_h
#define mozilla_image_VectorImage_h
#include "Image.h"
#include "nsIStreamListener.h"
#include "mozilla/MemoryReporting.h"
class nsIRequest;
class gfxDrawable;
namespace mozilla {
namespace image {
struct SVGDrawingParameters;
class SVGDocumentWrapper;
class SVGRootRenderingObserver;
class SVGLoadEventListener;
class SVGParseCompleteListener;
class VectorImage final : public ImageResource,
public nsIStreamListener
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIREQUESTOBSERVER
NS_DECL_NSISTREAMLISTENER
NS_DECL_IMGICONTAINER
// (no public constructor - use ImageFactory)
// Methods inherited from Image
nsresult Init(const char* aMimeType,
uint32_t aFlags) override;
virtual size_t SizeOfSourceWithComputedFallback(MallocSizeOf aMallocSizeOf)
const override;
virtual size_t SizeOfDecoded(gfxMemoryLocation aLocation,
MallocSizeOf aMallocSizeOf) const override;
virtual nsresult OnImageDataAvailable(nsIRequest* aRequest,
nsISupports* aContext,
nsIInputStream* aInStr,
uint64_t aSourceOffset,
uint32_t aCount) override;
virtual nsresult OnImageDataComplete(nsIRequest* aRequest,
nsISupports* aContext,
nsresult aResult,
bool aLastPart) override;
void OnSurfaceDiscarded() override;
/**
* Callback for SVGRootRenderingObserver.
*
* This just sets a dirty flag that we check in VectorImage::RequestRefresh,
* which is called under the ticks of the refresh driver of any observing
* documents that we may have. Only then (after all animations in this image
* have been updated) do we send out "frame changed" notifications,
*/
void InvalidateObserversOnNextRefreshDriverTick();
// Callback for SVGParseCompleteListener.
void OnSVGDocumentParsed();
// Callbacks for SVGLoadEventListener.
void OnSVGDocumentLoaded();
void OnSVGDocumentError();
protected:
explicit VectorImage(ProgressTracker* aProgressTracker = nullptr,
ImageURL* aURI = nullptr);
virtual ~VectorImage();
virtual nsresult StartAnimation() override;
virtual nsresult StopAnimation() override;
virtual bool ShouldAnimate() override;
void CreateSurfaceAndShow(const SVGDrawingParameters& aParams);
void Show(gfxDrawable* aDrawable, const SVGDrawingParameters& aParams);
private:
/**
* In catastrophic circumstances like a GPU driver crash, we may lose our
* surfaces even if they're locked. RecoverFromLossOfSurfaces discards all
* existing surfaces, allowing us to recover.
*/
void RecoverFromLossOfSurfaces();
void CancelAllListeners();
void SendInvalidationNotifications();
nsRefPtr<SVGDocumentWrapper> mSVGDocumentWrapper;
nsRefPtr<SVGRootRenderingObserver> mRenderingObserver;
nsRefPtr<SVGLoadEventListener> mLoadEventListener;
nsRefPtr<SVGParseCompleteListener> mParseCompleteListener;
/// Count of locks on this image (roughly correlated to visible instances).
uint32_t mLockCount;
bool mIsInitialized; // Have we been initialized?
bool mDiscardable; // Are we discardable?
bool mIsFullyLoaded; // Has the SVG document finished
// loading?
bool mIsDrawing; // Are we currently drawing?
bool mHaveAnimations; // Is our SVG content SMIL-animated?
// (Only set after mIsFullyLoaded.)
bool mHasPendingInvalidation; // Invalidate observers next refresh
// driver tick.
// Initializes ProgressTracker and resets it on RasterImage destruction.
nsAutoPtr<ProgressTrackerInit> mProgressTrackerInit;
friend class ImageFactory;
};
inline NS_IMETHODIMP VectorImage::GetAnimationMode(uint16_t* aAnimationMode) {
return GetAnimationModeInternal(aAnimationMode);
}
inline NS_IMETHODIMP VectorImage::SetAnimationMode(uint16_t aAnimationMode) {
return SetAnimationModeInternal(aAnimationMode);
}
} // namespace image
} // namespace mozilla
#endif // mozilla_image_VectorImage_h