--- snow.c 2007-04-16 19:51:34.000000000 +0800 +++ firefly.c 2007-02-19 02:00:22.000000000 +0900 @@ -1,9 +1,10 @@ /** * - * Beryl snow plugin + * Beryl FireFly plugin * - * snow.c + * fireFlies.c * + * Copyright (c) 2007 Kyle Mallory * Copyright (c) 2006 Eckhart P. * Copyright (c) 2006 Brian Jørgensen * @@ -37,76 +38,66 @@ #include // ------------------------------------------------------------ CONSTANTS ----------------------------------------------------- -#define MAX_SNOWFLAKES 10000 - +#define MAX_FIREFLIES 10000 +#define GLOW_STAGES 5 // ------------------------------------------------------------ WRAPPERS ----------------------------------------------------- -#define GET_SNOW_DISPLAY(d) \ - ((SnowDisplay *) (d)->privates[displayPrivateIndex].ptr) +#define GET_FIREFLY_DISPLAY(d) \ + ((FireFlyDisplay *) (d)->privates[displayPrivateIndex].ptr) -#define SNOW_DISPLAY(d) \ - SnowDisplay *sd = GET_SNOW_DISPLAY (d) +#define FIREFLY_DISPLAY(d) \ + FireFlyDisplay *sd = GET_FIREFLY_DISPLAY (d) -#define GET_SNOW_SCREEN(s, sd) \ - ((SnowScreen *) (s)->privates[(sd)->screenPrivateIndex].ptr) +#define GET_FIREFLY_SCREEN(s, sd) \ + ((FireFlyScreen *) (s)->privates[(sd)->screenPrivateIndex].ptr) -#define SNOW_SCREEN(s) \ - SnowScreen *ss = GET_SNOW_SCREEN (s, GET_SNOW_DISPLAY (s->display)) +#define FIREFLY_SCREEN(s) \ + FireFlyScreen *ss = GET_FIREFLY_SCREEN (s, GET_FIREFLY_DISPLAY (s->display)) // ------------------------------------------------------------ OPTIONS ----------------------------------------------------- -#define SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES 0 -#define SNOW_DISPLAY_OPTION_SNOW_SIZE 1 -#define SNOW_DISPLAY_OPTION_SNOW_SPEED 2 -#define SNOW_DISPLAY_OPTION_SCREEN_BOXING 3 -#define SNOW_DISPLAY_OPTION_SCREEN_DEPTH 4 -#define SNOW_DISPLAY_OPTION_INITIATE 5 -#define SNOW_DISPLAY_OPTION_ON_TOP 6 -#define SNOW_DISPLAY_OPTION_USE_BLENDING 7 -#define SNOW_DISPLAY_OPTION_USE_TEXTURES 8 -#define SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY 9 -#define SNOW_DISPLAY_OPTION_SNOW_TEXTURES 10 -#define SNOW_DISPLAY_OPTION_SNOW_DIRECTION 11 -#define SNOW_DISPLAY_OPTION_ROTATION 12 -#define SNOW_DISPLAY_OPTION_NUM 13 - -#define NUM_SNOW_DIRECTIONS 4 - -#define SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY_DEFAULT 40 -#define SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES_DEFAULT 1500.0 -#define SNOW_DISPLAY_OPTION_SNOW_SIZE_DEFAULT 10.0 -#define SNOW_DISPLAY_OPTION_SNOW_SPEED_DEFAULT 85.0 -#define SNOW_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT 400.0 -#define SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT 1000.0 -#define SNOW_DISPLAY_OPTION_SNOW_TEXTURES_DEFAULT "" -#define SNOW_DISPLAY_OPTION_INITIATE_KEY "F3" -#define SNOW_DISPLAY_OPTION_INITIATE_MOD CompSuperMask -#define SNOW_DISPLAY_OPTION_ON_TOP_DEFAULT FALSE -#define SNOW_DISPLAY_OPTION_ROTATION_DEFAULT TRUE -#define SNOW_DISPLAY_OPTION_USE_BLENDING_DEFAULT TRUE -#define SNOW_DISPLAY_OPTION_USE_TEXTURES_DEFAULT TRUE -#define SNOW_DISPLAY_OPTION_DIRECTION_DEFAULT 0 - -static char *snowDirections[] = { - N_("Top to bottom"), - N_("Bottom to top"), - N_("Right to left"), - N_("Left to right") -}; +#define FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES 0 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE 1 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED 2 +#define FIREFLY_DISPLAY_OPTION_SCREEN_BOXING 3 +#define FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH 4 +#define FIREFLY_DISPLAY_OPTION_INITIATE 5 +#define FIREFLY_DISPLAY_OPTION_ON_TOP 6 +#define FIREFLY_DISPLAY_OPTION_USE_BLENDING 7 +#define FIREFLY_DISPLAY_OPTION_USE_TEXTURES 8 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY 9 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES 10 +#define FIREFLY_DISPLAY_OPTION_NUM 11 + + +#define FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY_DEFAULT 40 +#define FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES_DEFAULT 1500.0 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE_DEFAULT 10.0 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED_DEFAULT 85.0 +#define FIREFLY_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT 400.0 +#define FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT 1000.0 +#define FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES_DEFAULT "" +#define FIREFLY_DISPLAY_OPTION_INITIATE_KEY "F4" +#define FIREFLY_DISPLAY_OPTION_INITIATE_MOD CompSuperMask +#define FIREFLY_DISPLAY_OPTION_ON_TOP_DEFAULT FALSE +#define FIREFLY_DISPLAY_OPTION_USE_BLENDING_DEFAULT TRUE +#define FIREFLY_DISPLAY_OPTION_USE_TEXTURES_DEFAULT TRUE + -static char *snowTextures[] = { - IMAGEDIR "/snowflake2.png" +static char *fireFlyTextures[] = { + IMAGEDIR "/firefly1.png" }; -#define N_SNOW_TEXTURES (sizeof (snowTextures) / sizeof (snowTextures[0])) +#define N_FIREFLY_TEXTURES (sizeof (fireFlyTextures) / sizeof (fireFlyTextures[0])) #define NUM_OPTIONS(s) (sizeof ((s)->opt) / sizeof (CompOption)) +static float glowCurve[GLOW_STAGES][4] = { { 0.0, 0.5, 0.5, 1.0 }, { 1.0, 1.0, 0.5, 0.75 }, { 0.75, 0.3, 1.2, 1.0 }, { 1.0, 0.7, 1.5, 1.0 }, { 1.0, 0.5, 0.5, 0.0 } }; + static int displayPrivateIndex = 0; -static int numFlakes; -static int snowRotate; -static int snowUpdateDelay; -static float snowSize; -static float snowSpeed; +static int numFlies; +static int fireFlyUpdateDelay; +static float fireFlySize; +static float fireFlySpeed; static float boxing; static float depth; static Bool onTop; @@ -115,115 +106,160 @@ static Bool displayListNeedsUpdating; // ------------------------------------------------------------ STRUCTS ----------------------------------------------------- -typedef struct _SnowDisplay -{ +typedef struct _FireFlyDisplay { int screenPrivateIndex; Bool useBlending; Bool useTextures; - int snowTexNFiles; - CompOptionValue *snowTexFiles; + int fireFliesTexNFiles; + CompOptionValue *fireFliesTexFiles; - float snowSize; + float fireFliesSize; Bool displayListNeedsUpdating; - CompOption opt[SNOW_DISPLAY_OPTION_NUM]; + CompOption opt[FIREFLY_DISPLAY_OPTION_NUM]; -} SnowDisplay; +} FireFlyDisplay; -typedef struct _SnowScreen SnowScreen; +typedef struct _FireFlyScreen FireFlyScreen; -typedef struct _SnowTexture -{ +typedef struct _FireFlyTexture { CompTexture tex; unsigned int width; unsigned int height; Bool loaded; GLuint dList; -} SnowTexture; +} FireFlyTexture; -typedef struct _SnowFlake -{ +typedef struct _FireFly { + // fly position float x; float y; float z; - float xs; - float ys; - float zs; - float ra; //rotation angle - float rs; //rotation speed - - SnowTexture *tex; -} SnowFlake; - -static void InitiateSnowFlake(SnowScreen * ss, SnowFlake * sf); -static void setSnowflakeTexture(SnowScreen * ss, SnowFlake * sf); -static void beginRendering(SnowScreen * ss, CompScreen * s); -static void setupDisplayList(SnowScreen * ss); - -static void snowThink(SnowScreen * ss, SnowFlake * sf); -static void snowMove(SnowFlake * sf); + + // actual fly vector + float xs[4]; + float ys[4]; + float zs[4]; + + float lifespan; // age when fly will "die" + float age; // age in time + float lifecycle; // 0.0 to 1.0 over lifespan + float glowAlpha; // alpha, given life from tables + FireFlyTexture *tex; +} FireFly; -struct _SnowScreen -{ - CompScreen *s; +struct _FireFlyScreen { + CompScreen * s; Bool active; CompTimeoutHandle timeoutHandle; - PaintScreenProc paintScreen; - DrawWindowProc drawWindow; - DrawWindowTextureProc drawWindowTexture; + PaintScreenProc paintScreen; + DrawWindowProc drawWindow; + DrawWindowTextureProc drawWindowTexture; - SnowTexture *snowTex; - int snowTexturesLoaded; + FireFlyTexture * fireFliesTex; + int fireFlyTexturesLoaded; GLuint displayList; - SnowFlake allSnowFlakes[MAX_SNOWFLAKES]; -}; -static void snowThink(SnowScreen * ss, SnowFlake * sf) -{ - if (sf->y >= ss->s->height + boxing - || sf->x <= -boxing - || sf->y >= ss->s->width + boxing - || sf->z <= -(depth / 500.0) || sf->z >= 1) + FireFly allFireFlies[MAX_FIREFLIES]; +} ; - { - InitiateSnowFlake(ss, sf); - } - snowMove(sf); +static void InitiateFireFly(FireFlyScreen *ss, FireFly *sf); +static void setFireFlyTexture(FireFlyScreen *ss, FireFly *sf); +static void beginRendering(FireFlyScreen *ss, CompScreen *s); +static void setupDisplayList(FireFlyScreen * ss); + +static void fireFlyMove(FireFly *sf); +static void fireFlyThink(FireFlyScreen *ss, FireFly *sf); + +// ------------------------------------------------- HELPER FUNCTIONS ---------------------------------------------------- + +int GetRand(int min, int max); +int GetRand(int min, int max) +{ + return (rand() % (max - min + 1) + min); } -static void snowMove(SnowFlake * sf) +float mmrand(int min, int max, float divisor); +float mmrand(int min, int max, float divisor) { - float tmp = 1.0f / (100.0f - snowSpeed); + return ((float)GetRand(min, max)) / divisor; +}; - sf->x += (sf->xs * (float)snowUpdateDelay) * tmp; - sf->y += (sf->ys * (float)snowUpdateDelay) * tmp; - sf->z += (sf->zs * (float)snowUpdateDelay) * tmp; - sf->ra += ((float)snowUpdateDelay) / (10.0f - sf->rs); +float bezierCurve(float p[4], float time) { + float a = p[0]; + float b = p[0] + p[1]; + float c = p[3] + p[2]; + float d = p[3]; + + float h = time; + float i = 1.0 - time; + + float out = (a*(i*i*i)) + (3.0*b*(i*i)*h) + (3.0*c*i*(h*h)) + (d*(h*h*h)); + return out; +} + +// ------------------------------------------------- CORE ANIMATION ------------------------------------------------------ + +static void fireFlyMove(FireFly *sf) +{ + float xs = bezierCurve(sf->xs, sf->lifecycle); + float ys = bezierCurve(sf->ys, sf->lifecycle); + float zs = bezierCurve(sf->zs, sf->lifecycle); + + sf->x += (float)(xs * (double)fireFlyUpdateDelay) / (100 - fireFlySpeed); + sf->y += (float)(ys * (double)fireFlyUpdateDelay) / (100 - fireFlySpeed); + sf->z += (float)(zs * (double)fireFlyUpdateDelay) / (100 - fireFlySpeed); +} + +static void fireFlyThink(FireFlyScreen *ss, FireFly *sf) +{ + sf->age += 0.02; + sf->lifecycle = sf->age / sf->lifespan; + + int glowStage = (sf->lifecycle * GLOW_STAGES); + sf->glowAlpha = bezierCurve(glowCurve[glowStage], sf->lifecycle); + if (sf->glowAlpha > 1.0) + sf->glowAlpha = 1.0; + + if ( sf->y <= -boxing + || sf->y >= ss->s->height + boxing + || sf->x <= -boxing + || sf->x >= ss->s->width + boxing + || sf->z <= -(depth / 500.0) + || sf->z >= 1 + || sf->age > sf->lifespan) + + { + InitiateFireFly(ss,sf); + } + fireFlyMove(sf); } -static Bool stepSnowPositions(void *sc) +static Bool stepFireFlyPositions(void *sc) { - CompScreen *s = sc; - - SNOW_SCREEN(s); + CompScreen * s = sc; + FIREFLY_SCREEN(s); if (!ss->active) return True; int i = 0; - - SnowFlake *snowFlake = ss->allSnowFlakes; - - for (i = 0; i < numFlakes; i++) - snowThink(ss, snowFlake++); - - if (ss->active && !onTop) - { + for (i = 0; i < numFlies; i++) + fireFlyThink(ss, &ss->allFireFlies[i]); + if (ss->active && !onTop)//(ss->lastMsCount > 15) + { + // // TODO: I Don't quite know which of the following is easiest on + // // CPU/GPU cycles... ought to be the second, but I am no expert. + // + // //// if (ss->alpha > 0.0) { + // // damageScreen(s); + // // // XSync(s->display->display, FALSE); + // //// } + // CompWindow *w; - for (w = s->windows; w; w = w->next) { if (w->type & CompWindowTypeDesktopMask) @@ -237,153 +273,122 @@ return True; } -static Bool -snowToggle(CompDisplay * d, CompAction * action, CompActionState state, - CompOption * option, int nOption) + +static Bool fireFliesToggle (CompDisplay *d, CompAction *action, CompActionState state, CompOption *option, int nOption) { CompScreen *s; Window xid; - xid = getIntOptionNamed(option, nOption, "root", 0); - s = findScreenAtDisplay(d, xid); + xid = getIntOptionNamed (option, nOption, "root", 0); + s = findScreenAtDisplay (d, xid); - if (s) - { - SNOW_SCREEN(s); + FIREFLY_SCREEN (s); + if (ss) { ss->active = !ss->active; if (!ss->active) - damageScreen(s); + damageScreen(s); } return TRUE; } -// ------------------------------------------------- HELPER FUNCTIONS ---------------------------------------------------- - -int GetRand(int min, int max); -int GetRand(int min, int max) -{ - return (rand() % (max - min + 1) + min); -} - -float mmrand(int min, int max, float divisor); -float mmrand(int min, int max, float divisor) -{ - return ((float)GetRand(min, max)) / divisor; -}; - // ------------------------------------------------- RENDERING ---------------------------------------------------- -static void setupDisplayList(SnowScreen * ss) + static void +setupDisplayList(FireFlyScreen *ss) { // ----------------- untextured list - ss->displayList = glGenLists(1); + ss->displayList =glGenLists(1); glNewList(ss->displayList, GL_COMPILE); - glBegin(GL_QUADS); + glBegin (GL_QUADS); - glColor4f(1.0, 1.0, 1.0, 1.0); - glVertex3f(0, 0, -0.0); - glColor4f(1.0, 1.0, 1.0, 1.0); - glVertex3f(0, snowSize, -0.0); - glColor4f(1.0, 1.0, 1.0, 1.0); - glVertex3f(snowSize, snowSize, -0.0); - glColor4f(1.0, 1.0, 1.0, 1.0); - glVertex3f(snowSize, 0, -0.0); + glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (0,0, -0.0); + glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (0,fireFlySize, -0.0); + glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (fireFlySize, fireFlySize, -0.0); + glColor4f (1.0, 1.0, 1.0, 1.0); glVertex3f (fireFlySize, 0, -0.0); - glEnd(); + glEnd (); glEndList(); } -static void beginRendering(SnowScreen * ss, CompScreen * s) +static void +beginRendering(FireFlyScreen *ss, CompScreen *s) { if (useBlending) - glEnable(GL_BLEND); + glEnable (GL_BLEND); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - if (displayListNeedsUpdating) + if (displayListNeedsUpdating) { setupDisplayList(ss); displayListNeedsUpdating = FALSE; } - glColor4f(1.0, 1.0, 1.0, 1.0); - if (ss->snowTexturesLoaded && useTextures) + glColor4f (1.0, 1.0, 1.0, 1.0); + if (ss->fireFlyTexturesLoaded && useTextures) { int j = 0; - for (j = 0; j < ss->snowTexturesLoaded; j++) + for (j = 0; j < ss->fireFlyTexturesLoaded; j++) { - enableTexture(ss->s, &ss->snowTex[j].tex, - COMP_TEXTURE_FILTER_GOOD); + enableTexture (ss->s, &ss->fireFliesTex[j].tex, COMP_TEXTURE_FILTER_GOOD); int i = 0; - SnowFlake *snowFlake = ss->allSnowFlakes; - - for (i = 0; i < numFlakes; i++) + for (i = 0; i < numFlies; i++) { - if (snowFlake->tex == &ss->snowTex[j]) + glColor4f (1.0, 1.0, 1.0, ss->allFireFlies[i].glowAlpha); + if (ss->allFireFlies[i].tex == &ss->fireFliesTex[j]) { - glTranslatef(snowFlake->x, snowFlake->y, snowFlake->z); - if (snowRotate) - glRotatef(snowFlake->ra, 0, 0, 1); - glCallList(ss->snowTex[j].dList); - if (snowRotate) - glRotatef(-snowFlake->ra, 0, 0, 1); - glTranslatef(-snowFlake->x, -snowFlake->y, -snowFlake->z); + glTranslatef(ss->allFireFlies[i].x, ss->allFireFlies[i].y, ss->allFireFlies[i].z); + glCallList(ss->fireFliesTex[j].dList); + glTranslatef(-ss->allFireFlies[i].x, -ss->allFireFlies[i].y, -ss->allFireFlies[i].z); } - snowFlake++; } - disableTexture(ss->s, &ss->snowTex[j].tex); + disableTexture (ss->s, &ss->fireFliesTex[j].tex); } } - else if (!ss->snowTexturesLoaded || !useTextures) + else if (!ss->fireFlyTexturesLoaded || !useTextures) { int i = 0; - SnowFlake *snowFlake = ss->allSnowFlakes; - - for (i = 0; i < numFlakes; i++) + for (i = 0; i < numFlies; i++) { - glTranslatef(snowFlake->x, snowFlake->y, snowFlake->z); - glRotatef(snowFlake->ra, 0, 0, 1); + glColor4f (1.0, 1.0, 1.0, ss->allFireFlies[i].glowAlpha); + glTranslatef(ss->allFireFlies[i].x, ss->allFireFlies[i].y, ss->allFireFlies[i].z); glCallList(ss->displayList); - glRotatef(-snowFlake->ra, 0, 0, 1); - glTranslatef(-snowFlake->x, -snowFlake->y, -snowFlake->z); - snowFlake++; + glTranslatef(-ss->allFireFlies[i].x, -ss->allFireFlies[i].y, -ss->allFireFlies[i].z); } } - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); + glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); if (useBlending) { - glDisable(GL_BLEND); - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + glDisable (GL_BLEND); + glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); } } - // ------------------------------------------------- FUNCTIONS ---------------------------------------------------- -static Bool -snowPaintScreen(CompScreen * s, - const ScreenPaintAttrib * sa, - const CompTransform * transform, +static Bool fireFliesPaintScreen(CompScreen *s, + const ScreenPaintAttrib *sa, + const CompTransform *transform, Region region, int output, unsigned int mask) { Bool status; - SNOW_SCREEN(s); + FIREFLY_SCREEN(s); if (!onTop && ss->active) { - // This line is essential. Without it the snow will be rendered above (some) other windows. + // This line is essential. Without it the fireFlies will be rendered above (some) other windows. mask |= PAINT_SCREEN_ORDER_BACK_TO_FRONT_MASK; } UNWRAP(ss, s, paintScreen); status = (*s->paintScreen) (s, sa, transform, region, output, mask); - WRAP(ss, s, paintScreen, snowPaintScreen); + WRAP(ss, s, paintScreen, fireFliesPaintScreen); if (onTop && ss->active) { @@ -399,213 +404,175 @@ return status; } -static Bool -snowDrawWindow(CompWindow * w, const CompTransform *transform, const FragmentAttrib *attrib, - Region region, unsigned int mask) +static Bool fireFliesDrawWindow (CompWindow *w, + const CompTransform *transform, + const FragmentAttrib *attrib, + Region region, unsigned int mask) { int status;; - SNOW_SCREEN(w->screen); + FIREFLY_SCREEN (w->screen); // First draw Window as usual - UNWRAP(ss, w->screen, drawWindow); + UNWRAP (ss, w->screen, drawWindow); status = (*w->screen->drawWindow) (w, transform, attrib, region, mask); - WRAP(ss, w->screen, drawWindow, snowDrawWindow); + WRAP (ss, w->screen, drawWindow, fireFliesDrawWindow); // Check whether this is the Desktop Window if (w->type & CompWindowTypeDesktopMask && ss->active && !onTop) beginRendering(ss, w->screen); - + return status; } -static void InitiateSnowFlake(SnowScreen * ss, SnowFlake * sf) +static void InitiateFireFly(FireFlyScreen *ss, FireFly *sf) { - //TODO: possibly place snowflakes based on FOV, instead of a cube. - SNOW_DISPLAY(ss->s->display); - CompOption *o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_DIRECTION]; - - if (strcmp(snowDirections[0], o->value.s) == 0) - { - sf->x = mmrand(-boxing, ss->s->width + boxing, 1); - sf->xs = mmrand(-1, 1, 500); - sf->y = mmrand(-300, 0, 1); - sf->ys = mmrand(1, 3, 1); - } - else if (strcmp(snowDirections[1], o->value.s) == 0) - { - sf->x = mmrand(-boxing, ss->s->width + boxing, 1); - sf->xs = mmrand(-1, 1, 500); - sf->y = mmrand(ss->s->height, ss->s->height + 300, 1); - sf->ys = -mmrand(1, 3, 1); - } - else if (strcmp(snowDirections[2], o->value.s) == 0) - { - sf->x = mmrand(ss->s->width, ss->s->width + 300, 1); - sf->xs = -mmrand(1, 3, 1); - sf->y = mmrand(-boxing, ss->s->height + boxing, 1); - sf->ys = mmrand(-1, 1, 500); - } - else if (strcmp(snowDirections[3], o->value.s) == 0) + //TODO: possibly place fireflies based on FOV, instead of a cube. + sf->x = mmrand(-boxing, ss->s->width + boxing, 1); + sf->y = mmrand(-boxing, ss->s->height + boxing, 1); + sf->z = mmrand(-depth, 0.1, 5000); + + sf->lifespan = mmrand(50,200, 100); + sf->age = 0.0; + + // speed of firefly + int i = 0; + for (i = 0; i < 4; i++) { - sf->x = mmrand(-300, 0, 1); - sf->xs = mmrand(1, 3, 1); - sf->y = mmrand(-boxing, ss->s->height + boxing, 1); - sf->ys = mmrand(-1, 1, 500); + sf->xs[i] = mmrand(-3000, 3000, 1000); + sf->ys[i] = mmrand(-3000, 3000, 1000); + sf->zs[i] = mmrand(-1000, 1000, 500000); } - - sf->z = mmrand(-depth, 0.1, 5000); - sf->zs = mmrand(-1000, 1000, 500000); - sf->ra = mmrand(-1000, 1000, 50); - sf->rs = mmrand(-1000, 1000, 1000); } -static void setSnowflakeTexture(SnowScreen * ss, SnowFlake * sf) +static void setFireFlyTexture(FireFlyScreen *ss, FireFly *sf) { - if (ss->snowTexturesLoaded) - sf->tex = &ss->snowTex[rand() % ss->snowTexturesLoaded]; + if (ss->fireFlyTexturesLoaded) + sf->tex = &ss->fireFliesTex[rand() % ss->fireFlyTexturesLoaded]; } -static void updateSnowTextures(CompScreen * s) +static void updateFireFlyTextures(CompScreen *s) { - SNOW_SCREEN(s); - SNOW_DISPLAY(s->display); + FIREFLY_SCREEN(s); + FIREFLY_DISPLAY(s->display); int i = 0; - - for (i = 0; i < ss->snowTexturesLoaded; i++) + for (i = 0; i < ss->fireFlyTexturesLoaded; i++) { - finiTexture(s, &ss->snowTex[i].tex); - glDeleteLists(ss->snowTex[i].dList, 1); + finiTexture (s, &ss->fireFliesTex[i].tex); + glDeleteLists(ss->fireFliesTex[i].dList,1); } - if (ss->snowTexturesLoaded) - free(ss->snowTex); - ss->snowTexturesLoaded = 0; + if (ss->fireFlyTexturesLoaded) + free(ss->fireFliesTex); + ss->fireFlyTexturesLoaded = 0; - ss->snowTex = calloc(1, sizeof(SnowTexture) * sd->snowTexNFiles); + ss->fireFliesTex = calloc(1, sizeof(FireFlyTexture) * sd->fireFliesTexNFiles); int count = 0; - - for (i = 0; i < sd->snowTexNFiles; i++) + for (i = 0; i < sd->fireFliesTexNFiles; i++) { - ss->snowTex[count].loaded = - readImageToTexture(s, &ss->snowTex[count].tex, - sd->snowTexFiles[i].s, - &ss->snowTex[count].width, - &ss->snowTex[count].height); - if (!ss->snowTex[count].loaded) + ss->fireFliesTex[count].loaded = readImageToTexture (s, &ss->fireFliesTex[count].tex, + sd->fireFliesTexFiles[i].s, &ss->fireFliesTex[count].width, &ss->fireFliesTex[count].height); + if (!ss->fireFliesTex[count].loaded) { - printf("[Snow]: Texture not found : %s\n", sd->snowTexFiles[i].s); + printf("[FireFly]: Texture not found : %s\n", sd->fireFliesTexFiles[i].s); continue; } - printf("[Snow]: Loaded Texture %s\n", sd->snowTexFiles[i].s); - CompMatrix *mat = &ss->snowTex[count].tex.matrix; - SnowTexture *sTex = &ss->snowTex[count]; + printf("[FireFly]: Loaded Texture %s\n",sd->fireFliesTexFiles[i].s); + CompMatrix *mat = &ss->fireFliesTex[count].tex.matrix; + FireFlyTexture *sTex = &ss->fireFliesTex[count]; - sTex->dList = glGenLists(1); + sTex->dList =glGenLists(1); glNewList(sTex->dList, GL_COMPILE); - glBegin(GL_QUADS); + glBegin (GL_QUADS); - glTexCoord2f(COMP_TEX_COORD_X(mat, 0), COMP_TEX_COORD_Y(mat, 0)); - glVertex2f(0, 0); - glTexCoord2f(COMP_TEX_COORD_X(mat, 0), - COMP_TEX_COORD_Y(mat, sTex->height)); - glVertex2f(0, snowSize * sTex->height / sTex->width); - glTexCoord2f(COMP_TEX_COORD_X(mat, sTex->width), - COMP_TEX_COORD_Y(mat, sTex->height)); - glVertex2f(snowSize, snowSize * sTex->height / sTex->width); - glTexCoord2f(COMP_TEX_COORD_X(mat, sTex->width), - COMP_TEX_COORD_Y(mat, 0)); - glVertex2f(snowSize, 0); + glTexCoord2f (COMP_TEX_COORD_X(mat, 0), COMP_TEX_COORD_Y(mat, 0)); + glVertex2f (0,0); + glTexCoord2f (COMP_TEX_COORD_X(mat, 0), COMP_TEX_COORD_Y(mat, sTex->height)); + glVertex2f (0,fireFlySize * sTex->height / sTex->width); + glTexCoord2f (COMP_TEX_COORD_X(mat, sTex->width), COMP_TEX_COORD_Y(mat, sTex->height)); + glVertex2f (fireFlySize,fireFlySize * sTex->height / sTex->width); + glTexCoord2f (COMP_TEX_COORD_X(mat, sTex->width), COMP_TEX_COORD_Y(mat, 0)); + glVertex2f (fireFlySize,0); - glEnd(); + glEnd (); glEndList(); count++; } - ss->snowTexturesLoaded = count; - if (count < sd->snowTexNFiles) - ss->snowTex = realloc(ss->snowTex, sizeof(SnowTexture) * count); + ss->fireFlyTexturesLoaded = count; + if (count < sd->fireFliesTexNFiles) + ss->fireFliesTex = realloc(ss->fireFliesTex, sizeof(FireFlyTexture) * count); - SnowFlake *snowFlake = ss->allSnowFlakes; - - for (i = 0; i < MAX_SNOWFLAKES; i++) + for (i = 0; i < MAX_FIREFLIES; i++) { - setSnowflakeTexture(ss, snowFlake++); + setFireFlyTexture(ss, &ss->allFireFlies[i]); } } -static Bool snowInitScreen(CompPlugin * p, CompScreen * s) +static Bool fireFliesInitScreen(CompPlugin *p, CompScreen *s) { - SNOW_DISPLAY(s->display); - - SnowScreen *ss = (SnowScreen *) calloc(1, sizeof(SnowScreen)); + FIREFLY_DISPLAY(s->display); + FireFlyScreen *ss = (FireFlyScreen *) calloc(1, sizeof(FireFlyScreen)); ss->s = s; s->privates[sd->screenPrivateIndex].ptr = ss; int i = 0; - SnowFlake *snowFlake = ss->allSnowFlakes; - - for (i = 0; i < MAX_SNOWFLAKES; i++) + for (i = 0; i < MAX_FIREFLIES; i++) { - InitiateSnowFlake(ss, snowFlake); - setSnowflakeTexture(ss, snowFlake); - snowFlake++; + InitiateFireFly(ss, &ss->allFireFlies[i]); + setFireFlyTexture(ss, &ss->allFireFlies[i]); } - updateSnowTextures(s); + updateFireFlyTextures(s); setupDisplayList(ss); ss->active = FALSE; - addScreenAction(s, &sd->opt[SNOW_DISPLAY_OPTION_INITIATE].value.action); + addScreenAction (s, &sd->opt[FIREFLY_DISPLAY_OPTION_INITIATE].value.action); - WRAP(ss, s, paintScreen, snowPaintScreen); - WRAP(ss, s, drawWindow, snowDrawWindow); + WRAP(ss, s, paintScreen, fireFliesPaintScreen); + WRAP(ss, s, drawWindow, fireFliesDrawWindow); - ss->timeoutHandle = compAddTimeout(snowUpdateDelay, stepSnowPositions, s); + ss->timeoutHandle=compAddTimeout(fireFlyUpdateDelay,stepFireFlyPositions,s); return TRUE; } -static void snowFiniScreen(CompPlugin * p, CompScreen * s) +static void fireFliesFiniScreen(CompPlugin *p, CompScreen *s) { - SNOW_SCREEN(s); - SNOW_DISPLAY(s->display); + FIREFLY_SCREEN(s); + FIREFLY_DISPLAY(s->display); compRemoveTimeout(ss->timeoutHandle); int i = 0; - - for (i = 0; i < ss->snowTexturesLoaded; i++) + for (i = 0; i < ss->fireFlyTexturesLoaded; i++) { - finiTexture(s, &ss->snowTex[i].tex); - glDeleteLists(ss->snowTex[i].dList, 1); + finiTexture (s, &ss->fireFliesTex[i].tex); + glDeleteLists(ss->fireFliesTex[i].dList,1); } - if (ss->snowTexturesLoaded) - free(ss->snowTex); + if (ss->fireFlyTexturesLoaded) + free(ss->fireFliesTex); //Restore the original function UNWRAP(ss, s, paintScreen); UNWRAP(ss, s, drawWindow); - removeScreenAction(s, - &sd->opt[SNOW_DISPLAY_OPTION_INITIATE].value.action); + removeScreenAction (s, &sd->opt[FIREFLY_DISPLAY_OPTION_INITIATE].value.action); //Free the pointer free(ss); } -static Bool -snowSetDisplayOption(CompDisplay * display, char *name, - CompOptionValue * value) +static Bool fireFliesSetDisplayOption(CompDisplay *display, char *name, CompOptionValue *value) { CompOption *o; int index; - SNOW_DISPLAY(display); + FIREFLY_DISPLAY(display); o = compFindOption(sd->opt, NUM_OPTIONS(sd), name, &index); if (!o) @@ -613,367 +580,296 @@ switch (index) { - case SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES: - if (compSetFloatOption(o, value)) - { - numFlakes = - (int)sd->opt[SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES].value.f; - return TRUE; - } - break; - - case SNOW_DISPLAY_OPTION_SNOW_DIRECTION: - if (compSetStringOption(o, value)) - { - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_SNOW_SIZE: - if (compSetFloatOption(o, value)) - { - snowSize = sd->opt[SNOW_DISPLAY_OPTION_SNOW_SIZE].value.f; - displayListNeedsUpdating = TRUE; - CompScreen *s = display->screens; - - updateSnowTextures(s); - - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_SNOW_SPEED: - if (compSetFloatOption(o, value)) - { - snowSpeed = sd->opt[SNOW_DISPLAY_OPTION_SNOW_SPEED].value.f; - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY: - if (compSetIntOption(o, value)) - { - CompScreen *s = display->screens; + case FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES: + if (compSetFloatOption (o, value)) + { + numFlies = (int) sd->opt[FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES].value.f; + return TRUE; + } + break; + case FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE: + if (compSetFloatOption (o, value)) + { + fireFlySize = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE].value.f; + displayListNeedsUpdating = TRUE; + CompScreen * s=display->screens; + updateFireFlyTextures(s); - SNOW_SCREEN(s); - snowUpdateDelay = - sd->opt[SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY].value.i; - if (ss->timeoutHandle) - compRemoveTimeout(ss->timeoutHandle); - ss->timeoutHandle = - compAddTimeout(snowUpdateDelay, stepSnowPositions, s); - return TRUE; - } - case SNOW_DISPLAY_OPTION_SCREEN_BOXING: - if (compSetFloatOption(o, value)) - { - boxing = sd->opt[SNOW_DISPLAY_OPTION_SCREEN_BOXING].value.f; - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_SCREEN_DEPTH: - if (compSetFloatOption(o, value)) - { - depth = sd->opt[SNOW_DISPLAY_OPTION_SCREEN_DEPTH].value.f; - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_SNOW_TEXTURES: - if (compSetOptionList(o, value)) - { - CompScreen *s = display->screens; + return TRUE; + } + break; + case FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED: + if (compSetFloatOption (o, value)) + { + fireFlySpeed = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED].value.f; + return TRUE; + } + break; + case FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY: + if (compSetIntOption (o,value)) + { + CompScreen * s = display->screens; + FIREFLY_SCREEN(s); + fireFlyUpdateDelay = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY].value.i; + if (ss->timeoutHandle) + compRemoveTimeout(ss->timeoutHandle); + ss->timeoutHandle=compAddTimeout(fireFlyUpdateDelay,stepFireFlyPositions,s); + return TRUE; + } + case FIREFLY_DISPLAY_OPTION_SCREEN_BOXING: + if (compSetFloatOption (o, value)) + { + boxing = sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_BOXING].value.f; + return TRUE; + } + break; + case FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH: + if (compSetFloatOption (o, value)) + { + depth = sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH].value.f; + return TRUE; + } + break; + // case FIREFLY_DISPLAY_OPTION_MAX_FRAMES: + // if (compSetFloatOption (o, value)) + // return TRUE; + // break; - sd->snowTexFiles = - sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list. - value; - sd->snowTexNFiles = - sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list. - nValue; + case FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES: + if (compSetOptionList (o, value)) + { + CompScreen * s=display->screens; + sd->fireFliesTexFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.value; + sd->fireFliesTexNFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.nValue; - updateSnowTextures(s); - return TRUE; - } - break; + updateFireFlyTextures(s); + return TRUE; + } + break; - case SNOW_DISPLAY_OPTION_INITIATE: - if (setDisplayAction(display, o, value)) - return TRUE; - break; - case SNOW_DISPLAY_OPTION_ON_TOP: - if (compSetBoolOption(o, value)) - { - onTop = sd->opt[SNOW_DISPLAY_OPTION_ON_TOP].value.b; - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_ROTATION: - if (compSetBoolOption(o, value)) - { - snowRotate = sd->opt[SNOW_DISPLAY_OPTION_ROTATION].value.b; - return TRUE; - } - break; - case SNOW_DISPLAY_OPTION_USE_BLENDING: - if (compSetBoolOption(o, value)) - { - useBlending = sd->opt[SNOW_DISPLAY_OPTION_USE_BLENDING].value.b; - return TRUE; - } - case SNOW_DISPLAY_OPTION_USE_TEXTURES: - if (compSetBoolOption(o, value)) - { - useTextures = sd->opt[SNOW_DISPLAY_OPTION_USE_TEXTURES].value.b; - return TRUE; - } - break; - default: - break; + case FIREFLY_DISPLAY_OPTION_INITIATE: + if (setDisplayAction (display, o, value)) + return TRUE; + break; + case FIREFLY_DISPLAY_OPTION_ON_TOP: + if (compSetBoolOption (o, value)) + { + onTop = sd->opt[FIREFLY_DISPLAY_OPTION_ON_TOP].value.b; + return TRUE; + } + break; + case FIREFLY_DISPLAY_OPTION_USE_BLENDING: + if (compSetBoolOption (o, value)) + { + useBlending = sd->opt[FIREFLY_DISPLAY_OPTION_USE_BLENDING].value.b; + return TRUE; + } + case FIREFLY_DISPLAY_OPTION_USE_TEXTURES: + if (compSetBoolOption (o, value)) + { + useTextures = sd->opt[FIREFLY_DISPLAY_OPTION_USE_TEXTURES].value.b; + return TRUE; + } + break; + default: + break; } return FALSE; } -static void snowDisplayInitOptions(SnowDisplay * sd) +static void fireFliesDisplayInitOptions(FireFlyDisplay * sd) { CompOption *o; - o = &sd->opt[SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES]; - o->advanced = False; - o->name = "num_snowflakes"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; - o->shortDesc = N_("Number of Snowflakes"); - o->longDesc = N_("Number of Snowflakes"); + o = &sd->opt[FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES]; + o->name = "num_fireflies"; + o->group=N_("Settings"); + o->subGroup=N_(""); + o->displayHints=""; + o->shortDesc = N_("Number of fireflies"); + o->longDesc = N_("Number of fireflies"); o->type = CompOptionTypeFloat; - o->value.f = SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES_DEFAULT; + o->value.f = FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES_DEFAULT; o->rest.f.min = 0; o->rest.f.max = 10000; o->rest.f.precision = 1; - o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_SIZE]; - o->advanced = False; - o->name = "snow_size"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; - o->shortDesc = N_("Size of snowflakes"); - o->longDesc = N_("Size of snowflakes"); + o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE]; + o->name = "fireFlies_size"; + o->group=N_("Settings"); + o->subGroup=N_(""); + o->displayHints=""; + o->shortDesc = N_("Size of fireflies"); + o->longDesc = N_("Size of fireflies"); o->type = CompOptionTypeFloat; - o->value.f = SNOW_DISPLAY_OPTION_SNOW_SIZE_DEFAULT; + o->value.f = FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE_DEFAULT; o->rest.f.min = 0; o->rest.f.max = 50; o->rest.f.precision = 0.1; - o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_SPEED]; - o->advanced = False; - o->name = "snow_speed"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; - o->shortDesc = N_("Speed of falling snow"); - o->longDesc = N_("Speed of falling snow"); + o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED]; + o->name = "fireFlies_speed"; + o->group=N_("Settings"); + o->subGroup=N_(""); + o->displayHints=""; + o->shortDesc = N_("Speed of fireflies"); + o->longDesc = N_("Speed of fireflies"); o->type = CompOptionTypeFloat; - o->value.f = SNOW_DISPLAY_OPTION_SNOW_SPEED_DEFAULT; + o->value.f = FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED_DEFAULT; o->rest.f.min = 0; o->rest.f.max = 100; o->rest.f.precision = 1; - o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY]; - o->advanced = False; - o->name = "snow_update_delay"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; - o->shortDesc = N_("Update Delay"); - o->longDesc = - N_ - ("Delay in ms between screen updates. Deacreasing this value may make snow fall more smoothly, but will also increase CPU usage."); + o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY]; + o->name = "fireFlies_update_delay"; + o->group=N_("Settings"); + o->subGroup=N_(""); + o->displayHints=""; + o->shortDesc = N_("Screen Update Delay"); + o->longDesc = N_("Delay in ms between screen updates"); o->type = CompOptionTypeInt; - o->value.i = SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY_DEFAULT; + o->value.i = FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY_DEFAULT; o->rest.i.min = 10; o->rest.i.max = 200; - o = &sd->opt[SNOW_DISPLAY_OPTION_SCREEN_BOXING]; - o->advanced = False; + o = &sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_BOXING]; o->name = "screen_boxing"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; + o->group=N_("Settings"); + o->subGroup=N_(""); + o->displayHints=""; o->shortDesc = N_("Screen Boxing"); - o->longDesc = - N_ - ("How far outside the screen resolution snowflakes can be before being removed. Needed because of FOV."); + o->longDesc = N_("How far outside the screen resolution fireflies can be before being removed. Needed because of FOV."); o->type = CompOptionTypeFloat; - o->value.f = SNOW_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT; + o->value.f = FIREFLY_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT; o->rest.f.min = -2000; o->rest.f.max = 2000; o->rest.f.precision = 1; - o = &sd->opt[SNOW_DISPLAY_OPTION_SCREEN_DEPTH]; - o->advanced = False; + o = &sd->opt[FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH]; o->name = "screen_depth"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; + o->group=N_("Settings"); + o->subGroup=N_(""); + o->displayHints=""; o->shortDesc = N_("Screen Depth"); - o->longDesc = - N_ - ("How deep into the screen snowflakes can be drawn before being removed."); + o->longDesc = N_("How deep into the screen fireflies can be drawn before being removed."); o->type = CompOptionTypeFloat; - o->value.f = SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT; + o->value.f = FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT; o->rest.f.min = 0; - o->rest.f.max = SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT * 2; + o->rest.f.max = FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT * 2; o->rest.f.precision = 1; - o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES]; - o->advanced = False; - o->name = "snow_textures"; - o->group = N_("Textures"); - o->subGroup = N_(""); - o->displayHints = "file;image;pngonly;"; - o->shortDesc = N_("Snow Textures"); - o->longDesc = N_("Snow textures"); + o = &sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES]; + o->name = "fireFlies_textures"; + o->group=N_("Textures"); + o->subGroup=N_(""); + o->displayHints="file;image;pngonly;"; + o->shortDesc = N_("FireFly Textures"); + o->longDesc = N_("FireFly textures"); o->type = CompOptionTypeList; o->value.list.type = CompOptionTypeString; - o->value.list.nValue = N_SNOW_TEXTURES; - o->value.list.value = malloc(sizeof(CompOptionValue) * N_SNOW_TEXTURES); + o->value.list.nValue = N_FIREFLY_TEXTURES; + o->value.list.value = + malloc(sizeof(CompOptionValue) * N_FIREFLY_TEXTURES); int i = 0; - - for (i = 0; i < N_SNOW_TEXTURES; i++) - o->value.list.value[i].s = strdup(snowTextures[i]); + for (i = 0; i < N_FIREFLY_TEXTURES; i++) + o->value.list.value[i].s = strdup(fireFlyTextures[i]); o->rest.s.string = 0; o->rest.s.nString = 0; - o = &sd->opt[SNOW_DISPLAY_OPTION_INITIATE]; - o->advanced = False; + o = &sd->opt[FIREFLY_DISPLAY_OPTION_INITIATE]; o->name = "Initiate"; - o->group = N_("Key Bindings"); - o->subGroup = N_(""); + o->group = N_("Initiate"); + o->subGroup = N_("Key Bindings"); o->displayHints = ""; - o->shortDesc = N_("snow toggle key"); - o->longDesc = N_("snow toggle key"); + o->shortDesc = N_("FireFlies toggle key"); + o->longDesc = N_("FireFlies toggle key"); o->type = CompOptionTypeAction; - o->value.action.initiate = snowToggle; + o->value.action.initiate = fireFliesToggle; o->value.action.terminate = 0; o->value.action.bell = FALSE; o->value.action.type = CompBindingTypeKey; o->value.action.state = CompActionStateInitKey; o->value.action.state |= CompActionStateInitButton; - o->value.action.key.modifiers = SNOW_DISPLAY_OPTION_INITIATE_MOD; + o->value.action.key.modifiers = FIREFLY_DISPLAY_OPTION_INITIATE_MOD; o->value.action.key.keysym = - XStringToKeysym(SNOW_DISPLAY_OPTION_INITIATE_KEY); + XStringToKeysym (FIREFLY_DISPLAY_OPTION_INITIATE_KEY); - o = &sd->opt[SNOW_DISPLAY_OPTION_ON_TOP]; - o->advanced = False; - o->name = "snow_over_windows"; + o = &sd->opt[FIREFLY_DISPLAY_OPTION_ON_TOP]; + o->name = "fireFlies_over_windows"; o->group = N_("Settings"); o->subGroup = N_(""); o->displayHints = ""; - o->shortDesc = N_("Snow over windows."); - o->longDesc = N_("Snow is drawn above windows."); + o->shortDesc = N_("Fireflies over windows"); + o->longDesc = N_("Fireflies are drawn above windows."); o->type = CompOptionTypeBool; - o->value.b = SNOW_DISPLAY_OPTION_ON_TOP_DEFAULT; - - o = &sd->opt[SNOW_DISPLAY_OPTION_ROTATION]; - o->advanced = False; - o->name = "snow_rotation"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; - o->shortDesc = N_("Rotate flakes"); - o->longDesc = N_("Flakes rotate when checked."); - o->type = CompOptionTypeBool; - o->value.b = SNOW_DISPLAY_OPTION_ROTATION_DEFAULT; - - o = &sd->opt[SNOW_DISPLAY_OPTION_SNOW_DIRECTION]; - o->advanced = False; - o->name = "snow_direction"; - o->group = N_("Settings"); - o->subGroup = N_(""); - o->displayHints = ""; - o->shortDesc = N_("Snow Direction"); - o->longDesc = N_("Select direction in which the snow should fly."); - o->type = CompOptionTypeString; - o->value.s = - strdup(snowDirections[SNOW_DISPLAY_OPTION_DIRECTION_DEFAULT]); - o->rest.s.string = snowDirections; - o->rest.s.nString = NUM_SNOW_DIRECTIONS; + o->value.b = FIREFLY_DISPLAY_OPTION_ON_TOP_DEFAULT; - o = &sd->opt[SNOW_DISPLAY_OPTION_USE_BLENDING]; - o->advanced = False; + o = &sd->opt[FIREFLY_DISPLAY_OPTION_USE_BLENDING]; o->name = "use_blending"; o->group = N_("Debug"); o->subGroup = N_(""); o->displayHints = ""; o->shortDesc = N_("Enable Blending"); - o->longDesc = N_("Enables alpha blending of snowflakes"); + o->longDesc = N_("Enables alpha blending of fireflies"); o->type = CompOptionTypeBool; - o->value.b = SNOW_DISPLAY_OPTION_USE_BLENDING_DEFAULT; + o->value.b = FIREFLY_DISPLAY_OPTION_USE_BLENDING_DEFAULT; - o = &sd->opt[SNOW_DISPLAY_OPTION_USE_TEXTURES]; - o->advanced = False; + o = &sd->opt[FIREFLY_DISPLAY_OPTION_USE_TEXTURES]; o->name = "use_textures"; o->group = N_("Debug"); o->subGroup = N_(""); o->displayHints = ""; o->shortDesc = N_("Enable Textures"); - o->longDesc = - N_ - ("Enables textured snowflakes. Otherwise color gradients are used."); + o->longDesc = N_("Enables textured fireflies. Otherwise color gradients are used."); o->type = CompOptionTypeBool; - o->value.b = SNOW_DISPLAY_OPTION_USE_TEXTURES_DEFAULT; + o->value.b = FIREFLY_DISPLAY_OPTION_USE_TEXTURES_DEFAULT; } -static CompOption *snowGetDisplayOptions(CompDisplay * display, int *count) +static CompOption *fireFliesGetDisplayOptions(CompDisplay * display, int *count) { - if (display) - { - SNOW_DISPLAY(display); + if (display) { + FIREFLY_DISPLAY(display); *count = NUM_OPTIONS(sd); return sd->opt; } - else - { - SnowDisplay *sd = malloc(sizeof(SnowDisplay)); - - snowDisplayInitOptions(sd); + else { + FireFlyDisplay *sd = malloc(sizeof(FireFlyDisplay)); + fireFliesDisplayInitOptions(sd); *count = NUM_OPTIONS(sd); return sd->opt; } } -static Bool snowInitDisplay(CompPlugin * p, CompDisplay * d) +static Bool fireFliesInitDisplay(CompPlugin * p, CompDisplay * d) { - //Generate a snow display - SnowDisplay *sd = (SnowDisplay *) malloc(sizeof(SnowDisplay)); - + //Generate a fireFlies display + FireFlyDisplay *sd = (FireFlyDisplay *) malloc(sizeof(FireFlyDisplay)); //Allocate a private index sd->screenPrivateIndex = allocateScreenPrivateIndex(d); //Check if its valid - if (sd->screenPrivateIndex < 0) - { + if (sd->screenPrivateIndex < 0) { free(sd); return FALSE; } - numFlakes = SNOW_DISPLAY_OPTION_NUM_SNOWFLAKES_DEFAULT; - snowRotate = SNOW_DISPLAY_OPTION_ROTATION_DEFAULT; - snowSize = SNOW_DISPLAY_OPTION_SNOW_SIZE_DEFAULT; - snowSpeed = SNOW_DISPLAY_OPTION_SNOW_SPEED_DEFAULT; - snowUpdateDelay = SNOW_DISPLAY_OPTION_SNOW_UPDATE_DELAY_DEFAULT; - boxing = SNOW_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT; - depth = SNOW_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT; - onTop = SNOW_DISPLAY_OPTION_ON_TOP_DEFAULT; + numFlies = FIREFLY_DISPLAY_OPTION_NUM_FIREFLIES_DEFAULT; + fireFlySize = FIREFLY_DISPLAY_OPTION_FIREFLY_SIZE_DEFAULT; + fireFlySpeed = FIREFLY_DISPLAY_OPTION_FIREFLY_SPEED_DEFAULT; + fireFlyUpdateDelay = FIREFLY_DISPLAY_OPTION_FIREFLY_UPDATE_DELAY_DEFAULT; + boxing = FIREFLY_DISPLAY_OPTION_SCREEN_BOXING_DEFAULT; + depth = FIREFLY_DISPLAY_OPTION_SCREEN_DEPTH_DEFAULT; + onTop = FIREFLY_DISPLAY_OPTION_ON_TOP_DEFAULT; displayListNeedsUpdating = FALSE; - useBlending = SNOW_DISPLAY_OPTION_USE_BLENDING_DEFAULT; - useTextures = SNOW_DISPLAY_OPTION_USE_TEXTURES_DEFAULT; - snowDisplayInitOptions(sd); - - sd->snowTexFiles = - sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list.value; - sd->snowTexNFiles = - sd->opt[SNOW_DISPLAY_OPTION_SNOW_TEXTURES].value.list.nValue; + useBlending = FIREFLY_DISPLAY_OPTION_USE_BLENDING_DEFAULT; + useTextures = FIREFLY_DISPLAY_OPTION_USE_TEXTURES_DEFAULT; + fireFliesDisplayInitOptions(sd); + + sd->fireFliesTexFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.value; + sd->fireFliesTexNFiles = sd->opt[FIREFLY_DISPLAY_OPTION_FIREFLY_TEXTURES].value.list.nValue; //Record the display d->privates[displayPrivateIndex].ptr = sd; @@ -981,9 +877,9 @@ return TRUE; } -static void snowFiniDisplay(CompPlugin * p, CompDisplay * d) +static void fireFliesFiniDisplay(CompPlugin * p, CompDisplay * d) { - SNOW_DISPLAY(d); + FIREFLY_DISPLAY(d); //Free the private index freeScreenPrivateIndex(d, sd->screenPrivateIndex); @@ -991,7 +887,7 @@ free(sd); } -static Bool snowInit(CompPlugin * p) +static Bool fireFliesInit(CompPlugin * p) { displayPrivateIndex = allocateDisplayPrivateIndex(); @@ -1001,36 +897,34 @@ return TRUE; } -static void snowFini(CompPlugin * p) +static void fireFliesFini(CompPlugin * p) { if (displayPrivateIndex >= 0) freeDisplayPrivateIndex(displayPrivateIndex); } -CompPluginDep snowDeps[] = { - {CompPluginRuleAfterCategory, "imageformat"} - , +CompPluginDep fireflyDeps[] = { + {CompPluginRuleAfterCategory, "imageformat"}, }; -CompPluginVTable snowVTable = { - "snow", - N_("Snow"), - N_("XSnow for Beryl"), - snowInit, - snowFini, - snowInitDisplay, - snowFiniDisplay, - snowInitScreen, - snowFiniScreen, - 0, +CompPluginVTable fireFliesVTable = { + "firefly", + N_("FireFlies"), + N_("XFireFlies for Beryl"), + fireFliesInit, + fireFliesFini, + fireFliesInitDisplay, + fireFliesFiniDisplay, + fireFliesInitScreen, + fireFliesFiniScreen, 0, - snowGetDisplayOptions, - snowSetDisplayOption, - 0, /*snowGetScreenOptions */ - 0, /*snowSetScreenOption */ 0, - snowDeps, - sizeof(snowDeps) / sizeof(snowDeps[0]), + fireFliesGetDisplayOptions, + fireFliesSetDisplayOption, + 0, /*fireFliesGetScreenOptions */ + 0, /*fireFliesSetScreenOption */ + fireflyDeps, + sizeof(fireflyDeps) / sizeof(fireflyDeps[0]), 0, 0, BERYL_ABI_INFO, @@ -1043,5 +937,5 @@ CompPluginVTable *getCompPluginInfo(void) { - return &snowVTable; + return &fireFliesVTable; }