1 /*
2  * Copyright (c) 2020-2021 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_UI_SURFACE_VIEW_H
17 #define GRAPHIC_LITE_UI_SURFACE_VIEW_H
18 
19 /**
20  * @addtogroup UI_Components
21  * @{
22  *
23  * @brief Defines UI components such as buttons, texts, images, lists, and progress bars.
24  *
25  * @since 1.0
26  * @version 1.0
27  */
28 
29 /**
30  * @file ui_surface_view.h
31  *
32  * @brief Declares the surface view that interacts with the multimedia to achieve camera preview and video playback.
33  *
34  * @since 1.0
35  * @version 1.0
36  */
37 
38 #include "components/ui_view.h"
39 #if ENABLE_WINDOW
40 #include "surface.h"
41 
42 #include <string>
43 
44 namespace OHOS {
45 /**
46  * @brief Represents a surface view that interacts with the multimedia to achieve camera preview and video playback.
47  *
48  * @since 1.0
49  * @version 1.0
50  */
51 class UISurfaceView : public UIView {
52 public:
53     /**
54      * @brief A constructor used to create a <b>UISurfaceView</b> instance.
55      *
56      * @since 1.0
57      * @version 1.0
58      */
59     UISurfaceView();
60 
61     /**
62      * @brief A destructor used to delete the <b>UISurfaceView</b> instance.
63      *
64      * @since 1.0
65      * @version 1.0
66      */
67     ~UISurfaceView();
68 
69     /**
70      * @brief Obtains the surface, which should be used together with the camera and video modules.
71      *
72      * @return Returns the surface.
73      * @since 1.0
74      * @version 1.0
75      */
76     Surface* GetSurface() const;
77 
78     /**
79      * @brief Sets the position for this view.
80      *
81      * @param x Indicates the x-coordinate to set.
82      * @param y Indicates the y-coordinate to set.
83      * @since 1.0
84      * @version 1.0
85      */
86     void SetPosition(int16_t x, int16_t y) override;
87 
88     /**
89      * @brief Sets the position and size for this view.
90      *
91      * @param x Indicates the x-coordinate to set.
92      * @param y Indicates the y-coordinate to set.
93      * @param width Indicates the width to set.
94      * @param height Indicates the height to set.
95      * @since 1.0
96      * @version 1.0
97      */
98     void SetPosition(int16_t x, int16_t y, int16_t width, int16_t height) override;
99 
100     /**
101      * @brief Adjusts the size of this view.
102      *
103      * @param width Indicates the new width.
104      * @param height Indicates the new height.
105      * @since 1.0
106      * @version 1.0
107      */
108     void Resize(int16_t width, int16_t height) override;
109 
110     /**
111      * @brief Sets the x-coordinate for this view.
112      *
113      * @param x Indicates the x-coordinate to set.
114      * @since 1.0
115      * @version 1.0
116      */
117     void SetX(int16_t x) override;
118 
119     /**
120      * @brief Sets the y-coordinate for this view.
121      *
122      * @param y Indicates the y-coordinate to set.
123      * @since 1.0
124      * @version 1.0
125      */
126     void SetY(int16_t y) override;
127 
128     /**
129      * @brief Sets the width for this view.
130      *
131      * @param width Indicates the width to set.
132      * @since 1.0
133      * @version 1.0
134      */
135     void SetWidth(int16_t width) override;
136 
137     /**
138      * @brief Sets the height for this view.
139      *
140      * @param height Indicates the height to set.
141      * @since 1.0
142      * @version 1.0
143      */
144     void SetHeight(int16_t height) override;
145 
146     /**
147      * @brief Called before this view is drawn. This function is used to check whether the parent view of this view
148      *        needs to be redrawn so that the drawing process is optimized.
149      *
150      * @param invalidatedArea Indicates the area to draw.
151      * @return Returns <b>true</b> if the parent view needs to be redrawn; returns <b>false</b> otherwise.
152      * @since 1.0
153      * @version 1.0
154      */
155     bool OnPreDraw(Rect& invalidatedArea) const override;
156 
157     /**
158      * @brief Called when this view is drawn.
159      *
160      * @param invalidatedArea Indicates the area to draw.
161      * @since 1.0
162      * @version 1.0
163      */
164     void OnDraw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea) override;
165 
166 private:
167     void Draw(BufferInfo& gfxDstBuffer, const Rect& invalidatedArea);
168 
169     Surface* surface_;
170     const std::string REGION_POSITION_X = "region_position_x";
171     const std::string REGION_POSITION_Y = "region_position_y";
172     const std::string REGION_WIDTH = "region_width";
173     const std::string REGION_HEIGHT = "region_height";
174     const uint8_t DEFAULT_QUEUE_SIZE = 2;
175 };
176 } // namespace OHOS
177 #endif // ENABLE_WINDOW
178 #endif // GRAPHIC_LITE_UI_SURFACE_VIEW_H
179