From: Hermet Park Date: Thu, 16 Sep 2021 05:50:33 +0000 (+0900) Subject: tvg_saver: code refactoring X-Git-Tag: submit/tizen/20210916.114427~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=15ac51f6b28f4d819c6f72a181eb563226a73219;p=platform%2Fcore%2Fgraphics%2Ftizenvg.git tvg_saver: code refactoring removed the duplicated given child transform code, no logical changes actually. Change-Id: I70a097cae89150b074fa2e12b1c7175acaf27c89 --- diff --git a/src/savers/tvg/tvgTvgSaver.cpp b/src/savers/tvg/tvgTvgSaver.cpp index a9e9b65..9e8ffe5 100644 --- a/src/savers/tvg/tvgTvgSaver.cpp +++ b/src/savers/tvg/tvgTvgSaver.cpp @@ -57,10 +57,10 @@ static Matrix _multiply(const Matrix* lhs, const Matrix* rhs) } -static void _multiply(Point* pt, const Matrix& transform) +static void _multiply(Point* pt, const Matrix* transform) { - auto tx = pt->x * transform.e11 + pt->y * transform.e12 + transform.e13; - auto ty = pt->x * transform.e21 + pt->y * transform.e22 + transform.e23; + auto tx = pt->x * transform->e11 + pt->y * transform->e12 + transform->e13; + auto ty = pt->x * transform->e21 + pt->y * transform->e22 + transform->e23; pt->x = tx; pt->y = ty; } @@ -303,12 +303,12 @@ TvgBinCounter TvgSaver::writeTagProperty(TvgBinTag tag, TvgBinCounter cnt, const } -TvgBinCounter TvgSaver::writeTransform(const Matrix& transform) +TvgBinCounter TvgSaver::writeTransform(const Matrix* transform) { - if (fabs(transform.e11 - 1) > FLT_EPSILON || fabs(transform.e12) > FLT_EPSILON || fabs(transform.e13) > FLT_EPSILON || - fabs(transform.e21) > FLT_EPSILON || fabs(transform.e22 - 1) > FLT_EPSILON || fabs(transform.e23) > FLT_EPSILON || - fabs(transform.e31) > FLT_EPSILON || fabs(transform.e32) > FLT_EPSILON || fabs(transform.e33 - 1) > FLT_EPSILON) { - return writeTagProperty(TVG_TAG_PAINT_TRANSFORM, SIZE(Matrix), &transform); + if (fabs(transform->e11 - 1) > FLT_EPSILON || fabs(transform->e12) > FLT_EPSILON || fabs(transform->e13) > FLT_EPSILON || + fabs(transform->e21) > FLT_EPSILON || fabs(transform->e22 - 1) > FLT_EPSILON || fabs(transform->e23) > FLT_EPSILON || + fabs(transform->e31) > FLT_EPSILON || fabs(transform->e32) > FLT_EPSILON || fabs(transform->e33 - 1) > FLT_EPSILON) { + return writeTagProperty(TVG_TAG_PAINT_TRANSFORM, SIZE(Matrix), transform); } return 0; } @@ -363,17 +363,14 @@ TvgBinCounter TvgSaver::serializeChild(const Paint* parent, const Paint* child, } -TvgBinCounter TvgSaver::serializeScene(const Scene* scene, const Matrix* pTransform) +TvgBinCounter TvgSaver::serializeScene(const Scene* scene, const Matrix* pTransform, const Matrix* cTransform) { auto it = this->iterator(scene); if (it->count() == 0) return 0; - auto transform = const_cast(scene)->transform(); - if (pTransform) transform = _multiply(pTransform, &transform); - //Case - Only Child: Skip saving this scene. if (it->count() == 1) { - auto cnt = serializeChild(scene, it->next(), &transform); + auto cnt = serializeChild(scene, it->next(), cTransform); if (cnt > 0) { delete(it); return cnt; @@ -384,14 +381,14 @@ TvgBinCounter TvgSaver::serializeScene(const Scene* scene, const Matrix* pTransf //Case - Delegator Scene: This scene is just a delegator, we can skip this: if (scene->composite(nullptr) == CompositeMethod::None && scene->opacity() == 255) { - return serializeChildren(it, &transform, false); + return serializeChildren(it, cTransform, false); } //Case - Serialize Scene & its children writeTag(TVG_TAG_CLASS_SCENE); reserveCount(); - auto cnt = serializeChildren(it, &transform, true) + serializePaint(scene, pTransform); + auto cnt = serializeChildren(it, cTransform, true) + serializePaint(scene, pTransform); delete(it); @@ -481,7 +478,7 @@ TvgBinCounter TvgSaver::serializeStroke(const Shape* shape, const Matrix* pTrans } -TvgBinCounter TvgSaver::serializePath(const Shape* shape, const Matrix& transform, bool preTransform) +TvgBinCounter TvgSaver::serializePath(const Shape* shape, const Matrix* transform, bool preTransform) { const PathCommand* cmds = nullptr; auto cmdCnt = shape->pathCommands(&cmds); @@ -506,9 +503,9 @@ TvgBinCounter TvgSaver::serializePath(const Shape* shape, const Matrix& transfor //transform? if (preTransform) { - if (fabs(transform.e11 - 1) > FLT_EPSILON || fabs(transform.e12) > FLT_EPSILON || fabs(transform.e13) > FLT_EPSILON || - fabs(transform.e21) > FLT_EPSILON || fabs(transform.e22 - 1) > FLT_EPSILON || fabs(transform.e23) > FLT_EPSILON || - fabs(transform.e31) > FLT_EPSILON || fabs(transform.e32) > FLT_EPSILON || fabs(transform.e33 - 1) > FLT_EPSILON) { + if (fabs(transform->e11 - 1) > FLT_EPSILON || fabs(transform->e12) > FLT_EPSILON || fabs(transform->e13) > FLT_EPSILON || + fabs(transform->e21) > FLT_EPSILON || fabs(transform->e22 - 1) > FLT_EPSILON || fabs(transform->e23) > FLT_EPSILON || + fabs(transform->e31) > FLT_EPSILON || fabs(transform->e32) > FLT_EPSILON || fabs(transform->e33 - 1) > FLT_EPSILON) { auto p = const_cast(pts); for (uint32_t i = 0; i < ptsCnt; ++i) _multiply(p++, transform); } @@ -522,15 +519,12 @@ TvgBinCounter TvgSaver::serializePath(const Shape* shape, const Matrix& transfor } -TvgBinCounter TvgSaver::serializeShape(const Shape* shape, const Matrix* pTransform) +TvgBinCounter TvgSaver::serializeShape(const Shape* shape, const Matrix* pTransform, const Matrix* cTransform) { writeTag(TVG_TAG_CLASS_SHAPE); reserveCount(); TvgBinCounter cnt = 0; - auto transform = const_cast(shape)->transform(); - if (pTransform) transform = _multiply(pTransform, &transform); - //fill rule if (auto flag = static_cast(shape->fillRule())) { cnt = writeTagProperty(TVG_TAG_SHAPE_FILLRULE, SIZE(TvgBinFlag), &flag); @@ -555,14 +549,14 @@ TvgBinCounter TvgSaver::serializeShape(const Shape* shape, const Matrix* pTransf shape->strokeColor(color, color + 1, color + 2, color + 3); auto fill = shape->strokeFill(); if (fill || color[3] > 0) { - if (fill || abs(transform.e11 - transform.e22) > FLT_EPSILON || shape->strokeDash(nullptr) > 0) preTransform = false; - cnt += serializeStroke(shape, &transform, preTransform); + if (fill || abs(cTransform->e11 - cTransform->e22) > FLT_EPSILON || shape->strokeDash(nullptr) > 0) preTransform = false; + cnt += serializeStroke(shape, cTransform, preTransform); } } - cnt += serializePath(shape, transform, preTransform); + cnt += serializePath(shape, cTransform, preTransform); - if (!preTransform) cnt += writeTransform(transform); + if (!preTransform) cnt += writeTransform(cTransform); cnt += serializePaint(shape, pTransform); writeReservedCount(cnt); @@ -572,17 +566,13 @@ TvgBinCounter TvgSaver::serializeShape(const Shape* shape, const Matrix* pTransf /* Picture has either a vector scene or a bitmap. */ -TvgBinCounter TvgSaver::serializePicture(const Picture* picture, const Matrix* pTransform) +TvgBinCounter TvgSaver::serializePicture(const Picture* picture, const Matrix* pTransform, const Matrix* cTransform) { - //transform - auto transform = const_cast(picture)->transform(); - if (pTransform) transform = _multiply(pTransform, &transform); - auto it = this->iterator(picture); //Case - Vector Scene: if (it->count() == 1) { - auto cnt = serializeChild(picture, it->next(), &transform); + auto cnt = serializeChild(picture, it->next(), cTransform); //Only child, Skip to save Picture... if (cnt > 0) { delete(it); @@ -592,7 +582,7 @@ TvgBinCounter TvgSaver::serializePicture(const Picture* picture, const Matrix* p } else { writeTag(TVG_TAG_CLASS_SCENE); reserveCount(); - auto cnt = serializeChildren(it, &transform, true) + serializePaint(picture, pTransform); + auto cnt = serializeChildren(it, cTransform, true) + serializePaint(picture, pTransform); writeReservedCount(cnt); delete(it); return SERIAL_DONE(cnt); @@ -621,7 +611,7 @@ TvgBinCounter TvgSaver::serializePicture(const Picture* picture, const Matrix* p cnt += SIZE(TvgBinTag) + SIZE(TvgBinCounter); //Bitmap picture needs the transform info. - cnt += writeTransform(transform); + cnt += writeTransform(cTransform); cnt += serializePaint(picture, pTransform); @@ -691,10 +681,13 @@ TvgBinCounter TvgSaver::serialize(const Paint* paint, const Matrix* pTransform, //Invisible paint, no point to save it if the paint is not the composition target... if (!compTarget && paint->opacity() == 0) return 0; + auto transform = const_cast(paint)->transform(); + if (pTransform) transform = _multiply(pTransform, &transform); + switch (paint->id()) { - case TVG_CLASS_ID_SHAPE: return serializeShape(static_cast(paint), pTransform); - case TVG_CLASS_ID_SCENE: return serializeScene(static_cast(paint), pTransform); - case TVG_CLASS_ID_PICTURE: return serializePicture(static_cast(paint), pTransform); + case TVG_CLASS_ID_SHAPE: return serializeShape(static_cast(paint), pTransform, &transform); + case TVG_CLASS_ID_SCENE: return serializeScene(static_cast(paint), pTransform, &transform); + case TVG_CLASS_ID_PICTURE: return serializePicture(static_cast(paint), pTransform, &transform); } return 0; @@ -744,6 +737,7 @@ bool TvgSaver::save(Paint* paint, const string& path, bool compress) if (!this->path) return false; paint->bounds(nullptr, nullptr, &vsize[0], &vsize[1]); + if (vsize[0] <= FLT_EPSILON || vsize[1] <= FLT_EPSILON) { TVGLOG("TVG_SAVER", "Saving paint(%p) has zero view size.", paint); return false; diff --git a/src/savers/tvg/tvgTvgSaver.h b/src/savers/tvg/tvgTvgSaver.h index db37c66..d92f7bc 100644 --- a/src/savers/tvg/tvgTvgSaver.h +++ b/src/savers/tvg/tvgTvgSaver.h @@ -50,16 +50,16 @@ private: void writeReservedCount(TvgBinCounter cnt); TvgBinCounter writeData(const void* data, TvgBinCounter cnt); TvgBinCounter writeTagProperty(TvgBinTag tag, TvgBinCounter cnt, const void* data); - TvgBinCounter writeTransform(const Matrix& transform); + TvgBinCounter writeTransform(const Matrix* transform); TvgBinCounter serialize(const Paint* paint, const Matrix* pTransform, bool compTarget = false); - TvgBinCounter serializeScene(const Scene* scene, const Matrix* pTransform); - TvgBinCounter serializeShape(const Shape* shape, const Matrix* pTransform); - TvgBinCounter serializePicture(const Picture* picture, const Matrix* pTransform); + TvgBinCounter serializeScene(const Scene* scene, const Matrix* pTransform, const Matrix* cTransform); + TvgBinCounter serializeShape(const Shape* shape, const Matrix* pTransform, const Matrix* cTransform); + TvgBinCounter serializePicture(const Picture* picture, const Matrix* pTransform, const Matrix* cTransform); TvgBinCounter serializePaint(const Paint* paint, const Matrix* pTransform); TvgBinCounter serializeFill(const Fill* fill, TvgBinTag tag); TvgBinCounter serializeStroke(const Shape* shape, const Matrix* pTransform, bool preTransform); - TvgBinCounter serializePath(const Shape* shape, const Matrix& transform, bool preTransform); + TvgBinCounter serializePath(const Shape* shape, const Matrix* transform, bool preTransform); TvgBinCounter serializeComposite(const Paint* cmpTarget, CompositeMethod cmpMethod, const Matrix* pTransform); TvgBinCounter serializeChildren(Iterator* it, const Matrix* transform, bool reserved); TvgBinCounter serializeChild(const Paint* parent, const Paint* child, const Matrix* pTransform);