139 lines
3.7 KiB
C
139 lines
3.7 KiB
C
#include "gallery.h"
|
|
|
|
void anim_fold_start(lv_anim_t *a);
|
|
void anim_fold(void *var, int32_t v);
|
|
void anim_fold_end(lv_anim_t *a);
|
|
|
|
#ifdef USE_OPENGL
|
|
static void anim_fold_render(void)
|
|
{
|
|
/* render to screen */
|
|
lv_gl_set_fb(NULL);
|
|
lv_gl_obj_render(obj_fold[0]);
|
|
lv_gl_obj_render(obj_fold[1]);
|
|
lv_gl_obj_render(obj_fold[2]);
|
|
lv_gl_obj_render(obj_fold[3]);
|
|
}
|
|
|
|
void anim_fold_start(lv_anim_t *a)
|
|
{
|
|
SDL_Rect fold_view;
|
|
|
|
printf("%s\n", __func__);
|
|
common_anim_start();
|
|
|
|
// fold_view.w = 480;
|
|
// fold_view.h = 480;
|
|
// fold_view.x = (view.w - fold_view.w) / 2;
|
|
// fold_view.y = view.y + (view.h - fold_view.h) / 2;
|
|
// printf("fold_view %d %d %d %d\n", fold_view.x, fold_view.y,
|
|
// fold_view.w, fold_view.h);
|
|
// lv_gl_obj_set_viewport(NULL, &fold_view);
|
|
|
|
lv_gl_obj_resize(obj_fold[0], NULL);
|
|
lv_gl_obj_reset_points(obj_fold[0]);
|
|
lv_gl_obj_reset_tex_points(obj_fold[0]);
|
|
obj_fold[0]->tp.w /= 2;
|
|
lv_gl_obj_update_vao(obj_fold[0]);
|
|
|
|
lv_gl_obj_resize(obj_fold[1], NULL);
|
|
lv_gl_obj_reset_points(obj_fold[1]);
|
|
lv_gl_obj_reset_tex_points(obj_fold[1]);
|
|
obj_fold[1]->tp.w /= 2;
|
|
obj_fold[1]->tp.x = obj_fold[1]->tp.w;
|
|
lv_gl_obj_update_vao(obj_fold[1]);
|
|
|
|
lv_gl_obj_resize(obj_fold[2], NULL);
|
|
lv_gl_obj_reset_points(obj_fold[2]);
|
|
lv_gl_obj_reset_tex_points(obj_fold[2]);
|
|
obj_fold[2]->tp.w /= 2;
|
|
lv_gl_obj_update_vao(obj_fold[2]);
|
|
|
|
lv_gl_obj_resize(obj_fold[3], NULL);
|
|
lv_gl_obj_reset_points(obj_fold[3]);
|
|
lv_gl_obj_reset_tex_points(obj_fold[3]);
|
|
obj_fold[3]->tp.w /= 2;
|
|
obj_fold[3]->tp.x = obj_fold[3]->tp.w;
|
|
lv_gl_obj_update_vao(obj_fold[3]);
|
|
|
|
lv_gl_set_render_cb(anim_fold_render);
|
|
}
|
|
|
|
void anim_fold(void *var, int32_t v)
|
|
{
|
|
int index = (intptr_t)var;
|
|
float startx;
|
|
float position;
|
|
|
|
lv_slider_set_value(slider, v, LV_ANIM_ON);
|
|
|
|
/* max value is 480, see end_value in fold.h */
|
|
position = (float)v / 480;
|
|
|
|
/* left part of old picture */
|
|
|
|
/*
|
|
* p0 is the bottom left point
|
|
* p2 is the top left point
|
|
* x gose from -1.0(far left) to 0.0(middle)
|
|
*/
|
|
obj_fold[0]->p[0].x = (-1.0 + position) / obj_fold[0]->scale.x;
|
|
obj_fold[0]->p[2].x = (-1.0 + position) / obj_fold[0]->scale.x;
|
|
|
|
/*
|
|
* p1 is the bottom right point
|
|
* p3 is the top right point
|
|
* x is always 0.0(middle)
|
|
* z gose from 0.0 to 0.2
|
|
*/
|
|
obj_fold[0]->p[1].x = 0.0;
|
|
obj_fold[0]->p[1].z = -(position * 0.2);
|
|
obj_fold[0]->p[3].x = 0.0;
|
|
obj_fold[0]->p[3].z = -(position * 0.2);
|
|
lv_gl_obj_update_vao(obj_fold[0]);
|
|
|
|
/* right part of old picture */
|
|
|
|
/*
|
|
* p1 is the bottom right point
|
|
* p3 is the top right point
|
|
* x gose from 1.0(far right) to 0.0(middle)
|
|
*/
|
|
obj_fold[1]->p[1].x = (1.0 - position) / obj_fold[1]->scale.x;
|
|
obj_fold[1]->p[3].x = (1.0 - position) / obj_fold[1]->scale.x;
|
|
|
|
/*
|
|
* p0 is the bottom left point
|
|
* p2 is the top left point
|
|
* x is always 0.0(middle)
|
|
* z gose from 0.0 to 0.2
|
|
*/
|
|
obj_fold[1]->p[0].x = 0.0;
|
|
obj_fold[1]->p[0].z = -(position * 0.2);
|
|
obj_fold[1]->p[2].x = 0.0;
|
|
obj_fold[1]->p[2].z = -(position * 0.2);
|
|
lv_gl_obj_update_vao(obj_fold[1]);
|
|
|
|
/*
|
|
* left part of new picture
|
|
* x gose from -1.5(far left minus its width) to -0.5(middle minus its width)
|
|
*/
|
|
obj_fold[2]->move.x = -1.5 + (position * 1.0);
|
|
/*
|
|
* right part of new picture
|
|
* x gose from 1.5(far right plus its width) to 0.5(middle plus its width)
|
|
*/
|
|
obj_fold[3]->move.x = 1.5 - (position * 1.0);
|
|
|
|
lv_obj_invalidate(lv_layer_top());
|
|
}
|
|
|
|
void anim_fold_end(lv_anim_t *a)
|
|
{
|
|
animing = 0;
|
|
lv_slider_set_range(slider, 0, 100);
|
|
lv_slider_set_value(slider, 0, LV_ANIM_ON);
|
|
}
|
|
#endif
|
|
|