2 * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
23 #define TVG_EXPORT __attribute__ ((visibility ("default")))
39 #define _TVG_DECLARE_PRIVATE(A) \
42 std::unique_ptr<Impl> pImpl; \
43 A(const A&) = delete; \
44 const A& operator=(const A&) = delete; \
47 #define _TVG_DISABLE_CTOR(A) \
51 #define _TVG_DECLARE_ACCESSOR(A) \
54 #define _TVG_DECALRE_IDENTIFIER() \
55 auto id() const { return _id; } \
67 enum class TVG_EXPORT Result { Success = 0, InvalidArguments, InsufficientCondition, FailedAllocation, MemoryCorruption, NonSupport, Unknown };
68 enum class TVG_EXPORT PathCommand { Close = 0, MoveTo, LineTo, CubicTo };
69 enum class TVG_EXPORT StrokeCap { Square = 0, Round, Butt };
70 enum class TVG_EXPORT StrokeJoin { Bevel = 0, Round, Miter };
71 enum class TVG_EXPORT FillSpread { Pad = 0, Reflect, Repeat };
72 enum class TVG_EXPORT CanvasEngine { Sw = 0, Gl };
94 * @brief description...
97 class TVG_EXPORT Paint
102 _TVG_DECALRE_IDENTIFIER();
111 * @brief description...
114 class TVG_EXPORT Fill
125 Result colorStops(const ColorStop* colorStops, uint32_t cnt) noexcept;
126 Result spread(FillSpread s) noexcept;
128 uint32_t colorStops(const ColorStop** colorStops) const noexcept;
129 FillSpread spread() const noexcept;
131 _TVG_DECALRE_IDENTIFIER();
132 _TVG_DECLARE_PRIVATE(Fill);
141 * @brief description...
144 class TVG_EXPORT Canvas
147 Canvas(RenderMethod*);
150 Result reserve(uint32_t n) noexcept;
151 virtual Result push(std::unique_ptr<Paint> paint) noexcept;
152 virtual Result clear() noexcept;
153 virtual Result update() noexcept;
154 virtual Result update(Paint* paint) noexcept;
155 virtual Result draw(bool async = true) noexcept;
156 virtual Result sync() noexcept;
158 _TVG_DECLARE_ACCESSOR(Scene);
159 _TVG_DECLARE_PRIVATE(Canvas);
165 * @class LinearGradient
169 * @brief description...
172 class TVG_EXPORT LinearGradient final : public Fill
177 Result linear(float x1, float y1, float x2, float y2) noexcept;
178 Result linear(float* x1, float* y1, float* x2, float* y2) const noexcept;
180 static std::unique_ptr<LinearGradient> gen() noexcept;
182 _TVG_DECLARE_PRIVATE(LinearGradient);
187 * @class RadialGradient
191 * @brief description...
194 class TVG_EXPORT RadialGradient final : public Fill
199 Result radial(float cx, float cy, float radius) noexcept;
200 Result radial(float* cx, float* cy, float* radius) const noexcept;
202 static std::unique_ptr<RadialGradient> gen() noexcept;
204 _TVG_DECLARE_PRIVATE(RadialGradient);
214 * @brief description...
217 class TVG_EXPORT Shape final : public Paint
222 Result reset() noexcept;
225 Result moveTo(float x, float y) noexcept;
226 Result lineTo(float x, float y) noexcept;
227 Result cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) noexcept;
228 Result close() noexcept;
231 Result appendRect(float x, float y, float w, float h, float cornerRadius) noexcept;
232 Result appendCircle(float cx, float cy, float radiusW, float radiusH) noexcept;
233 Result appendPath(const PathCommand* cmds, uint32_t cmdCnt, const Point* pts, uint32_t ptsCnt) noexcept;
236 Result stroke(float width) noexcept;
237 Result stroke(uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept;
238 Result stroke(const float* dashPattern, uint32_t cnt) noexcept;
239 Result stroke(StrokeCap cap) noexcept;
240 Result stroke(StrokeJoin join) noexcept;
243 Result fill(uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept;
244 Result fill(std::unique_ptr<Fill> f) noexcept;
247 Result rotate(float degree) noexcept;
248 Result scale(float factor) noexcept;
249 Result translate(float x, float y) noexcept;
250 Result transform(const Matrix& m) noexcept;
253 uint32_t pathCommands(const PathCommand** cmds) const noexcept;
254 uint32_t pathCoords(const Point** pts) const noexcept;
255 Result fill(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a) const noexcept;
256 const Fill* fill() const noexcept;
257 Result bounds(float* x, float* y, float* w, float* h) const noexcept;
259 float strokeWidth() const noexcept;
260 Result strokeColor(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a) const noexcept;
261 uint32_t strokeDash(const float** dashPattern) const noexcept;
262 StrokeCap strokeCap() const noexcept;
263 StrokeJoin strokeJoin() const noexcept;
265 static std::unique_ptr<Shape> gen() noexcept;
267 _TVG_DECLARE_PRIVATE(Shape);
268 _TVG_DECLARE_ACCESSOR(Canvas);
269 _TVG_DECLARE_ACCESSOR(Scene);
278 * @brief description...
281 class TVG_EXPORT Scene final : public Paint
286 Result push(std::unique_ptr<Paint> paint) noexcept;
287 Result reserve(uint32_t size) noexcept;
288 Result load(const std::string& path) noexcept;
290 Result rotate(float degree) noexcept;
291 Result scale(float factor) noexcept;
292 Result translate(float x, float y) noexcept;
293 Result transform(const Matrix& m) noexcept;
295 Result bounds(float* x, float* y, float* w, float* h) const noexcept;
297 static std::unique_ptr<Scene> gen() noexcept;
299 _TVG_DECLARE_ACCESSOR(Canvas);
300 _TVG_DECLARE_PRIVATE(Scene);
309 @brief description...
312 class TVG_EXPORT SwCanvas final : public Canvas
317 Result target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) noexcept;
319 static std::unique_ptr<SwCanvas> gen() noexcept;
321 _TVG_DECLARE_PRIVATE(SwCanvas);
330 * @brief description...
333 class TVG_EXPORT GlCanvas final : public Canvas
338 //TODO: Gl Specific methods. Need gl backend configuration methods as well.
339 Result target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) noexcept;
341 static std::unique_ptr<GlCanvas> gen() noexcept;
343 _TVG_DECLARE_PRIVATE(GlCanvas);
352 * @brief description...
355 class TVG_EXPORT Initializer final
370 static Result init(CanvasEngine engine) noexcept;
371 static Result term(CanvasEngine engine) noexcept;
373 _TVG_DISABLE_CTOR(Initializer);