Skip to content

Commit

Permalink
glw: Add a new experimental throbber
Browse files Browse the repository at this point in the history
  • Loading branch information
andoma committed Feb 23, 2015
1 parent 729e790 commit 2d48f2d
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/ui/glw/glw_renderer.c
Expand Up @@ -84,18 +84,28 @@ glw_renderer_triangle(glw_renderer_t *gr, int element,
}


static uint16_t quadvertices[6] = {
0, 1, 2,
0, 2, 3,
};

/**
*
*/
void
glw_renderer_init_quad(glw_renderer_t *gr)
{
static uint16_t quad[6] = {
0, 1, 2,
0, 2, 3,
};
glw_renderer_init(gr, 4, 2, quadvertices);
}

glw_renderer_init(gr, 4, 2, quad);

/**
*
*/
void
glw_renderer_init_triangle(glw_renderer_t *gr)
{
glw_renderer_init(gr, 3, 1, quadvertices);
}


Expand Down
2 changes: 2 additions & 0 deletions src/ui/glw/glw_renderer.h
Expand Up @@ -136,6 +136,8 @@ void glw_renderer_init(glw_renderer_t *gr, int vertices, int triangles,

void glw_renderer_init_quad(glw_renderer_t *gr);

void glw_renderer_init_triangle(glw_renderer_t *gr);

void glw_renderer_triangle(glw_renderer_t *gr, int element,
uint16_t a, uint16_t b, uint16_t c);

Expand Down
110 changes: 110 additions & 0 deletions src/ui/glw/glw_throbber.c
Expand Up @@ -273,3 +273,113 @@ static glw_class_t glw_throbber = {
};

GLW_REGISTER_CLASS(glw_throbber);





typedef struct glw_throbber_tri {
glw_t w;

float angle;

glw_renderer_t renderer;
int o;
} glw_throbber_tri_t;


/**
*
*/
static void
glw_throbber_tri_layout(glw_t *w, const glw_rctx_t *rc)
{
glw_throbber_tri_t *gt = (glw_throbber_tri_t *)w;
if(w->glw_alpha < 0.01)
return;

glw_need_refresh(w->glw_root, 0);
gt->angle += 0.8;
gt->o++;
}


/**
*
*/
static void
glw_throbber_tri_render(glw_t *w, const glw_rctx_t *rc)
{
glw_throbber_tri_t *gt = (glw_throbber_tri_t *)w;
glw_rctx_t rc0, rc1;
glw_root_t *gr = w->glw_root;
float a0 = w->glw_alpha * rc->rc_alpha;

if(a0 < 0.01)
return;

if(!glw_renderer_initialized(&gt->renderer)) {
glw_renderer_init_triangle(&gt->renderer);

glw_renderer_vtx_pos(&gt->renderer, 0, -0.866, -1, 0);
glw_renderer_vtx_col(&gt->renderer, 0, 0.20, 0.25, 0.81, 1);
glw_renderer_vtx_pos(&gt->renderer, 1, 0.886, 0, 0);
glw_renderer_vtx_col(&gt->renderer, 1, 0.19, 0.39, 0.90, 1);
glw_renderer_vtx_pos(&gt->renderer, 2, -0.866, 1, 0);
glw_renderer_vtx_col(&gt->renderer, 2, 0.28, 0.58, 0.90, 1);
}

rc0 = *rc;
glw_scale_to_aspect(&rc0, 1.0);

glw_Rotatef(&rc0, gt->angle / 3, 0, 0, -1);

rc1 = rc0;
glw_Translatef(&rc1, -0.886/2, 0.5, 0);
glw_Scalef(&rc1, 0.5, 0.5, 1.0);
glw_Rotatef(&rc1, -gt->angle, 0, 0, -1);
glw_renderer_draw(&gt->renderer, gr, &rc1,
NULL, NULL,
NULL, NULL, a0, 0, NULL);


rc1 = rc0;
glw_Translatef(&rc1, -0.886/2, -0.5, 0);
glw_Scalef(&rc1, 0.5, 0.5, 1.0);
glw_Rotatef(&rc1, -gt->angle, 0, 0, -1);
glw_renderer_draw(&gt->renderer, gr, &rc1,
NULL, NULL,
NULL, NULL, a0, 0, NULL);

rc1 = rc0;
glw_Translatef(&rc1, 0.886/2, 0, 0);
glw_Scalef(&rc1, 0.5, 0.5, 1.0);
glw_Rotatef(&rc1, -gt->angle, 0, 0, -1);
glw_renderer_draw(&gt->renderer, gr, &rc1,
NULL, NULL,
NULL, NULL, a0, 0, NULL);
}


static void
glw_throbber_tri_dtor(glw_t *w)
{
glw_throbber_tri_t *gt = (glw_throbber_tri_t *)w;
glw_renderer_free(&gt->renderer);

}



/**
*
*/
static glw_class_t glw_throbber_tri = {
.gc_name = "throbbertri",
.gc_instance_size = sizeof(glw_throbber_tri_t),
.gc_render = glw_throbber_tri_render,
.gc_layout = glw_throbber_tri_layout,
.gc_dtor = glw_throbber_tri_dtor,
};

GLW_REGISTER_CLASS(glw_throbber_tri);

0 comments on commit 2d48f2d

Please sign in to comment.