1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef mozilla_SurfaceFromElementResult_h
8 #define mozilla_SurfaceFromElementResult_h
10 #include "ImageContainer.h"
12 #include "mozilla/gfx/Point.h"
24 class CanvasRenderingContext2D
;
32 struct DirectDrawInfo
{
33 /* imgIContainer to directly draw to a context */
34 nsCOMPtr
<imgIContainer
> mImgContainer
;
35 /* which frame to draw */
37 /* imgIContainer flags to use when drawing */
38 uint32_t mDrawingFlags
;
41 struct SurfaceFromElementResult
{
42 friend class mozilla::dom::CanvasRenderingContext2D
;
43 friend class mozilla::dom::ImageBitmap
;
44 friend class ::nsLayoutUtils
;
46 /* If SFEResult contains a valid surface, it either mLayersImage or
47 * mSourceSurface will be non-null, and GetSourceSurface() will not be null.
49 * For valid surfaces, mSourceSurface may be null if mLayersImage is
50 * non-null, but GetSourceSurface() will create mSourceSurface from
51 * mLayersImage when called.
54 /* Video elements (at least) often are already decoded as layers::Images. */
55 RefPtr
<mozilla::layers::Image
> mLayersImage
;
58 /* GetSourceSurface() fills this and returns its non-null value if this
59 * SFEResult was successful. */
60 RefPtr
<mozilla::gfx::SourceSurface
> mSourceSurface
;
63 /* Contains info for drawing when there is no mSourceSurface. */
64 DirectDrawInfo mDrawInfo
;
66 /* The size of the surface */
67 mozilla::gfx::IntSize mSize
;
68 /* The size the surface is intended to be rendered at */
69 mozilla::gfx::IntSize mIntrinsicSize
;
70 /* The crop rect of the surface, indicating what subset is valid. This will
71 * always be Nothing() unless SFE_ALLOW_UNCROPPED is set. */
72 mozilla::Maybe
<mozilla::gfx::IntRect
> mCropRect
;
73 /* The principal associated with the element whose surface was returned.
74 If there is a surface, this will never be null. */
75 nsCOMPtr
<nsIPrincipal
> mPrincipal
;
76 /* The image request, if the element is an nsIImageLoadingContent */
77 nsCOMPtr
<imgIRequest
> mImageRequest
;
78 /* True if cross-origins redirects have been done in order to load this
80 bool mHadCrossOriginRedirects
;
81 /* Whether the element was "write only", that is, the bits should not be
82 * exposed to content */
84 /* Whether the element was still loading. Some consumers need to handle
85 this case specially. */
87 /* Whether the element has a valid size. */
89 /* Whether the element used CORS when loading. */
92 gfxAlphaType mAlphaType
;
96 SurfaceFromElementResult();
98 // Gets mSourceSurface, or makes a SourceSurface from mLayersImage.
99 const RefPtr
<mozilla::gfx::SourceSurface
>& GetSourceSurface();
102 } // namespace mozilla
104 #endif // mozilla_SurfaceFromElementResult_h