updated licenses info.
[platform/core/uifw/lottie-player.git] / src / vector / vpathmesure.cpp
1 /* 
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
3  * 
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  * 
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  * 
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #include "vpathmesure.h"
20 #include "vbezier.h"
21 #include "vdasher.h"
22 #include <limits>
23
24 V_BEGIN_NAMESPACE
25
26 /*
27  * start and end value must be normalized to [0 - 1]
28  * Path mesure trims the path from [start --> end]
29  * if start > end it treates as a loop and trims as two segment
30  *  [0-->end] and [start --> 1]
31  */
32 VPath VPathMesure::trim(const VPath &path)
33 {
34     if (vCompare(mStart, mEnd)) return VPath();
35
36     if ((vCompare(mStart, 0.0f) && (vCompare(mEnd, 1.0f))) ||
37         (vCompare(mStart, 1.0f) && (vCompare(mEnd, 0.0f)))) return path;
38
39     float length = path.length();
40
41     if (mStart < mEnd) {
42         float   array[4] = {0.0f, length * mStart, //1st segment
43                             (mEnd - mStart) * length, std::numeric_limits<float>::max(), //2nd segment
44                            };
45         VDasher dasher(array, 4);
46         return dasher.dashed(path);
47     } else {
48         float   array[4] = {length * mEnd, (mStart - mEnd) * length, //1st segment
49                             (1 - mStart) * length, std::numeric_limits<float>::max(), //2nd segment
50                            };
51         VDasher dasher(array, 4);
52         return dasher.dashed(path);
53     }
54 }
55
56 V_END_NAMESPACE