• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef RENDER_SERVICE_BASE_PROPERTY_RS_PROPERTY_DRAWABLE_BOUNDS_GEOMETRY_H
17 #define RENDER_SERVICE_BASE_PROPERTY_RS_PROPERTY_DRAWABLE_BOUNDS_GEOMETRY_H
18 
19 #include <utility>
20 
21 #include "include/core/SkPaint.h"
22 
23 #include "property/rs_property_drawable.h"
24 
25 namespace OHOS::Rosen {
26 class RSSkiaFilter;
27 enum class FilterType;
28 
29 class RSBoundsGeometryDrawable : public RSPropertyDrawable {
30 public:
31     explicit RSBoundsGeometryDrawable() = default;
32     ~RSBoundsGeometryDrawable() override = default;
33     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
34 
35     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
36 };
37 
38 class RSClipBoundsDrawable : public RSPropertyDrawable {
39 public:
40     explicit RSClipBoundsDrawable() = default;
41     ~RSClipBoundsDrawable() override = default;
42     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
43 
44     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
45 };
46 
47 // ============================================================================
48 // PointLight
49 class RSPointLightDrawable : public RSPropertyDrawable {
50 public:
51     explicit RSPointLightDrawable() = default;
52     ~RSPointLightDrawable() override = default;
53     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
54 
55     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
56 };
57 
58 // ============================================================================
59 // Border
60 class RSBorderDrawable : public RSPropertyDrawable {
61 public:
RSBorderDrawable(Drawing::Brush && brush,Drawing::Pen && pen)62     explicit RSBorderDrawable(Drawing::Brush&& brush, Drawing::Pen&& pen)
63         : RSPropertyDrawable(), brush_(std::move(brush)), pen_(std::move(pen))
64     {}
65     ~RSBorderDrawable() override = default;
66     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
67 
68 protected:
69     Drawing::Brush brush_;
70     Drawing::Pen pen_;
71 };
72 
73 class RSBorderDRRectDrawable : public RSBorderDrawable {
74 public:
75     explicit RSBorderDRRectDrawable(Drawing::Brush&& brush, Drawing::Pen&& pen,
76         const RSProperties& properties, const bool& drawBorder);
77     ~RSBorderDRRectDrawable() override = default;
78     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
79     void OnBoundsChange(const RSProperties& properties);
80 
81 private:
82     bool drawBorder_;
83     Drawing::RoundRect inner_;
84     Drawing::RoundRect outer_;
85 };
86 
87 class RSBorderFourLineDrawable : public RSBorderDrawable {
88 public:
89     explicit RSBorderFourLineDrawable(Drawing::Brush&& brush, Drawing::Pen&& pen,
90         const RSProperties& properties, const bool& drawBorder);
91     ~RSBorderFourLineDrawable() override = default;
92     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
93     void OnBoundsChange(const RSProperties& properties);
94 
95 private:
96     bool drawBorder_;
97     RectF rect_;
98 };
99 
100 class RSBorderPathDrawable : public RSBorderDrawable {
101 public:
102     explicit RSBorderPathDrawable(Drawing::Brush&& brush, Drawing::Pen&& pen,
103         const RSProperties& properties, const bool& drawBorder);
104     ~RSBorderPathDrawable() override = default;
105     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
106     void OnBoundsChange(const RSProperties& properties);
107 
108 private:
109     bool drawBorder_;
110     Drawing::Path borderPath_;
111 };
112 
113 class RSBorderFourLineRoundCornerDrawable : public RSBorderDrawable {
114 public:
115     explicit RSBorderFourLineRoundCornerDrawable(Drawing::Brush&& brush, Drawing::Pen&& pen,
116         const RSProperties& properties, const bool& drawBorder);
117     ~RSBorderFourLineRoundCornerDrawable() override = default;
118     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
119     void OnBoundsChange(const RSProperties& properties);
120 
121 private:
122     bool drawBorder_;
123     Drawing::RoundRect innerRrect_;
124     Drawing::RoundRect rrect_;
125 };
126 
127 // ============================================================================
128 // Outline
129 class RSOutlineDrawable : public RSBorderDrawable {
130 public:
RSOutlineDrawable(Drawing::Brush && brush,Drawing::Pen && pen)131     explicit RSOutlineDrawable(Drawing::Brush&& brush, Drawing::Pen&& pen)
132         : RSBorderDrawable(std::move(brush), std::move(pen))
133     {}
134     ~RSOutlineDrawable() override = default;
135     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
136 };
137 
138 // ============================================================================
139 // Mask
140 class RSMaskDrawable : public RSPropertyDrawable {
141 public:
142     explicit RSMaskDrawable(std::shared_ptr<RSMask> mask);
143     ~RSMaskDrawable() override = default;
144     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
145 
146 protected:
147     std::shared_ptr<RSMask> mask_;
148     Drawing::Brush maskFilterBrush_;
149     Drawing::Brush maskBrush_;
150 };
151 
152 class RSSvgDomMaskDrawable : public RSMaskDrawable {
153 public:
154     explicit RSSvgDomMaskDrawable(std::shared_ptr<RSMask> mask);
155     ~RSSvgDomMaskDrawable() override = default;
156     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
157 };
158 
159 class RSSvgPictureMaskDrawable : public RSMaskDrawable {
160 public:
161     explicit RSSvgPictureMaskDrawable(std::shared_ptr<RSMask> mask);
162     ~RSSvgPictureMaskDrawable() override = default;
163     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
164 };
165 
166 class RSGradientMaskDrawable : public RSMaskDrawable {
167 public:
168     explicit RSGradientMaskDrawable(std::shared_ptr<RSMask> mask);
169     ~RSGradientMaskDrawable() override = default;
170     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
171 };
172 
173 class RSPathMaskDrawable : public RSMaskDrawable {
174 public:
175     explicit RSPathMaskDrawable(std::shared_ptr<RSMask> mask);
176     ~RSPathMaskDrawable() override = default;
177     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
178 };
179 
180 class RSPixelMapMaskDrawable : public RSMaskDrawable {
181 public:
182     explicit RSPixelMapMaskDrawable(std::shared_ptr<RSMask> mask);
183     ~RSPixelMapMaskDrawable() override = default;
184     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
185 };
186 
187 // ============================================================================
188 // Shadow
189 class RSShadowBaseDrawable : public RSPropertyDrawable {
190 public:
191     explicit RSShadowBaseDrawable(const RSProperties& properties);
192     ~RSShadowBaseDrawable() override = default;
193     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
194 
195 protected:
196     void ClipShadowPath(const RSRenderContent& content, RSPaintFilterCanvas& canvas, Drawing::Path& path) const;
197     float offsetX_;
198     float offsetY_;
199     const Color color_;
200 };
201 
202 class RSShadowDrawable : public RSShadowBaseDrawable {
203 public:
204     explicit RSShadowDrawable(const RSProperties& properties);
205     ~RSShadowDrawable() override = default;
206     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
207 
208 protected:
209     const float radius_;
210 };
211 
212 class RSColorfulShadowDrawable : public RSShadowBaseDrawable {
213 public:
214     explicit RSColorfulShadowDrawable(const RSProperties& properties);
215     ~RSColorfulShadowDrawable() override = default;
216     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
217 
218 protected:
219     Drawing::Brush blurBrush_;
220     std::weak_ptr<RSRenderNode> node_;
221 };
222 
223 class RSHardwareAccelerationShadowDrawable : public RSShadowBaseDrawable {
224 public:
225     explicit RSHardwareAccelerationShadowDrawable(const RSProperties& properties);
226     ~RSHardwareAccelerationShadowDrawable() override = default;
227     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
228 
229 protected:
230     const float shadowElevation_;
231 };
232 
233 // ============================================================================
234 // DynamicLightUp
235 class RSDynamicLightUpDrawable : public RSPropertyDrawable {
236 public:
237     explicit RSDynamicLightUpDrawable() = default;
238     ~RSDynamicLightUpDrawable() override = default;
239     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
240     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
241     bool Update(const RSRenderContent& content) override;
242 };
243 
244 // ============================================================================
245 // Binarization
246 class RSBinarizationDrawable : public RSPropertyDrawable {
247 public:
248     explicit RSBinarizationDrawable() = default;
249     ~RSBinarizationDrawable() override = default;
250     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
251     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
252 };
253 
254 // ============================================================================
255 // LightUpEffect
256 class RSLightUpEffectDrawable : public RSPropertyDrawable {
257 public:
258     explicit RSLightUpEffectDrawable() = default;
259     ~RSLightUpEffectDrawable() override = default;
260     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
261     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
262     bool Update(const RSRenderContent& content) override;
263 };
264 
265 // ============================================================================
266 // DynamicDim
267 class RSDynamicDimDrawable : public RSPropertyDrawable {
268 public:
269     explicit RSDynamicDimDrawable() = default;
270     ~RSDynamicDimDrawable() override = default;
271     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
272     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& context);
273     bool Update(const RSRenderContent& context) override;
274 };
275 
276 // ============================================================================
277 // BackgroundFilter
278 class RSBackgroundFilterDrawable : public RSPropertyDrawable {
279 public:
280     explicit RSBackgroundFilterDrawable() = default;
281     ~RSBackgroundFilterDrawable() override = default;
282     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
283     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
284     bool Update(const RSRenderContent& content) override;
285 };
286 
287 // CompositingFilter
288 class RSCompositingFilterDrawable : public RSPropertyDrawable {
289 public:
290     explicit RSCompositingFilterDrawable() = default;
291     ~RSCompositingFilterDrawable() override = default;
292     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
293     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
294     bool Update(const RSRenderContent& content) override;
295 };
296 
297 bool IsForegroundFilterValid(const RSRenderContent& content);
298 
299 class RSForegroundFilterDrawable : public RSPropertyDrawable {
300 public:
301     explicit RSForegroundFilterDrawable() = default;
302     ~RSForegroundFilterDrawable() override = default;
303     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
304     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
305     bool Update(const RSRenderContent& content) override;
306 };
307 
308 class RSForegroundFilterRestoreDrawable : public RSPropertyDrawable {
309 public:
310     explicit RSForegroundFilterRestoreDrawable() = default;
311     ~RSForegroundFilterRestoreDrawable() override = default;
312     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
313     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
314     bool Update(const RSRenderContent& content) override;
315 };
316 
317 // EffectDataGenerate
318 class RSEffectDataGenerateDrawable : public RSPropertyDrawable {
319 public:
320     explicit RSEffectDataGenerateDrawable() = default;
321     ~RSEffectDataGenerateDrawable() override = default;
322     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
323     bool Update(const RSRenderContent& content) override;
324 };
325 
326 // RSEffectDataApply
327 class RSEffectDataApplyDrawable : public RSPropertyDrawable {
328 public:
329     explicit RSEffectDataApplyDrawable() = default;
330     ~RSEffectDataApplyDrawable() override = default;
331     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
332     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
333     bool Update(const RSRenderContent& content) override;
334 };
335 
336 // ============================================================================
337 // ForegroundColor
338 class RSForegroundColorDrawable : public RSPropertyDrawable {
339 public:
RSForegroundColorDrawable(Drawing::Brush && brush)340     explicit RSForegroundColorDrawable(Drawing::Brush&& brush) : brush_(std::move(brush)) {}
341     ~RSForegroundColorDrawable() override = default;
342     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
343     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
344     bool Update(const RSRenderContent& content) override;
345 
346 private:
347     Drawing::Brush brush_;
348 };
349 
350 // ============================================================================
351 // Particle
352 class RSParticleDrawable : public RSPropertyDrawable {
353 public:
354     explicit RSParticleDrawable() = default;
355     ~RSParticleDrawable() override = default;
356     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
357     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
358     bool Update(const RSRenderContent& content) override;
359 };
360 
361 // ============================================================================
362 // PixelStretch
363 class RSPixelStretchDrawable : public RSPropertyDrawable {
364 public:
365     explicit RSPixelStretchDrawable() = default;
366     ~RSPixelStretchDrawable() override = default;
367 
368     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
369     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
370     bool Update(const RSRenderContent& content) override;
371 };
372 
373 // ============================================================================
374 // Background
375 class RSBackgroundDrawable : public RSPropertyDrawable {
376 public:
377     explicit RSBackgroundDrawable() = default;
378     ~RSBackgroundDrawable() override = default;
379     static void setForceBgAntiAlias(bool antiAlias);
380     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
381 
382 protected:
383     Drawing::Brush brush_;
384 };
385 
386 class RSBackgroundColorDrawable : public RSBackgroundDrawable {
387 public:
RSBackgroundColorDrawable(Drawing::Color color)388     explicit RSBackgroundColorDrawable(Drawing::Color color) : RSBackgroundDrawable()
389     {
390         brush_.SetColor(color);
391     }
392     ~RSBackgroundColorDrawable() override = default;
393     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
394     bool Update(const RSRenderContent& content) override;
395 };
396 
397 class RSBackgroundShaderDrawable : public RSBackgroundDrawable {
398 public:
RSBackgroundShaderDrawable(std::shared_ptr<Drawing::ShaderEffect> filter)399     explicit RSBackgroundShaderDrawable(std::shared_ptr<Drawing::ShaderEffect> filter) : RSBackgroundDrawable()
400     {
401         brush_.SetShaderEffect(std::move(filter));
402     }
403     ~RSBackgroundShaderDrawable() override = default;
404     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
405     bool Update(const RSRenderContent& content) override;
406 };
407 
408 class RSBackgroundImageDrawable : public RSBackgroundDrawable {
409 public:
410     explicit RSBackgroundImageDrawable() = default;
411     ~RSBackgroundImageDrawable() override = default;
412     static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content);
413     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
414     bool Update(const RSRenderContent& content) override;
415 };
416 
417 // blend mode save and restore
418 std::unique_ptr<RSPropertyDrawable> BlendSaveDrawableGenerate(const RSRenderContent& context);
419 std::unique_ptr<RSPropertyDrawable> BlendRestoreDrawableGenerate(const RSRenderContent& context);
420 
421 class RSBlendSaveLayerDrawable : public RSPropertyDrawable {
422 public:
423     explicit RSBlendSaveLayerDrawable(int blendMode);
424     ~RSBlendSaveLayerDrawable() override = default;
425     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
426 
427 private:
428     Drawing::Brush blendBrush_;
429 };
430 
431 class RSBlendFastDrawable : public RSPropertyDrawable {
432 public:
RSBlendFastDrawable(int blendMode)433     explicit RSBlendFastDrawable(int blendMode) : blendMode_(blendMode) {}
434     ~RSBlendFastDrawable() override = default;
435     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
436 
437 private:
438     int blendMode_;
439 };
440 
441 class RSBlendSaveLayerRestoreDrawable : public RSPropertyDrawable {
442 public:
443     explicit RSBlendSaveLayerRestoreDrawable() = default;
444     ~RSBlendSaveLayerRestoreDrawable() override = default;
445     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
446 };
447 
448 class RSBlendFastRestoreDrawable : public RSPropertyDrawable {
449 public:
450     explicit RSBlendFastRestoreDrawable() = default;
451     ~RSBlendFastRestoreDrawable() override = default;
452     void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override;
453 };
454 } // namespace OHOS::Rosen
455 #endif // RENDER_SERVICE_BASE_PROPERTY_RS_PROPERTY_DRAWABLE_BOUNDS_GEOMETRY_H
456