From f56a3b791c0f8a229c84fba232b4f35975abc36c Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Mon, 22 Jun 2020 16:44:11 +0900 Subject: [PATCH] comon render: split declaration and body. Change-Id: I39eb1dfb929b7811fab82956aedbb15f001390e7 --- src/lib/meson.build | 3 +- src/lib/tvgCommon.h | 2 +- src/lib/tvgRender.cpp | 109 ++++++++++++++++++++++++++++++++++++++++++ src/lib/tvgRender.h | 81 +++---------------------------- 4 files changed, 118 insertions(+), 77 deletions(-) create mode 100644 src/lib/tvgRender.cpp diff --git a/src/lib/meson.build b/src/lib/meson.build index 32db5f10..96752064 100644 --- a/src/lib/meson.build +++ b/src/lib/meson.build @@ -6,7 +6,7 @@ source_file = [ 'tvgCommon.h', 'tvgLoader.h', 'tvgLoaderMgr.h', - 'tvgRenderCommon.h', + 'tvgRender.h', 'tvgSceneImpl.h', 'tvgShapePath.h', 'tvgShapeImpl.h', @@ -17,6 +17,7 @@ source_file = [ 'tvgLinearGradient.cpp', 'tvgLoaderMgr.cpp', 'tvgRadialGradient.cpp', + 'tvgRender.cpp', 'tvgScene.cpp', 'tvgShape.cpp', 'tvgSwCanvas.cpp', diff --git a/src/lib/tvgCommon.h b/src/lib/tvgCommon.h index d147521b..2b0e9c18 100644 --- a/src/lib/tvgCommon.h +++ b/src/lib/tvgCommon.h @@ -39,7 +39,7 @@ using namespace tvg; #include "tvgLoader.h" #include "tvgLoaderMgr.h" -#include "tvgRenderCommon.h" +#include "tvgRender.h" #include "tvgShapePath.h" #include "tvgShapeImpl.h" #include "tvgSceneImpl.h" diff --git a/src/lib/tvgRender.cpp b/src/lib/tvgRender.cpp new file mode 100644 index 00000000..4b4afc3b --- /dev/null +++ b/src/lib/tvgRender.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#ifndef _TVG_RENDER_CPP_ +#define _TVG_RENDER_CPP_ + +#include "tvgCommon.h" +#include "tvgRender.h" + + +/************************************************************************/ +/* Internal Class Implementation */ +/************************************************************************/ + + +/************************************************************************/ +/* External Class Implementation */ +/************************************************************************/ + +bool RenderTransform::update() +{ + constexpr auto PI = 3.141592f; + + //Init Status + if (fabsf(x) <= FLT_EPSILON && fabsf(y) <= FLT_EPSILON && + fabsf(degree) <= FLT_EPSILON && fabsf(factor - 1) <= FLT_EPSILON) { + return false; + } + + //identity + e11 = 1.0f; + e12 = 0.0f; + e13 = 0.0f; + e21 = 0.0f; + e22 = 1.0f; + e23 = 0.0f; + e31 = 0.0f; + e32 = 0.0f; + e33 = 1.0f; + + //scale + e11 *= factor; + e22 *= factor; + e33 *= factor; + + //rotation + if (fabsf(degree) > FLT_EPSILON) { + auto radian = degree / 180.0f * PI; + auto cosVal = cosf(radian); + auto sinVal = sinf(radian); + + auto t11 = e11 * cosVal + e12 * sinVal; + auto t12 = e11 * -sinVal + e12 * cosVal; + auto t21 = e21 * cosVal + e22 * sinVal; + auto t22 = e21 * -sinVal + e22 * cosVal; + auto t31 = e31 * cosVal + e32 * sinVal; + auto t32 = e31 * -sinVal + e32 * cosVal; + + e11 = t11; + e12 = t12; + e21 = t21; + e22 = t22; + e31 = t31; + e32 = t32; + } + + e31 += x; + e32 += y; + + return true; +} + + +RenderTransform::RenderTransform() +{ +} + + +RenderTransform::RenderTransform(const RenderTransform* lhs, const RenderTransform* rhs) +{ + assert(lhs && rhs); + + auto dx = rhs->x * lhs->factor; + auto dy = rhs->y * lhs->factor; + auto tx = dx * lhs->e11 + dy * lhs->e12 + lhs->e13; + auto ty = dx * lhs->e21 + dy * lhs->e22 + lhs->e23; + + x = lhs->x + tx; + y = lhs->y + ty; + degree = lhs->degree + rhs->degree; + factor = lhs->factor * rhs->factor; + + update(); +} + +#endif //_TVG_RENDER_CPP_ diff --git a/src/lib/tvgRender.h b/src/lib/tvgRender.h index a581067b..74feb778 100644 --- a/src/lib/tvgRender.h +++ b/src/lib/tvgRender.h @@ -14,8 +14,8 @@ * limitations under the License. * */ -#ifndef _TVG_RENDER_COMMON_H_ -#define _TVG_RENDER_COMMON_H_ +#ifndef _TVG_RENDER_H_ +#define _TVG_RENDER_H_ namespace tvg { @@ -42,79 +42,10 @@ struct RenderTransform float degree = 0.0f; //rotation degree float factor = 1.0f; //scale factor - bool update() - { - constexpr auto PI = 3.141592f; + bool update(); - //Init Status - if (fabsf(x) <= FLT_EPSILON && fabsf(y) <= FLT_EPSILON && - fabsf(degree) <= FLT_EPSILON && fabsf(factor - 1) <= FLT_EPSILON) { - return false; - } - - //identity - e11 = 1.0f; - e12 = 0.0f; - e13 = 0.0f; - e21 = 0.0f; - e22 = 1.0f; - e23 = 0.0f; - e31 = 0.0f; - e32 = 0.0f; - e33 = 1.0f; - - //scale - e11 *= factor; - e22 *= factor; - e33 *= factor; - - //rotation - if (fabsf(degree) > FLT_EPSILON) { - auto radian = degree / 180.0f * PI; - auto cosVal = cosf(radian); - auto sinVal = sinf(radian); - - auto t11 = e11 * cosVal + e12 * sinVal; - auto t12 = e11 * -sinVal + e12 * cosVal; - auto t21 = e21 * cosVal + e22 * sinVal; - auto t22 = e21 * -sinVal + e22 * cosVal; - auto t31 = e31 * cosVal + e32 * sinVal; - auto t32 = e31 * -sinVal + e32 * cosVal; - - e11 = t11; - e12 = t12; - e21 = t21; - e22 = t22; - e31 = t31; - e32 = t32; - } - - e31 += x; - e32 += y; - - return true; - } - - RenderTransform() - { - } - - RenderTransform(const RenderTransform* lhs, const RenderTransform* rhs) - { - assert(lhs && rhs); - - auto dx = rhs->x * lhs->factor; - auto dy = rhs->y * lhs->factor; - auto tx = dx * lhs->e11 + dy * lhs->e12 + lhs->e13; - auto ty = dx * lhs->e21 + dy * lhs->e22 + lhs->e23; - - x = lhs->x + tx; - y = lhs->y + ty; - degree = lhs->degree + rhs->degree; - factor = lhs->factor * rhs->factor; - - update(); - } + RenderTransform(); + RenderTransform(const RenderTransform* lhs, const RenderTransform* rhs); }; @@ -190,4 +121,4 @@ struct RenderInitializer } -#endif //_TVG_RENDER_COMMON_H_ +#endif //_TVG_RENDER_H_ \ No newline at end of file