1 /* 2 * Copyright (c) 2021-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 CANVAS_H 17 #define CANVAS_H 18 19 #include <iostream> 20 #include <string> 21 22 #include "drawing/draw/core_canvas.h" 23 24 namespace OHOS { 25 namespace Rosen { 26 namespace Drawing { 27 class Canvas : public CoreCanvas { 28 public: Canvas()29 Canvas() {} Canvas(int32_t width,int32_t height)30 Canvas(int32_t width, int32_t height) : CoreCanvas(width, height) {} 31 32 // constructor adopt a raw canvas ptr, using for ArkUI, should remove after rosen modifier provide drawing Canvas. Canvas(void * rawCanvas)33 explicit Canvas(void* rawCanvas) : CoreCanvas(rawCanvas) {} ~Canvas()34 virtual ~Canvas() {}; 35 36 /* 37 * @brief Restores Canvas Matrix and clip value state to count. 38 * @param count Depth of state stack to restore. 39 */ RestoreToCount(uint32_t count)40 void RestoreToCount(uint32_t count) 41 { 42 for (uint32_t i = this->GetSaveCount(); i > count; i--) { 43 this->Restore(); 44 } 45 } 46 }; 47 48 class AutoCanvasRestore { 49 public: AutoCanvasRestore(Canvas & canvas,bool doSave)50 AutoCanvasRestore(Canvas& canvas, bool doSave) : canvas_(canvas) 51 { 52 saveCount_ = canvas_.GetSaveCount(); 53 if (doSave) { 54 canvas_.Save(); 55 } 56 } ~AutoCanvasRestore()57 ~AutoCanvasRestore() 58 { 59 canvas_.RestoreToCount(saveCount_); 60 } 61 62 AutoCanvasRestore(AutoCanvasRestore&&) = delete; 63 AutoCanvasRestore(const AutoCanvasRestore&) = delete; 64 AutoCanvasRestore& operator=(AutoCanvasRestore&&) = delete; 65 AutoCanvasRestore& operator=(const AutoCanvasRestore&) = delete; 66 67 private: 68 Canvas& canvas_; 69 uint32_t saveCount_; 70 }; 71 } // namespace Drawing 72 } // namespace Rosen 73 } // namespace OHOS 74 #endif 75