Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 : * This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #ifndef GFX_WEBRENDERUSERDATA_H
7 : #define GFX_WEBRENDERUSERDATA_H
8 :
9 : #include "mozilla/layers/StackingContextHelper.h"
10 : #include "mozilla/webrender/WebRenderAPI.h"
11 :
12 : class nsDisplayItemGeometry;
13 :
14 : namespace mozilla {
15 : namespace layers {
16 : class ImageClient;
17 : class ImageContainer;
18 : class WebRenderBridgeChild;
19 : class WebRenderImageData;
20 : class WebRenderLayerManager;
21 :
22 : class WebRenderUserData
23 : {
24 : public:
25 0 : NS_INLINE_DECL_REFCOUNTING(WebRenderUserData)
26 :
27 0 : explicit WebRenderUserData(WebRenderLayerManager* aWRManager)
28 0 : : mWRManager(aWRManager)
29 0 : { }
30 :
31 0 : virtual WebRenderImageData* AsImageData() { return nullptr; }
32 :
33 : enum class UserDataType {
34 : eImage,
35 : eFallback,
36 : };
37 :
38 : virtual UserDataType GetType() = 0;
39 :
40 : protected:
41 0 : virtual ~WebRenderUserData() {}
42 :
43 : WebRenderBridgeChild* WrBridge() const;
44 :
45 : WebRenderLayerManager* mWRManager;
46 : };
47 :
48 : class WebRenderImageData : public WebRenderUserData
49 : {
50 : public:
51 : explicit WebRenderImageData(WebRenderLayerManager* aWRManager);
52 : virtual ~WebRenderImageData();
53 :
54 0 : virtual WebRenderImageData* AsImageData() override { return this; }
55 0 : virtual UserDataType GetType() override { return UserDataType::eImage; }
56 0 : static UserDataType Type() { return UserDataType::eImage; }
57 0 : Maybe<wr::ImageKey> GetKey() { return mKey; }
58 0 : void SetKey(const wr::ImageKey& aKey) { mKey = Some(aKey); }
59 : already_AddRefed<ImageClient> GetImageClient();
60 :
61 : Maybe<wr::ImageKey> UpdateImageKey(ImageContainer* aContainer, bool aForceUpdate = false);
62 :
63 : void CreateAsyncImageWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
64 : ImageContainer* aContainer,
65 : const StackingContextHelper& aSc,
66 : const LayerRect& aBounds,
67 : const LayerRect& aSCBounds,
68 : const gfx::Matrix4x4& aSCTransform,
69 : const gfx::MaybeIntSize& aScaleToSize,
70 : const WrImageRendering& aFilter,
71 : const WrMixBlendMode& aMixBlendMode);
72 :
73 : void CreateImageClientIfNeeded();
74 :
75 : protected:
76 : void CreateExternalImageIfNeeded();
77 :
78 : wr::MaybeExternalImageId mExternalImageId;
79 : Maybe<wr::ImageKey> mKey;
80 : RefPtr<ImageClient> mImageClient;
81 : Maybe<wr::PipelineId> mPipelineId;
82 : RefPtr<ImageContainer> mContainer;
83 : };
84 :
85 : class WebRenderFallbackData : public WebRenderImageData
86 : {
87 : public:
88 : explicit WebRenderFallbackData(WebRenderLayerManager* aWRManager);
89 : virtual ~WebRenderFallbackData();
90 :
91 0 : virtual UserDataType GetType() override { return UserDataType::eFallback; }
92 0 : static UserDataType Type() { return UserDataType::eFallback; }
93 : nsAutoPtr<nsDisplayItemGeometry> GetGeometry();
94 : void SetGeometry(nsAutoPtr<nsDisplayItemGeometry> aGeometry);
95 0 : nsRect GetBounds() { return mBounds; }
96 0 : void SetBounds(const nsRect& aRect) { mBounds = aRect; }
97 :
98 : protected:
99 : nsAutoPtr<nsDisplayItemGeometry> mGeometry;
100 : nsRect mBounds;
101 : };
102 :
103 : } // namespace layers
104 : } // namespace mozilla
105 :
106 : #endif /* GFX_WEBRENDERUSERDATA_H */
|