comon render: split declaration and body.

Change-Id: I39eb1dfb929b7811fab82956aedbb15f001390e7
This commit is contained in:
Hermet Park 2020-06-22 16:44:11 +09:00
parent 538254a32d
commit f56a3b791c
4 changed files with 118 additions and 77 deletions

View file

@ -6,7 +6,7 @@ source_file = [
'tvgCommon.h', 'tvgCommon.h',
'tvgLoader.h', 'tvgLoader.h',
'tvgLoaderMgr.h', 'tvgLoaderMgr.h',
'tvgRenderCommon.h', 'tvgRender.h',
'tvgSceneImpl.h', 'tvgSceneImpl.h',
'tvgShapePath.h', 'tvgShapePath.h',
'tvgShapeImpl.h', 'tvgShapeImpl.h',
@ -17,6 +17,7 @@ source_file = [
'tvgLinearGradient.cpp', 'tvgLinearGradient.cpp',
'tvgLoaderMgr.cpp', 'tvgLoaderMgr.cpp',
'tvgRadialGradient.cpp', 'tvgRadialGradient.cpp',
'tvgRender.cpp',
'tvgScene.cpp', 'tvgScene.cpp',
'tvgShape.cpp', 'tvgShape.cpp',
'tvgSwCanvas.cpp', 'tvgSwCanvas.cpp',

View file

@ -39,7 +39,7 @@ using namespace tvg;
#include "tvgLoader.h" #include "tvgLoader.h"
#include "tvgLoaderMgr.h" #include "tvgLoaderMgr.h"
#include "tvgRenderCommon.h" #include "tvgRender.h"
#include "tvgShapePath.h" #include "tvgShapePath.h"
#include "tvgShapeImpl.h" #include "tvgShapeImpl.h"
#include "tvgSceneImpl.h" #include "tvgSceneImpl.h"

109
src/lib/tvgRender.cpp Normal file
View file

@ -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_

View file

@ -14,8 +14,8 @@
* limitations under the License. * limitations under the License.
* *
*/ */
#ifndef _TVG_RENDER_COMMON_H_ #ifndef _TVG_RENDER_H_
#define _TVG_RENDER_COMMON_H_ #define _TVG_RENDER_H_
namespace tvg namespace tvg
{ {
@ -42,79 +42,10 @@ struct RenderTransform
float degree = 0.0f; //rotation degree float degree = 0.0f; //rotation degree
float factor = 1.0f; //scale factor float factor = 1.0f; //scale factor
bool update() bool update();
{
constexpr auto PI = 3.141592f;
//Init Status RenderTransform();
if (fabsf(x) <= FLT_EPSILON && fabsf(y) <= FLT_EPSILON && RenderTransform(const RenderTransform* lhs, const RenderTransform* rhs);
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();
}
}; };
@ -190,4 +121,4 @@ struct RenderInitializer
} }
#endif //_TVG_RENDER_COMMON_H_ #endif //_TVG_RENDER_H_