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_UTILITIES_H 17 #define RENDER_SERVICE_BASE_PROPERTY_RS_PROPERTY_DRAWABLE_UTILITIES_H 18 19 #include "pipeline/rs_paint_filter_canvas.h" 20 #include "property/rs_property_drawable.h" 21 22 namespace OHOS::Rosen { 23 // ============================================================================ 24 // alias (reference or soft link) of another drawable 25 class RSAliasDrawable : public RSPropertyDrawable { 26 public: 27 explicit RSAliasDrawable(RSPropertyDrawableSlot slot); 28 ~RSAliasDrawable() override = default; 29 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 30 31 private: 32 RSPropertyDrawableSlot slot_; 33 }; 34 35 // ============================================================================ 36 // Save and Restore 37 class RSSaveDrawable : public RSPropertyDrawable { 38 public: 39 explicit RSSaveDrawable(std::shared_ptr<uint32_t> content); 40 ~RSSaveDrawable() override = default; 41 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 42 43 private: 44 std::shared_ptr<uint32_t> content_; 45 }; 46 47 class RSRestoreDrawable : public RSPropertyDrawable { 48 public: 49 explicit RSRestoreDrawable(std::shared_ptr<uint32_t> content); 50 ~RSRestoreDrawable() override = default; 51 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 52 53 private: 54 std::shared_ptr<uint32_t> content_; 55 }; 56 57 class RSCustomSaveDrawable : public RSPropertyDrawable { 58 public: 59 explicit RSCustomSaveDrawable( 60 std::shared_ptr<RSPaintFilterCanvas::SaveStatus> content, RSPaintFilterCanvas::SaveType type); 61 ~RSCustomSaveDrawable() override = default; 62 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 63 64 private: 65 std::shared_ptr<RSPaintFilterCanvas::SaveStatus> content_; 66 RSPaintFilterCanvas::SaveType type_; 67 }; 68 69 class RSCustomRestoreDrawable : public RSPropertyDrawable { 70 public: 71 explicit RSCustomRestoreDrawable(std::shared_ptr<RSPaintFilterCanvas::SaveStatus> content); 72 ~RSCustomRestoreDrawable() override = default; 73 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 74 75 private: 76 std::shared_ptr<RSPaintFilterCanvas::SaveStatus> content_; 77 }; 78 79 // ============================================================================ 80 // Alpha 81 class RSAlphaDrawable : public RSPropertyDrawable { 82 public: 83 explicit RSAlphaDrawable(float alpha); 84 ~RSAlphaDrawable() override = default; 85 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 86 87 static RSPropertyDrawable::DrawablePtr Generate(const RSRenderContent& content); 88 89 protected: 90 float alpha_; 91 }; 92 93 class RSAlphaOffscreenDrawable : public RSAlphaDrawable { 94 public: 95 explicit RSAlphaOffscreenDrawable(float alpha); 96 97 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 98 }; 99 100 // ============================================================================ 101 // Adapter for RSRenderModifier 102 class RSModifierDrawable : public RSPropertyDrawable { 103 public: 104 explicit RSModifierDrawable(RSModifierType type); 105 ~RSModifierDrawable() override = default; 106 107 void Draw(const RSRenderContent& content, RSPaintFilterCanvas& canvas) const override; 108 109 private: 110 RSModifierType type_; 111 }; 112 }; // namespace OHOS::Rosen 113 #endif // RENDER_SERVICE_BASE_PROPERTY_RS_PROPERTY_DRAWABLE_UTILITIES_H 114