Merge commit '1d638b192417fc3afac05edb4d46305d9e9ad9b3' into new-svg-renderer

This commit is contained in:
Leon Styhre 2022-10-03 17:34:52 +02:00
commit 1b18adee0e
6 changed files with 16 additions and 18 deletions

View file

@ -109,7 +109,6 @@ void LottieView::seek(float pos)
{ {
if (!mRenderDelegate) return; if (!mRenderDelegate) return;
mPos = mapProgress(pos); mPos = mapProgress(pos);
// check if the pos maps to the current frame // check if the pos maps to the current frame

View file

@ -62,12 +62,13 @@ _layout_del_cb(void *data, Evas *, Evas_Object *, void *)
} }
static void static void
_update_frame_info(AppInfo *info, double pos) _update_frame_info(AppInfo *info)
{ {
int frameNo = pos * info->view->getTotalFrame(); long currFrameNo = info->view->mCurFrame;
char buf[64]; long totalFrameNo = info->view->getTotalFrame();
sprintf(buf, "%d / %ld", frameNo, info->view->getTotalFrame()); char buf[64];
sprintf(buf, "%ld (total: %ld)", currFrameNo, totalFrameNo);
elm_object_part_text_set(info->layout, "text", buf); elm_object_part_text_set(info->layout, "text", buf);
} }
@ -96,7 +97,7 @@ _animator_cb(void *data)
if (info && info->autoPlaying && info->view) if (info && info->autoPlaying && info->view)
{ {
float pos = info->view->getPos(); float pos = info->view->getPos();
_update_frame_info(info, pos); _update_frame_info(info);
elm_slider_value_set(info->slider, (double)pos); elm_slider_value_set(info->slider, (double)pos);
evas_object_image_pixels_dirty_set(info->view->getImage(), EINA_TRUE); evas_object_image_pixels_dirty_set(info->view->getImage(), EINA_TRUE);
if (pos >= 1.0) if (pos >= 1.0)
@ -111,20 +112,20 @@ _slider_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
double val = elm_slider_value_get(obj); double val = elm_slider_value_get(obj);
AppInfo *info = (AppInfo *)data; AppInfo *info = (AppInfo *)data;
_update_frame_info(info, val);
if (!info->autoPlaying) if (!info->autoPlaying)
{ {
info->view->seek(val); info->view->seek(val);
evas_object_image_pixels_dirty_set(info->view->getImage(), EINA_TRUE); evas_object_image_pixels_dirty_set(info->view->getImage(), EINA_TRUE);
} }
_update_frame_info(info);
} }
static void static void
_button_clicked_cb(void *data, Evas_Object */*obj*/, void */*event_info*/) _button_clicked_cb(void *data, Evas_Object */*obj*/, void */*event_info*/)
{ {
AppInfo *info = (AppInfo *)data; AppInfo *info = (AppInfo *)data;
if (info->view->getPos() >= 1.0f) info->view->mPos = 0.0f;
_toggle_start_button(info); _toggle_start_button(info);
} }
@ -133,7 +134,6 @@ create_layout(Evas_Object *parent, const char *file)
{ {
Evas_Object *layout, *slider, *image, *button; Evas_Object *layout, *slider, *image, *button;
Ecore_Animator *animator; Ecore_Animator *animator;
char buf[64];
AppInfo *info = (AppInfo *)calloc(sizeof(AppInfo), 1); AppInfo *info = (AppInfo *)calloc(sizeof(AppInfo), 1);
//LAYOUT //LAYOUT
@ -176,10 +176,9 @@ create_layout(Evas_Object *parent, const char *file)
info->animator = animator; info->animator = animator;
evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, (void *)info); evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, (void *)info);
sprintf(buf, "%d / %ld", 0, view->getTotalFrame());
elm_object_part_text_set(layout, "text", buf);
view->seek(0.0); view->seek(0.0);
_update_frame_info(info);
return layout; return layout;
} }

View file

@ -443,7 +443,7 @@ VMatrix renderer::Layer::matrix(int frameNo) const
bool renderer::Layer::visible() const bool renderer::Layer::visible() const
{ {
return (frameNo() >= mLayerData->inFrame() && return (frameNo() >= mLayerData->inFrame() &&
frameNo() < mLayerData->outFrame()); frameNo() <= mLayerData->outFrame());
} }
void renderer::Layer::preprocess(const VRect &clip) void renderer::Layer::preprocess(const VRect &clip)

View file

@ -539,8 +539,8 @@ public:
{ {
return long(frameAtPos(timeInSec / duration())); return long(frameAtPos(timeInSec / duration()));
} }
size_t totalFrame() const { return mEndFrame - mStartFrame; } size_t totalFrame() const { return mEndFrame - mStartFrame + 1; }
long frameDuration() const { return mEndFrame - mStartFrame - 1; } long frameDuration() const { return mEndFrame - mStartFrame; }
float frameRate() const { return mFrameRate; } float frameRate() const { return mFrameRate; }
size_t startFrame() const { return mStartFrame; } size_t startFrame() const { return mStartFrame; }
size_t endFrame() const { return mEndFrame; } size_t endFrame() const { return mEndFrame; }

View file

@ -665,9 +665,9 @@ void LottieParserImpl::parseComposition()
} else if (0 == strcmp(key, "h")) { } else if (0 == strcmp(key, "h")) {
comp->mSize.setHeight(GetInt()); comp->mSize.setHeight(GetInt());
} else if (0 == strcmp(key, "ip")) { } else if (0 == strcmp(key, "ip")) {
comp->mStartFrame = GetDouble(); comp->mStartFrame = std::lround(GetDouble());
} else if (0 == strcmp(key, "op")) { } else if (0 == strcmp(key, "op")) {
comp->mEndFrame = GetDouble(); comp->mEndFrame = std::lround(GetDouble());
} else if (0 == strcmp(key, "fr")) { } else if (0 == strcmp(key, "fr")) {
comp->mFrameRate = GetDouble(); comp->mFrameRate = GetDouble();
} else if (0 == strcmp(key, "assets")) { } else if (0 == strcmp(key, "assets")) {