mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-11 16:32:59 +00:00
cee95ec8de
If FLAG_HIGH_QUALITY_SCALING is used, we should use SurfaceCache::LookupBestMatch just like how it is done in RasterImage. This may provide an alternative size at which we should rasterize the SVG instead of the requested size. Since SurfaceCache imposes a maximum size for which it will permit rasterized SVGs, we should also bypass the cache entirely if we are well above that and simply draw directly to the draw target in such cases. With WebRender, it is somewhat more complicated. We will now return NOT_SUPPORTED if the size is too big, and this should trigger fallback to blob images. This should only produce drawing commands for the relevant region and save us the high cost of rasterized a very large surface on the main thread, which at the same time, looking as crisp as a user would expect.
71 lines
2.2 KiB
C++
71 lines
2.2 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_SVGDrawingParameters_h
|
|
#define mozilla_image_SVGDrawingParameters_h
|
|
|
|
#include "gfxContext.h"
|
|
#include "gfxTypes.h"
|
|
#include "ImageRegion.h"
|
|
#include "mozilla/gfx/Point.h"
|
|
#include "mozilla/gfx/Types.h"
|
|
#include "mozilla/Maybe.h"
|
|
#include "nsSize.h"
|
|
#include "SVGImageContext.h"
|
|
|
|
namespace mozilla {
|
|
namespace image {
|
|
|
|
struct SVGDrawingParameters
|
|
{
|
|
typedef mozilla::gfx::IntSize IntSize;
|
|
typedef mozilla::gfx::SamplingFilter SamplingFilter;
|
|
|
|
SVGDrawingParameters(gfxContext* aContext,
|
|
const nsIntSize& aRasterSize,
|
|
const nsIntSize& aDrawSize,
|
|
const ImageRegion& aRegion,
|
|
SamplingFilter aSamplingFilter,
|
|
const Maybe<SVGImageContext>& aSVGContext,
|
|
float aAnimationTime,
|
|
uint32_t aFlags,
|
|
float aOpacity)
|
|
: context(aContext)
|
|
, size(aRasterSize)
|
|
, drawSize(aDrawSize)
|
|
, region(aRegion)
|
|
, samplingFilter(aSamplingFilter)
|
|
, svgContext(aSVGContext)
|
|
, viewportSize(aRasterSize)
|
|
, animationTime(aAnimationTime)
|
|
, flags(aFlags)
|
|
, opacity(aOpacity)
|
|
{
|
|
if (aSVGContext) {
|
|
auto sz = aSVGContext->GetViewportSize();
|
|
if (sz) {
|
|
viewportSize = nsIntSize(sz->width, sz->height); // XXX losing unit
|
|
}
|
|
}
|
|
}
|
|
|
|
gfxContext* context;
|
|
IntSize size; // Size to rasterize a surface at.
|
|
IntSize drawSize; // Size to draw the given surface at.
|
|
ImageRegion region;
|
|
SamplingFilter samplingFilter;
|
|
const Maybe<SVGImageContext>& svgContext;
|
|
nsIntSize viewportSize;
|
|
float animationTime;
|
|
uint32_t flags;
|
|
gfxFloat opacity;
|
|
};
|
|
|
|
} // namespace image
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_image_SVGDrawingParameters_h
|
|
|