lottie_animation_prepare_frame(lot_anim, frame_num, vfd->view_box.w, vfd->view_box.h);
int size = lottie_animation_get_node_count(lot_anim);
- //ERR("data json vfd = %p, lot_anim = %p, size = %d, root(%p) viewbox(%d %d %d %d) progress(%f)", vfd, lot_anim, size, root, vfd->view_box.x, vfd->view_box.y, vfd->view_box.w, vfd->view_box.h, progress);
-
//Construct vg tree
for (int i = 0; i < size; i++)
{
if (!p) continue;
#ifdef PRINT_LOTTIE_INFO
- ERR("%f[%d] node(%p)", progress, i, p);
+ ERR("%d[%d] node(%p)", frame_num, i, p);
ERR("\t Flag - None(%d), Path(%d), Paint(%d), All(%d)", p->mFlag&ChangeFlagNone, p->mFlag&ChangeFlagPath, p->mFlag&ChangeFlagPaint, p->mFlag&ChangeFlagAll);
- ERR("\t BrushType - mType(%d)", p->mType);
+ ERR("\t BrushType - mType(%d)", p->mBrushType);
ERR("\t FillRule - mFillRule(%d)", p->mFillRule);
ERR("\t PathData - ptPtr(%p), ptCount(%d), elmPtr(%p), elmCount(%d)", p->mPath.ptPtr, p->mPath.ptCount, p->mPath.elmPtr, p->mPath.elmCount);
ERR("\t Color - r(%d) g(%d) b(%d) a(%d)", p->mColor.r, p->mColor.g, p->mColor.b, p->mColor.a);
ERR("\t Stroke - enable(%d), width(%d), cap(%d), join(%d), meterLimit(%d), dashArray(%p), dashArraySize(%d)", p->mStroke.enable, p->mStroke.width, p->mStroke.cap, p->mStroke.join, p->mStroke.meterLimit, p->mStroke.dashArray, p->mStroke.dashArraySize);
- ERR("\t Gradient - type(%d), start(%f %f), end(%f %f), center(%f %f), focal(%f %f), center_radius(%f) focal_radius(%f)", p->mGradient.type, p->mGradient.start.x, p->mGradient.start.y, p->mGradient.end.x, p->mGradient.end.y, p->mGradient.center.x, p->mGradient.center.y, p->mGradient.focal.x, p->mGradient.focal.y, p->mGradient.cradius, p->mGradient.fradius);
+ ERR("\t Gradient - type(%d), stopCnt(%d) start(%f %f), end(%f %f), center(%f %f), focal(%f %f), center_radius(%f) focal_radius(%f)", p->mGradient.type, p->mGradient.stopCount, p->mGradient.start.x, p->mGradient.start.y, p->mGradient.end.x, p->mGradient.end.y, p->mGradient.center.x, p->mGradient.center.y, p->mGradient.focal.x, p->mGradient.focal.y, p->mGradient.cradius, p->mGradient.fradius);
ERR("\n");
#endif
Efl_VG* shape = evas_vg_shape_add(root);
if (!shape) continue;
+ //0: Path
const float *data = p->mPath.ptPtr;
if (!data) continue;
{
switch (p->mPath.elmPtr[i])
{
- case 0: //moveTo
+ case 0:
evas_vg_shape_append_move_to(shape, data[0], data[1]);
data += 2;
break;
evas_vg_shape_append_close(shape);
break;
default:
- ERR("What Path Type? = %d", p->mPath.elmPtr[i]);
+ ERR("No reserved path type = %d", p->mPath.elmPtr[i]);
}
}
+ //1: Stroke
if (p->mStroke.enable)
- evas_vg_shape_stroke_width_set(shape, p->mStroke.width);
+ {
+ //Stroke Width
+ evas_vg_shape_stroke_width_set(shape, p->mStroke.width);
+
+ //Stroke Cap
+ Efl_Gfx_Cap cap;
+ switch (p->mStroke.cap)
+ {
+ case CapFlat: cap = EFL_GFX_CAP_BUTT; break;
+ case CapSquare: cap = EFL_GFX_CAP_SQUARE; break;
+ case CapRound: cap = EFL_GFX_CAP_ROUND; break;
+ default: cap = EFL_GFX_CAP_BUTT; break;
+ }
+ evas_vg_shape_stroke_cap_set(shape, cap);
- if (p->mType == BrushSolid)
+ //Fill
+
+ }
+
+ //2: fill
+ switch (p->mBrushType)
{
- int r = p->mColor.r * (p->mColor.a/255);
- int g = p->mColor.g * (p->mColor.a/255);
- int b = p->mColor.g * (p->mColor.a/255);
- int a = p->mColor.a;
- if (p->mStroke.enable)
- evas_vg_shape_stroke_color_set(shape, r, g, b, a);
- else
- evas_vg_node_color_set(shape, r, g, b, a);
+ case BrushSolid:
+ {
+ float pa = ((float)p->mColor.a) / 255;
+ int r = (int)(((float) p->mColor.r) * pa);
+ int g = (int)(((float) p->mColor.g) * pa);
+ int b = (int)(((float) p->mColor.g) * pa);
+ int a = p->mColor.a;
+ if (p->mStroke.enable)
+ evas_vg_shape_stroke_color_set(shape, r, g, b, a);
+ else
+ evas_vg_node_color_set(shape, r, g, b, a);
+ }
+ break;
+ case BrushGradient:
+ {
+ if (p->mGradient.type == GradientLinear)
+ {
+ Efl_VG* grad = evas_vg_gradient_linear_add(root);
+ evas_vg_gradient_linear_start_set(grad, p->mGradient.start.x, p->mGradient.start.y);
+ evas_vg_gradient_linear_end_set(grad, p->mGradient.end.x, p->mGradient.end.y);
+
+ //Gradient Stop
+ Efl_Gfx_Gradient_Stop* stops = malloc(sizeof(Efl_Gfx_Gradient_Stop) * p->mGradient.stopCount);
+ if (stops)
+ {
+ for (unsigned int i = 0; i < p->mGradient.stopCount; i++)
+ {
+ stops[i].offset = p->mGradient.stopPtr[i].pos;
+ float pa = ((float)p->mGradient.stopPtr[i].a) / 255;
+ stops[i].r = (int)(((float)p->mGradient.stopPtr[i].r) * pa);
+ stops[i].g = (int)(((float)p->mGradient.stopPtr[i].g) * pa);
+ stops[i].b = (int)(((float)p->mGradient.stopPtr[i].b) * pa);
+ stops[i].a = p->mGradient.stopPtr[i].a;
+ }
+ evas_vg_gradient_stop_set(grad, stops, p->mGradient.stopCount);
+ free(stops);
+ }
+ if (p->mStroke.enable)
+ evas_vg_shape_stroke_fill_set(shape, grad);
+ else
+ evas_vg_shape_fill_set(shape, grad);
+ }
+ else if (p->mGradient.type == GradientRadial)
+ {
+ //TODO:
+ ERR("Radial Gradient Type isn't implemented yet.");
+ }
+ else
+ ERR("No reserved gradient type = %d", p->mGradient.type);
+ }
+ break;
+ default:
+ ERR("No reserved brush type = %d", p->mBrushType);
}
}
#else