diff options
-rw-r--r-- | src/modules/pixbounce/pixbounce.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/modules/pixbounce/pixbounce.c b/src/modules/pixbounce/pixbounce.c index c26eb88..310a509 100644 --- a/src/modules/pixbounce/pixbounce.c +++ b/src/modules/pixbounce/pixbounce.c @@ -118,10 +118,10 @@ static void * pixbounce_create_context(unsigned ticks, unsigned num_cpus, til_se return NULL; ctxt->n_cpus = num_cpus; - ctxt->x = 0; - ctxt->y = 8; - ctxt->x_dir = 1; - ctxt->y_dir = 1; + ctxt->x = -1; + ctxt->y = -1; + ctxt->x_dir = 0; + ctxt->y_dir = 0; ctxt->pix_num = rand() % num_pix; return ctxt; @@ -140,9 +140,6 @@ static void pixbounce_render_fragment(void *context, unsigned ticks, unsigned cp int multiplier_x, multiplier_y, multiplier; int width = fragment->width, height = fragment->height; - /* blank the frame */ - til_fb_fragment_clear(fragment); - /* check for very small fragment */ if(pix_width*2>width||pix_height*2>height) return; @@ -157,6 +154,17 @@ static void pixbounce_render_fragment(void *context, unsigned ticks, unsigned cp multiplier = multiplier_x * 77 / 100; } + /* randomly initialize location and direction of pixmap */ + if(ctxt->x == -1) { + ctxt->x = rand() % (width - pix_width * multiplier) + 1; + ctxt->y = rand() % (height - pix_height * multiplier) + 1; + ctxt->x_dir = (rand() % 3) - 1; + ctxt->y_dir = (rand() % 3) - 1; + } + + /* blank the frame */ + til_fb_fragment_clear(fragment); + /* translate pixmap to multiplier size and draw it to the fragment */ for(int cursor_y=0; cursor_y < pix_height*multiplier; cursor_y++) { for(int cursor_x=0; cursor_x < pix_width*multiplier; cursor_x++) { |