1/* 2 * Copyright (c) 2021-2022 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 GRAPHIC_LITE_CLIP_UTILS_H 17#define GRAPHIC_LITE_CLIP_UTILS_H 18 19#include "gfx_utils/diagram/vertexprimitive/geometry_path_storage.h" 20#include "gfx_utils/geometry2d.h" 21#include "gfx_utils/image_info.h" 22#include "gfx_utils/list.h" 23#include "gfx_utils/vector.h" 24#include "render/render_buffer.h" 25#include "render/render_scanline.h" 26 27namespace OHOS { 28/* 29 * Indicates a path to be cliped. 30 * Note: The path will be automatically closed. Only non-self-intersecting path are supported. 31 */ 32class ClipPath : public HeapBase { 33public: 34 ClipPath() 35 { 36 vertices_ = new UICanvasVertices(); 37 } 38 ~ClipPath() 39 { 40 if (vertices_ != nullptr) { 41 vertices_->FreeAll(); 42 delete vertices_; 43 vertices_ = nullptr; 44 } 45 } 46 47 ClipPath& MoveTo(const PointF& point); 48 ClipPath& LineTo(const PointF& point); 49 ClipPath& CurveTo(const PointF& control1, const PointF& control2, const PointF& end); 50 ClipPath& Arc(const PointF& center, float radius, int16_t startAngle, int16_t endAngle); 51 ClipPath& Circle(const PointF& center, float radius); 52 53 UICanvasVertices& GetVertices() const 54 { 55 return *vertices_; 56 } 57private: 58 UICanvasVertices* vertices_; 59}; 60 61class ClipUtils : public HeapBase { 62public: 63 ClipUtils() {} 64 ~ClipUtils() {} 65 66 void PerformScan(const ClipPath& path, const ImageInfo* imageInfo); 67private: 68 UICanvasVertices& CloseVertices(const ClipPath& path); 69 void DrawPixel(int16_t x, int16_t y, uint8_t opa, const ImageInfo* imageInfo); 70 void DrawHorLine(int16_t x, int16_t y, int16_t width, uint8_t opa, const ImageInfo* imageInfo); 71}; 72}; 73#endif 74