diff --git a/src/lib/sw_engine/tvgSwCommon.h b/src/lib/sw_engine/tvgSwCommon.h index 168a31f9..6f26e8c4 100644 --- a/src/lib/sw_engine/tvgSwCommon.h +++ b/src/lib/sw_engine/tvgSwCommon.h @@ -273,6 +273,7 @@ SwFixed mathDiff(SwFixed angle1, SwFixed angle2); SwFixed mathLength(SwPoint& pt); bool mathSmallCubic(SwPoint* base, SwFixed& angleIn, SwFixed& angleMid, SwFixed& angleOut); SwFixed mathMean(SwFixed angle1, SwFixed angle2); +SwPoint mathTransform(const Point* to, const Matrix* transform); void shapeReset(SwShape* shape); bool shapeGenOutline(SwShape* shape, const Shape* sdata, unsigned tid, const Matrix* transform); @@ -353,14 +354,4 @@ static inline void rasterRGBA32(uint32_t *dst, uint32_t val, uint32_t offset, in #endif } -static inline SwPoint mathTransform(const Point* to, const Matrix* transform) -{ - if (!transform) return {TO_SWCOORD(to->x), TO_SWCOORD(to->y)}; - - auto tx = ((to->x * transform->e11 + to->y * transform->e12 + transform->e13) + 0.5f); - auto ty = ((to->x * transform->e21 + to->y * transform->e22 + transform->e23) + 0.5f); - - return {TO_SWCOORD(tx), TO_SWCOORD(ty)}; -} - #endif /* _TVG_SW_COMMON_H_ */ diff --git a/src/lib/sw_engine/tvgSwMath.cpp b/src/lib/sw_engine/tvgSwMath.cpp index 56ce40fc..3ba1b868 100644 --- a/src/lib/sw_engine/tvgSwMath.cpp +++ b/src/lib/sw_engine/tvgSwMath.cpp @@ -19,6 +19,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ +#include #include "tvgSwCommon.h" @@ -414,4 +415,15 @@ SwFixed mathDiff(SwFixed angle1, SwFixed angle2) if (delta > SW_ANGLE_PI) delta -= SW_ANGLE_2PI; return delta; -} \ No newline at end of file +} + + +SwPoint mathTransform(const Point* to, const Matrix* transform) +{ + if (!transform) return {TO_SWCOORD(to->x), TO_SWCOORD(to->y)}; + + auto tx = round(to->x * transform->e11 + to->y * transform->e12 + transform->e13); + auto ty = round(to->x * transform->e21 + to->y * transform->e22 + transform->e23); + + return {TO_SWCOORD(tx), TO_SWCOORD(ty)}; +}