1a3e0fd82Sopenharmony_ci/* 2a3e0fd82Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3a3e0fd82Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4a3e0fd82Sopenharmony_ci * you may not use this file except in compliance with the License. 5a3e0fd82Sopenharmony_ci * You may obtain a copy of the License at 6a3e0fd82Sopenharmony_ci * 7a3e0fd82Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8a3e0fd82Sopenharmony_ci * 9a3e0fd82Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10a3e0fd82Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11a3e0fd82Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a3e0fd82Sopenharmony_ci * See the License for the specific language governing permissions and 13a3e0fd82Sopenharmony_ci * limitations under the License. 14a3e0fd82Sopenharmony_ci */ 15a3e0fd82Sopenharmony_ci 16a3e0fd82Sopenharmony_ci/** 17a3e0fd82Sopenharmony_ci * @file renderer_base.h 18a3e0fd82Sopenharmony_ci * @brief Defines Base renderer 19a3e0fd82Sopenharmony_ci * @since 1.0 20a3e0fd82Sopenharmony_ci * @version 1.0. 21a3e0fd82Sopenharmony_ci */ 22a3e0fd82Sopenharmony_ci 23a3e0fd82Sopenharmony_ci#ifndef GRAPHIC_LITE_RENDER_BASE_H 24a3e0fd82Sopenharmony_ci#define GRAPHIC_LITE_RENDER_BASE_H 25a3e0fd82Sopenharmony_ci 26a3e0fd82Sopenharmony_ci#include "gfx_utils/diagram/common/common_basics.h" 27a3e0fd82Sopenharmony_ci#include "render/render_buffer.h" 28a3e0fd82Sopenharmony_ci#include "render/render_pixfmt_rgba_blend.h" 29a3e0fd82Sopenharmony_ci#include "gfx_utils/color.h" 30a3e0fd82Sopenharmony_cinamespace OHOS { 31a3e0fd82Sopenharmony_ciclass RenderBase { 32a3e0fd82Sopenharmony_cipublic: 33a3e0fd82Sopenharmony_ci RenderBase() : pixfmtType_(nullptr), clipBox_(1, 1, 0, 0) {} 34a3e0fd82Sopenharmony_ci 35a3e0fd82Sopenharmony_ci explicit RenderBase(RenderPixfmtRgbaBlend& ren) 36a3e0fd82Sopenharmony_ci : pixfmtType_(&ren), clipBox_(0, 0, ren.GetWidth() - 1, ren.GetHeight() - 1) {} 37a3e0fd82Sopenharmony_ci 38a3e0fd82Sopenharmony_ci /** 39a3e0fd82Sopenharmony_ci * @brief afferent pixfmt_type param. 40a3e0fd82Sopenharmony_ci */ 41a3e0fd82Sopenharmony_ci void Attach(RenderPixfmtRgbaBlend& ren); 42a3e0fd82Sopenharmony_ci 43a3e0fd82Sopenharmony_ci /** 44a3e0fd82Sopenharmony_ci * @brief Gets the width to render. 45a3e0fd82Sopenharmony_ci */ 46a3e0fd82Sopenharmony_ci uint32_t GetWidth() const 47a3e0fd82Sopenharmony_ci { 48a3e0fd82Sopenharmony_ci return pixfmtType_->GetWidth(); 49a3e0fd82Sopenharmony_ci } 50a3e0fd82Sopenharmony_ci 51a3e0fd82Sopenharmony_ci /** 52a3e0fd82Sopenharmony_ci * @brief Gets the height to render. 53a3e0fd82Sopenharmony_ci */ 54a3e0fd82Sopenharmony_ci uint32_t GetHeight() const 55a3e0fd82Sopenharmony_ci { 56a3e0fd82Sopenharmony_ci return pixfmtType_->GetHeight(); 57a3e0fd82Sopenharmony_ci } 58a3e0fd82Sopenharmony_ci 59a3e0fd82Sopenharmony_ci /** 60a3e0fd82Sopenharmony_ci * @brief ClipBox Sets the size of the clipping box. 61a3e0fd82Sopenharmony_ci * @param x1 rectangular starting point x coordinate. 62a3e0fd82Sopenharmony_ci * @param y1 rectangular starting point y coordinate. 63a3e0fd82Sopenharmony_ci * @param x2 rectangular diagonal x coordinate. 64a3e0fd82Sopenharmony_ci * @param y2 rectangular diagonal y coordinate. 65a3e0fd82Sopenharmony_ci * @return Returns whether the rectangle was created successfully. 66a3e0fd82Sopenharmony_ci */ 67a3e0fd82Sopenharmony_ci bool ClipBox(int32_t x1, int32_t y1, int32_t x2, int32_t y2); 68a3e0fd82Sopenharmony_ci 69a3e0fd82Sopenharmony_ci /** 70a3e0fd82Sopenharmony_ci * @brief ResetClipping Set the size of the clipping box according to the visibility, 71a3e0fd82Sopenharmony_ci * The visibility is set to normal, and the invisibility is set to one pixel. 72a3e0fd82Sopenharmony_ci * @param visibility Visible. 73a3e0fd82Sopenharmony_ci */ 74a3e0fd82Sopenharmony_ci void ResetClipping(bool visibility); 75a3e0fd82Sopenharmony_ci 76a3e0fd82Sopenharmony_ci /** 77a3e0fd82Sopenharmony_ci * @brief ClipBoxNaked Sets the size of the box. 78a3e0fd82Sopenharmony_ci * @param x1 rectangular starting point x coordinate. 79a3e0fd82Sopenharmony_ci * @param y1 rectangular starting point y coordinate. 80a3e0fd82Sopenharmony_ci * @param x2 rectangular starting point x coordinate. 81a3e0fd82Sopenharmony_ci * @param y2 rectangular starting point y coordinate. 82a3e0fd82Sopenharmony_ci */ 83a3e0fd82Sopenharmony_ci void ClipBoxNaked(int32_t x1, int32_t y1, int32_t x2, int32_t y2); 84a3e0fd82Sopenharmony_ci 85a3e0fd82Sopenharmony_ci /** 86a3e0fd82Sopenharmony_ci * @brief inbox determines whether the point (x, y) is within the rectangle. 87a3e0fd82Sopenharmony_ci * @param x coordinate of x point. 88a3e0fd82Sopenharmony_ci * @param y coordinate of y point. 89a3e0fd82Sopenharmony_ci * @return Return whether. 90a3e0fd82Sopenharmony_ci */ 91a3e0fd82Sopenharmony_ci bool Inbox(int32_t x, int32_t y) const 92a3e0fd82Sopenharmony_ci { 93a3e0fd82Sopenharmony_ci return x >= clipBox_.GetLeft() && y >= clipBox_.GetTop() && 94a3e0fd82Sopenharmony_ci x <= clipBox_.GetRight() && y <= clipBox_.GetBottom(); 95a3e0fd82Sopenharmony_ci } 96a3e0fd82Sopenharmony_ci 97a3e0fd82Sopenharmony_ci /** 98a3e0fd82Sopenharmony_ci * @brief GetClipBox Get cut box. 99a3e0fd82Sopenharmony_ci * @return Return to the corresponding box. 100a3e0fd82Sopenharmony_ci */ 101a3e0fd82Sopenharmony_ci const Rect32& GetClipBox() const 102a3e0fd82Sopenharmony_ci { 103a3e0fd82Sopenharmony_ci return clipBox_; 104a3e0fd82Sopenharmony_ci } 105a3e0fd82Sopenharmony_ci 106a3e0fd82Sopenharmony_ci /** 107a3e0fd82Sopenharmony_ci * @return Returns the minimum value of the x-axis of the box. 108a3e0fd82Sopenharmony_ci */ 109a3e0fd82Sopenharmony_ci int32_t GetXMin() const 110a3e0fd82Sopenharmony_ci { 111a3e0fd82Sopenharmony_ci return clipBox_.GetLeft(); 112a3e0fd82Sopenharmony_ci } 113a3e0fd82Sopenharmony_ci 114a3e0fd82Sopenharmony_ci /** 115a3e0fd82Sopenharmony_ci * @return Returns the minimum value of the y-axis of the box. 116a3e0fd82Sopenharmony_ci */ 117a3e0fd82Sopenharmony_ci int32_t GetYMin() const 118a3e0fd82Sopenharmony_ci { 119a3e0fd82Sopenharmony_ci return clipBox_.GetTop(); 120a3e0fd82Sopenharmony_ci } 121a3e0fd82Sopenharmony_ci 122a3e0fd82Sopenharmony_ci /** 123a3e0fd82Sopenharmony_ci * @return Returns the maximum value of the x-axis of the box. 124a3e0fd82Sopenharmony_ci */ 125a3e0fd82Sopenharmony_ci int32_t GetXMax() const 126a3e0fd82Sopenharmony_ci { 127a3e0fd82Sopenharmony_ci return clipBox_.GetRight(); 128a3e0fd82Sopenharmony_ci } 129a3e0fd82Sopenharmony_ci 130a3e0fd82Sopenharmony_ci /** 131a3e0fd82Sopenharmony_ci * @return Returns the maximum value of the Y-axis of the box. 132a3e0fd82Sopenharmony_ci */ 133a3e0fd82Sopenharmony_ci int32_t GetYMax() const 134a3e0fd82Sopenharmony_ci { 135a3e0fd82Sopenharmony_ci return clipBox_.GetBottom(); 136a3e0fd82Sopenharmony_ci } 137a3e0fd82Sopenharmony_ci 138a3e0fd82Sopenharmony_ci /** 139a3e0fd82Sopenharmony_ci * @brief Clear clear the pixels in the rectangle under getwidth() width and getheight() height with color. 140a3e0fd82Sopenharmony_ci * @param color colour. 141a3e0fd82Sopenharmony_ci */ 142a3e0fd82Sopenharmony_ci void Clear(const Rgba8T& color); 143a3e0fd82Sopenharmony_ci 144a3e0fd82Sopenharmony_ci /** 145a3e0fd82Sopenharmony_ci * @brief BlendHLine Render scanlines within a certain range of the X axis on the Y axis. 146a3e0fd82Sopenharmony_ci * @param x1 Scan line left coordinate. 147a3e0fd82Sopenharmony_ci * @param y Scan line Y-axis coordinates. 148a3e0fd82Sopenharmony_ci * @param x2 Scan line right coordinate. 149a3e0fd82Sopenharmony_ci * @param c The color of the rendered scanline. 150a3e0fd82Sopenharmony_ci * @param colors Scan line corresponding color array. 151a3e0fd82Sopenharmony_ci */ 152a3e0fd82Sopenharmony_ci void BlendHLine(int32_t x1, int32_t y, int32_t x2, const Rgba8T& color, uint8_t cover); 153a3e0fd82Sopenharmony_ci 154a3e0fd82Sopenharmony_ci /** 155a3e0fd82Sopenharmony_ci * @brief BlendSolidHSpan Renders a scan line of a solid line within a certain range of the Y axis. 156a3e0fd82Sopenharmony_ci * @param x scan line X-axis start coordinate. 157a3e0fd82Sopenharmony_ci * @param y scan line Y-axis start coordinate. 158a3e0fd82Sopenharmony_ci * @param len Scan line length. 159a3e0fd82Sopenharmony_ci * @param c The color of the rendered scanline. 160a3e0fd82Sopenharmony_ci * @param colors Scan line corresponding color array. 161a3e0fd82Sopenharmony_ci */ 162a3e0fd82Sopenharmony_ci void BlendSolidHSpan(int32_t x, int32_t y, int32_t len, const Rgba8T& color, const uint8_t* covers); 163a3e0fd82Sopenharmony_ci 164a3e0fd82Sopenharmony_ci /** 165a3e0fd82Sopenharmony_ci * @brief CopyColorHSpan Copy colors within a certain Y-axis range 166a3e0fd82Sopenharmony_ci * @param x Scan line X-axis start coordinate 167a3e0fd82Sopenharmony_ci * @param y Scan line Y-axis start coordinate 168a3e0fd82Sopenharmony_ci * @param len Scan line length. 169a3e0fd82Sopenharmony_ci * @param colors Scan line corresponding color array. 170a3e0fd82Sopenharmony_ci */ 171a3e0fd82Sopenharmony_ci void CopyColorHSpan(int32_t x, int32_t y, int32_t len, const Rgba8T* colors); 172a3e0fd82Sopenharmony_ci 173a3e0fd82Sopenharmony_ci /** 174a3e0fd82Sopenharmony_ci * @brief BlendColorHSpan Mix colors within a certain height. 175a3e0fd82Sopenharmony_ci * @param x Scan line X-axis start coordinate 176a3e0fd82Sopenharmony_ci * @param y Scan line Y-axis start coordinate 177a3e0fd82Sopenharmony_ci * @param len Scan line length. 178a3e0fd82Sopenharmony_ci * @param colors Scan line corresponding color array. 179a3e0fd82Sopenharmony_ci * @param covers Scan line corresponding coverage array. 180a3e0fd82Sopenharmony_ci * @param cover Coverage 181a3e0fd82Sopenharmony_ci */ 182a3e0fd82Sopenharmony_ci void BlendColorHSpan(int32_t x, int32_t y, int32_t len, const Rgba8T* colors, const uint8_t* covers, 183a3e0fd82Sopenharmony_ci uint8_t cover = COVER_FULL); 184a3e0fd82Sopenharmony_ci 185a3e0fd82Sopenharmony_ci /** 186a3e0fd82Sopenharmony_ci * @brief ColorHSpanHandler Handle ColorHSpan params. 187a3e0fd82Sopenharmony_ci * @param x Scan line X-axis start coordinate 188a3e0fd82Sopenharmony_ci * @param y Scan line Y-axis start coordinate 189a3e0fd82Sopenharmony_ci * @param len Scan line length. 190a3e0fd82Sopenharmony_ci * @param colors Scan line corresponding color array. 191a3e0fd82Sopenharmony_ci * @param covers Scan line corresponding coverage array. 192a3e0fd82Sopenharmony_ci * @return Returns true if should run the follow programs. 193a3e0fd82Sopenharmony_ci */ 194a3e0fd82Sopenharmony_ci bool ColorHSpanHandler(int32_t& x, const int32_t& y, int32_t& len, const Rgba8T*& colors, 195a3e0fd82Sopenharmony_ci const uint8_t*& covers) const; 196a3e0fd82Sopenharmony_ci 197a3e0fd82Sopenharmony_ciprivate: 198a3e0fd82Sopenharmony_ci RenderPixfmtRgbaBlend* pixfmtType_; 199a3e0fd82Sopenharmony_ci Rect32 clipBox_; 200a3e0fd82Sopenharmony_ci}; 201a3e0fd82Sopenharmony_ci} // namespace OHOS 202a3e0fd82Sopenharmony_ci#endif 203