8eb4dbb057756d44d1c6d30beab951d0c48c582c
[platform/core/uifw/lottie-player.git] / example / lottieviewtest.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 "evasapp.h"
20 #include "lottieview.h"
21 #include<iostream>
22 #include <dirent.h>
23 #include <stdio.h>
24 using namespace std;
25
26 /*
27  * To check the frame rate with rendermode off run
28  * ECORE_EVAS_FPS_DEBUG=1 ./lottieviewTest --disable-render
29  *
30  * To check the frame rate with  render backend
31  * ECORE_EVAS_FPS_DEBUG=1 ./lottieviewTest
32  *
33  */
34
35 class LottieViewTest
36 {
37 public:
38   LottieViewTest(EvasApp *app, bool renderMode) {
39       mApp = app;
40       mRenderMode = renderMode;
41       ecore_animator_frametime_set(1.0/120.0);
42   }
43
44   void show(int numberOfImage) {
45     auto resource = EvasApp::jsonFiles(std::string(DEMO_DIR));
46
47     if (resource.empty()) return;
48
49     int count = numberOfImage;
50     int colums = (int) ceil(sqrt(count));
51     int offset = 3;
52     int vw = (mApp->width() - (offset * colums))/colums;
53     int vh = vw;
54     int posx = offset;
55     int posy = offset;
56     int resourceSize = resource.size();
57     for (int i = 0 ; i < numberOfImage; i++) {
58         int index = i % resourceSize;
59         std::unique_ptr<LottieView> view(new LottieView(mApp->evas(), mRenderMode));
60         view->setFilePath(resource[index].c_str());
61         view->setPos(posx, posy);
62         view->setSize(vw, vh);
63         view->show();
64         view->play();
65         view->loop(true);
66         //view->setRepeatMode(LottieView::RepeatMode::Reverse);
67
68         posx += vw+offset;
69         if ((mApp->width() - posx) < vw) {
70           posx = offset;
71           posy = posy + vh + offset;
72         }
73         mViews.push_back(std::move(view));
74     }
75   }
76
77   void render() {
78       //auto clock = std::chrono::high_resolution_clock::now();
79       for (auto &i : mViews) {
80           i->render();
81       }
82       //double d = std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now()-clock).count();
83       //printf("total time taken = %f\n", d);
84   }
85
86 public:
87   EvasApp     *mApp;
88   bool         mRenderMode = false;
89   std::vector<std::unique_ptr<LottieView>>   mViews;
90 };
91
92 static void
93 onExitCb(void *data, void *extra)
94 {
95     LottieViewTest *view = (LottieViewTest *)data;
96     delete view;
97 }
98
99 static void
100 onRenderPreCb(void *data, void *extra)
101 {
102     LottieViewTest *view = (LottieViewTest *)data;
103     view->render();
104 }
105
106 int
107 main(int argc, char **argv)
108 {
109    EvasApp *app = new EvasApp(800, 800);
110    app->setup();
111
112    bool renderMode = true;
113    if (argc > 1) {
114        if (!strcmp(argv[1],"--disable-render"))
115            renderMode = false;
116    }
117    LottieViewTest *view = new LottieViewTest(app, renderMode);
118    view->show(250);
119
120    app->addExitCb(onExitCb, view);
121    app->addRenderPreCb(onRenderPreCb, view);
122
123    app->run();
124    delete app;
125    return 0;
126 }
127
128
129
130
131