mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +00:00
comon render: split declaration and body.
Change-Id: I39eb1dfb929b7811fab82956aedbb15f001390e7
This commit is contained in:
parent
538254a32d
commit
f56a3b791c
4 changed files with 118 additions and 77 deletions
|
@ -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',
|
||||||
|
|
|
@ -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
109
src/lib/tvgRender.cpp
Normal 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_
|
|
@ -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_
|
Loading…
Add table
Reference in a new issue