From a0bae79626c6100bc1cd98a244bab62d1b49414e Mon Sep 17 00:00:00 2001 From: Danny Baumann Date: Fri, 19 Dec 2008 09:36:19 +0100 Subject: [PATCH] Cleanup, compiz coding style. --- autumn.c | 54 +++-- bubbles.c | 44 ++-- elements.c | 776 ++++++++++++++++++++++++++++++++--------------------------- fireflies.c | 83 ++++--- snow.c | 12 +- stars.c | 49 +++-- 6 files changed, 562 insertions(+), 456 deletions(-) diff --git a/autumn.c b/autumn.c index ee780c0..f11fc0f 100644 --- a/autumn.c +++ b/autumn.c @@ -4,11 +4,10 @@ void initiateAutumnElement (CompScreen *s, - Element *e) + Element *e) { - int i; - float xSway = elementsMmRand(elementsGetAutumnSway( s),elementsGetAutumnSway( s),2.0); - float ySway = elementsGetAutumnYSway(s) / 20.0; + int i; + float xSway, ySway; AutumnElement *ae; if (!e->ptr) @@ -19,43 +18,52 @@ initiateAutumnElement (CompScreen *s, ae = (AutumnElement *) e->ptr; + xSway = elementsMmRand (elementsGetAutumnSway (s), + elementsGetAutumnSway (s), 2.0); + ySway = elementsGetAutumnYSway (s) / 20.0; + for (i = 0; i < MAX_AUTUMN_AGE; i++) - { - ae->autumnFloat[0][i] = -xSway + (i * ((2 * xSway)/(MAX_AUTUMN_AGE-1))); - } + ae->autumnFloat[0][i] = -xSway + + (i * ((2 * xSway) / (MAX_AUTUMN_AGE - 1))); + for (i = 0; i < (MAX_AUTUMN_AGE / 2); i++) - { - ae->autumnFloat[1][i] = -ySway + (i * ((2 * ySway)/(MAX_AUTUMN_AGE-1))); - } + ae->autumnFloat[1][i] = -ySway + + (i * ((2 * ySway) / (MAX_AUTUMN_AGE - 1))); + for (; i < MAX_AUTUMN_AGE; i++) - { - ae->autumnFloat[1][i] = ySway - (i * ((2 * ySway)/(MAX_AUTUMN_AGE-1))); - } - ae->autumnAge[0] = elementsGetRand(0,MAX_AUTUMN_AGE-1); - ae->autumnAge[1] = elementsGetRand(0,(MAX_AUTUMN_AGE/2)-1); - e->x = elementsMmRand (0, s->width, 1); ae->autumnChange = 1; + ae->autumnFloat[1][i] = ySway - + (i * ((2 * ySway) / (MAX_AUTUMN_AGE - 1))); + + ae->autumnAge[0] = elementsGetRand (0, MAX_AUTUMN_AGE - 1); + ae->autumnAge[1] = elementsGetRand (0, (MAX_AUTUMN_AGE / 2) - 1); + ae->autumnChange = 1; + + e->x = elementsMmRand (0, s->width, 1); e->y = -elementsMmRand (100, BIG_NUMBER, 1); e->dy = elementsMmRand (-2, -1, 5); } void -autumnMove (CompScreen *s, +autumnMove (CompScreen *s, ElementAnimation *anim, - Element *e, - int updateDelay) + Element *e, + int updateDelay) { - float autumnSpeed = anim->speed/30.0f; + float autumnSpeed = anim->speed / 30.0f; AutumnElement *ae = (AutumnElement *) e->ptr; - if (!e->ptr) + if (!ae) return; - e->x += (ae->autumnFloat[0][ae->autumnAge[0]] * (float) updateDelay) * 0.0125; - e->y += (ae->autumnFloat[1][ae->autumnAge[1]] * (float) updateDelay) * 0.0125 + autumnSpeed; + e->x += (ae->autumnFloat[0][ae->autumnAge[0]] * (float) updateDelay) / 80; + e->y += (ae->autumnFloat[1][ae->autumnAge[1]] * (float) updateDelay) / 80 + + autumnSpeed; e->z += (e->dz * (float) updateDelay) * autumnSpeed / 100.0; e->rAngle += ((float) updateDelay) / (10.1f - e->rSpeed); + ae->autumnAge[0] += ae->autumnChange; ae->autumnAge[1] += 1; + if (ae->autumnAge[1] >= MAX_AUTUMN_AGE) { ae->autumnAge[1] = 0; diff --git a/bubbles.c b/bubbles.c index 5da95a3..8343dcd 100644 --- a/bubbles.c +++ b/bubbles.c @@ -4,13 +4,12 @@ void initiateBubbleElement (CompScreen *s, - Element *e) + Element *e) { - int i; - float temp = elementsMmRand (elementsGetViscosity (s) / 2.0, - elementsGetViscosity (s),50.0); - float xSway = 1.0 - temp*temp * 1.0 / 4.0; + int i; + float temp, xSway; BubbleElement *be; + if (!e->ptr) e->ptr = calloc (1, sizeof (BubbleElement)); @@ -19,37 +18,40 @@ initiateBubbleElement (CompScreen *s, be = (BubbleElement *) e->ptr; + temp = elementsMmRand (elementsGetViscosity (s) / 2.0, + elementsGetViscosity (s), 50.0); + xSway = 1.0 - temp * temp / 4.0; + for (i = 0; i < MAX_AUTUMN_AGE; i++) - { - be->bubbleFloat[0][i] = - -xSway + (i * ((2 * xSway) / (MAX_AUTUMN_AGE-1))); - } + be->bubbleFloat[0][i] = -xSway + + (i * ((2 * xSway) / (MAX_AUTUMN_AGE - 1))); - be->bubbleAge[0] = elementsGetRand(0,MAX_AUTUMN_AGE-1); + be->bubbleAge[0] = elementsGetRand (0, MAX_AUTUMN_AGE - 1); be->bubbleAge[1] = be->bubbleAge[0]; - e->x = elementsMmRand (0, s->width, 1); be->bubbleChange = 1; - e->y = elementsMmRand (s->height+100, s->height+ BIG_NUMBER,1); + + e->x = elementsMmRand (0, s->width, 1); + e->y = elementsMmRand (s->height + 100, s->height + BIG_NUMBER, 1); e->dy = elementsMmRand (-2, -1, 5); } void -bubbleMove (CompScreen *s, +bubbleMove (CompScreen *s, ElementAnimation *anim, - Element *e, - int updateDelay) + Element *e, + int updateDelay) { - float bubblesSpeed = anim->speed / 30.0f; + float bubblesSpeed = anim->speed / 30.0f; BubbleElement *be = (BubbleElement *) e->ptr; - if (!e->ptr) + if (!be) return; - e->x += (be->bubbleFloat[0][be->bubbleAge[0]] - * (float) updateDelay) * 0.125; + e->x += (be->bubbleFloat[0][be->bubbleAge[0]] * (float) updateDelay) / 8; e->y += (e->dy * (float) updateDelay) * bubblesSpeed; e->z += (e->dz * (float) updateDelay) * bubblesSpeed / 100.0; e->rAngle += ((float) updateDelay) / (10.1f - e->rSpeed); + be->bubbleAge[0] += be->bubbleChange; if (be->bubbleAge[0] >= MAX_AUTUMN_AGE) { @@ -65,14 +67,12 @@ bubbleMove (CompScreen *s, void bubbleFini (CompScreen *s, - Element *e) + Element *e) { BubbleElement *be = (BubbleElement *) e->ptr; if (be) - { free (be); - } e->ptr = NULL; } diff --git a/elements.c b/elements.c index 2458316..26865ee 100644 --- a/elements.c +++ b/elements.c @@ -40,7 +40,8 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. **/ #include @@ -56,7 +57,7 @@ int elementsGetRand (int min, int max) { - return (rand() % (max - min + 1) + min); + return (rand () % (max - min + 1) + min); } float @@ -64,7 +65,7 @@ elementsMmRand (int min, int max, float divisor) { - return ((float) elementsGetRand(min, max)) / divisor; + return ((float) elementsGetRand (min, max)) / divisor; } int elementsGetEBoxing (CompScreen *s) @@ -81,15 +82,16 @@ int elementsGetEDepth (CompScreen *s) * remove it and re-initiate it. Otherwise move it */ static void -elementTestCreate (CompScreen *s, - Element *ele, +elementTestCreate (CompScreen *s, + Element *ele, ElementAnimation *anim) { if (ele) { - if ((ele->y >= s->height + 200 || ele->x <= -200 || - ele->x >= s->width + 200 || - ele->y >= s->height + 200 || + if ((ele->y >= s->height + 200 || + ele->x <= -200 || + ele->x >= s->width + 200 || + ele->y >= s->height + 200 || ele->z <= -((float) elementsGetScreenDepth (s) / 500.0) || ele->z >= ((float)elementsGetScreenBoxing (s) / 5.0f))) { @@ -108,10 +110,10 @@ elementTestCreate (CompScreen *s, */ static Bool -elementTestOffscreen (CompScreen *s, +elementTestOffscreen (CompScreen *s, ElementAnimation *anim) { - int i; + int i; Element *e; Bool ret = TRUE; @@ -120,13 +122,14 @@ elementTestOffscreen (CompScreen *s, e = &anim->elements[i]; if (e) { - if (!(e->y >= s->height + 200 || e->x <= -200|| - e->x >= s->width + 200 || - e->y >= s->height + 200 || - e->z <= -((float) elementsGetScreenDepth (s) / 500.0) || - e->z >= 1 || - e->y <= -((float)elementsGetScreenBoxing (s) / 5.0f)) - && e->opacity > 0.0f) + if (!(e->y >= s->height + 200 || + e->x <= -200 || + e->x >= s->width + 200 || + e->y >= s->height + 200 || + e->z <= -((float) elementsGetScreenDepth (s) / 500.0) || + e->z >= 1 || + e->y <= -((float) elementsGetScreenBoxing (s) / 5.0f)) && + e->opacity > 0.0f) { ret = FALSE; } @@ -154,10 +157,10 @@ elementTestOffscreen (CompScreen *s, /* Element Text Display Management */ -static void +static void elementsFreeTitle (CompScreen *s) { - ELEMENTS_SCREEN(s); + ELEMENTS_SCREEN (s); if (!es->textPixmap) return; @@ -169,19 +172,19 @@ elementsFreeTitle (CompScreen *s) damageScreen (s); } -static void +static void elementsRenderTitle (CompScreen *s, - char *stringData) + char *stringData) { CompTextAttrib tA; int stride; void *data; + int ox1, ox2, oy1, oy2; ELEMENTS_SCREEN (s); elementsFreeTitle (s); - int ox1, ox2, oy1, oy2; getCurrentOutputExtents (s, &ox1, &oy1, &ox2, &oy2); /* 75% of the output device es maximum width */ @@ -193,9 +196,8 @@ elementsRenderTitle (CompScreen *s, tA.color[1] = elementsGetTitleFontColorGreen (s); tA.color[2] = elementsGetTitleFontColorBlue (s); tA.color[3] = elementsGetTitleFontColorAlpha (s); - - tA.style = TEXT_STYLE_NORMAL; - tA.style |= TEXT_STYLE_BACKGROUND; + + tA.style = TEXT_STYLE_NORMAL | TEXT_STYLE_BACKGROUND; tA.backgroundHMargin = 10.0f; tA.backgroundVMargin = 10.0f; tA.backgroundColor[0] = elementsGetTitleBackColorRed (s); @@ -207,7 +209,7 @@ elementsRenderTitle (CompScreen *s, tA.renderMode = TextRenderNormal; - tA.data = (void*)stringData; + tA.data = (void *) stringData; initTexture (s, &es->textTexture); @@ -232,21 +234,21 @@ elementsRenderTitle (CompScreen *s, static void elementsDrawTitle (CompScreen *s) { + GLboolean wasBlend; + GLint oldBlendSrc, oldBlendDst; + float x, y, width, height; + int ox1, ox2, oy1, oy2, k; + CompMatrix *m; + ELEMENTS_SCREEN(s); - GLboolean wasBlend; - GLint oldBlendSrc, oldBlendDst; - float width = es->textWidth; - float height = es->textHeight; + width = es->textWidth; + height = es->textHeight; - int ox1, ox2, oy1, oy2; getCurrentOutputExtents (s, &ox1, &oy1, &ox2, &oy2); - float x = ox1 + ((ox2 - ox1) / 2) - (width / 2); - float y = oy1 + ((oy2 - oy1) * 3 / 4) + (height / 2); - - x = floor (x); - y = floor (y); + x = floor (ox1 + ((ox2 - ox1) / 2) - (width / 2)); + y = floor (oy1 + ((oy2 - oy1) * 3 / 4) + (height / 2)); glGetIntegerv (GL_BLEND_SRC, &oldBlendSrc); glGetIntegerv (GL_BLEND_DST, &oldBlendDst); @@ -258,9 +260,9 @@ elementsDrawTitle (CompScreen *s) glColor4f(1.0f, 1.0f, 1.0f, 0.7f); - enableTexture (s, &es->textTexture,COMP_TEXTURE_FILTER_GOOD); + enableTexture (s, &es->textTexture, COMP_TEXTURE_FILTER_GOOD); - CompMatrix *m = &es->textTexture.matrix; + m = &es->textTexture.matrix; if (es->renderTexture && es->eTexture) { @@ -299,17 +301,18 @@ elementsDrawTitle (CompScreen *s) if (es->renderTexture && es->eTexture) { int border = 5; - width = es->eTexture[es->nTexture].width; + width = es->eTexture[es->nTexture].width; height = es->eTexture[es->nTexture].height; glPushMatrix (); - glColor4f((float)elementsGetTitleBackColorRed (s) / OPAQUE, - (float)elementsGetTitleBackColorGreen (s) / OPAQUE, - (float)elementsGetTitleBackColorBlue (s) / OPAQUE, - (float)elementsGetTitleBackColorAlpha (s) / OPAQUE); + glColor4f ((float) elementsGetTitleBackColorRed (s) / OPAQUE, + (float) elementsGetTitleBackColorGreen (s) / OPAQUE, + (float) elementsGetTitleBackColorBlue (s) / OPAQUE, + (float) elementsGetTitleBackColorAlpha (s) / OPAQUE); - glTranslatef (x + es->textWidth - width, y - height + (border / 2), + glTranslatef (x + es->textWidth - width, + y - height + (border / 2), 0.0f); glRectf (0.0f, height, width, 0.0f); glRectf (0.0f, 0.0f, width, -border); @@ -327,7 +330,6 @@ glVertex2f (cos (rad) * border, sin (rad) * border);\ glVertex2f (cos ((k - 1) * (M_PI / 180.0f)) * border, \ sin ((k - 1) * (M_PI / 180.0f)) * border);\ } - int k; glTranslatef (border, border, 0.0f); glBegin (GL_TRIANGLES); @@ -374,9 +376,9 @@ glVertex2f (cos ((k - 1) * (M_PI / 180.0f)) * border, \ /* Element Animation Management */ static Bool -elementsPropertiesForAnimation (CompDisplay *d, +elementsPropertiesForAnimation (CompDisplay *d, ElementAnimation *anim, - char *name) + char *name) { ELEMENTS_DISPLAY (d); @@ -384,7 +386,7 @@ elementsPropertiesForAnimation (CompDisplay *d, for (info = ed->elementTypes; info; info = info->next) { - if (strcmp(info->name,name)==0) + if (!strcmp (info->name, name)) { anim->properties = info; return TRUE; @@ -395,16 +397,19 @@ elementsPropertiesForAnimation (CompDisplay *d, } ElementAnimation * -elementsCreateAnimation (CompScreen *s, char *name) +elementsCreateAnimation (CompScreen *s, + char *name) { - ELEMENTS_SCREEN (s); ElementAnimation *anim; + ELEMENTS_SCREEN (s); + if (!es->animations) { es->animations = calloc (1, sizeof (ElementAnimation)); if (!es->animations) return NULL; + es->animations->next = NULL; anim = es->animations; } @@ -416,15 +421,16 @@ elementsCreateAnimation (CompScreen *s, char *name) anim->next = calloc (1, sizeof (ElementAnimation)); if (!anim->next) return NULL; + anim->next->next = NULL; anim = anim->next; } if (!elementsPropertiesForAnimation (s->display, anim, name)) { - compLogMessage ("Elements", - CompLogLevelWarn, "Could not find element movement pattern %s\n" - " disabling this element", name); + compLogMessage ("elements", CompLogLevelWarn, + "Could not find element movement pattern %s, " + "disabling this element", name); free (anim); return NULL; } @@ -433,12 +439,13 @@ elementsCreateAnimation (CompScreen *s, char *name) } void -elementsDeleteAnimation (CompScreen *s, +elementsDeleteAnimation (CompScreen *s, ElementAnimation *anim) { - ELEMENTS_SCREEN (s); ElementAnimation *run; + ELEMENTS_SCREEN (s); + if (es->animations) { if (anim == es->animations) @@ -469,21 +476,23 @@ elementsDeleteAnimation (CompScreen *s, /* Type Info Management */ static Bool -elementsCreateNewElementType (CompDisplay *d, - char *name, - char *desc, +elementsCreateNewElementType (CompDisplay *d, + char *name, + char *desc, ElementInitiateProc initiate, ElementMoveProc move, ElementFiniProc fini) { - ELEMENTS_DISPLAY (d); ElementTypeInfo *info; + ELEMENTS_DISPLAY (d); + if (!ed->elementTypes) { ed->elementTypes = calloc (1, sizeof (ElementTypeInfo)); if (!ed->elementTypes) return FALSE; + ed->elementTypes->next = NULL; info = ed->elementTypes; } @@ -495,6 +504,7 @@ elementsCreateNewElementType (CompDisplay *d, info->next = calloc (1, sizeof (ElementTypeInfo)); if (!info->next) return FALSE; + info->next->next = NULL; info = info->next; } @@ -510,36 +520,42 @@ elementsCreateNewElementType (CompDisplay *d, static void elementsRemoveElementType (CompScreen *s, - char *name) + char *name) { + ElementAnimation *anim, *next; + ElementTypeInfo *info; + ELEMENTS_DISPLAY (s->display); ELEMENTS_SCREEN (s); - ElementAnimation *anim; - ElementAnimation *next; for (anim = es->animations; anim; anim = next) { next = anim->next; - if (strcmp(anim->type, name)==0) + + if (!strcmp (anim->type, name)) { int i; + for (i = 0; i < anim->nTextures; i++) { finiTexture (s, &anim->texture[i].tex); glDeleteLists (anim->texture[i].dList, 1); } + for (i = 0; i < anim->nElement; i++) + { if (anim->properties->fini) (*anim->properties->fini) (s, &anim->elements[i]); + } + free (anim->elements); free (anim->texture); elementsDeleteAnimation (s, anim); } } - ElementTypeInfo *info; for (info = ed->elementTypes; info; info = info->next) - if (strcmp(info->name, name)==0) + if (!strcmp (info->name, name)) break; if (info) @@ -556,6 +572,7 @@ elementsRemoveElementType (CompScreen *s, else { ElementTypeInfo *run; + for (run = ed->elementTypes; run; run = run->next) { if (run == info) @@ -574,12 +591,12 @@ elementsRemoveElementType (CompScreen *s, } static Bool -textureToAnimation (CompScreen *s, +textureToAnimation (CompScreen *s, ElementAnimation *anim, - CompListValue *paths, - CompListValue *iters, - int size, - int iter) + CompListValue *paths, + CompListValue *iters, + int size, + int iter) { ElementTexture *aTex; CompMatrix *mat; @@ -603,13 +620,15 @@ textureToAnimation (CompScreen *s, { initTexture (s, &anim->texture[texIter].tex); anim->texture[texIter].loaded = - readImageToTexture (s, &anim->texture[texIter].tex, - paths->value[i].s, - &anim->texture[texIter].width, - &anim->texture[texIter].height); + readImageToTexture (s, + &anim->texture[texIter].tex, + paths->value[i].s, + &anim->texture[texIter].width, + &anim->texture[texIter].height); + if (!anim->texture[texIter].loaded) { - compLogMessage ("Elements", CompLogLevelWarn, + compLogMessage ("elements", CompLogLevelWarn, "Texture for animation %s not found at" " location %s or invalid", anim->type, paths->value[i].s); @@ -617,7 +636,7 @@ textureToAnimation (CompScreen *s, } else { - compLogMessage ("Elements", CompLogLevelInfo, + compLogMessage ("elements", CompLogLevelInfo, "Loaded Texture %s for animation %s", paths->value[i].s, anim->type); } @@ -655,47 +674,53 @@ textureToAnimation (CompScreen *s, static Bool createElementAnimation (CompScreen *s, - int nElement, - char *type, - int size, - int speed, - int iter) + int nElement, + char *type, + int size, + int speed, + int iter) { ElementAnimation *anim = elementsCreateAnimation (s, type); - if (anim) + CompListValue *paths, *iters; + + if (!anim) + return FALSE; + + paths = elementsGetElementImage (s); + iters = elementsGetElementIter (s); + + anim->nElement = nElement; + anim->size = size; + anim->speed = speed; + anim->id = iter; + anim->type = type; + anim->nTextures = 0; + + if (textureToAnimation (s, anim, paths, iters, size, iter) && + anim->nTextures) { - CompListValue *paths = elementsGetElementImage (s); - CompListValue *iters = elementsGetElementIter (s); - anim->nElement = nElement; - anim->size = size; - anim->speed = speed; - anim->id = iter; - anim->type = type; - anim->nTextures = 0; - if (textureToAnimation (s, anim, paths, iters, size, iter) - && anim->nTextures) - { - Element *e; - anim->elements = realloc (anim->elements, - sizeof (Element) * nElement); - e = anim->elements; - while (nElement--) - { - e->type = type; - initiateElement (s, anim, e); - e++; - } - anim->active = TRUE; - return TRUE; - } - else + Element *e; + + anim->elements = realloc (anim->elements, + sizeof (Element) * nElement); + /* FIXME: NULL check? */ + + e = anim->elements; + while (nElement--) { - if (anim->texture) - free (anim->texture); - elementsDeleteAnimation (s, anim); - return FALSE; + e->type = type; + initiateElement (s, anim, e); + e++; } + anim->active = TRUE; + + return TRUE; } + + if (anim->texture) + free (anim->texture); + elementsDeleteAnimation (s, anim); + return FALSE; } @@ -705,20 +730,26 @@ static Bool elementsRemoveTimeout (void *closure) { CompScreen *s = (CompScreen *) closure; - int i; + int i; ELEMENTS_SCREEN (s); - es->renderText = FALSE; + + es->renderText = FALSE; es->renderTexture = FALSE; + elementsFreeTitle (s); + for (i = 0; i < es->ntTextures; i++) { finiTexture (s, &es->eTexture[i].tex); glDeleteLists (es->eTexture[i].dList, 1); } + free (es->eTexture); es->eTexture = NULL; + damageScreen (s); + if (es->switchTimeout) compRemoveTimeout (es->switchTimeout); @@ -731,46 +762,51 @@ elementsSwitchTextures (void *closure) CompScreen *s = (CompScreen *) closure; ELEMENTS_SCREEN (s); + es->nTexture = ++es->nTexture % (es->ntTextures); damageScreen (s); + return TRUE; } static void -addDisplayTimeouts (CompScreen *s, Bool switchIt) +addDisplayTimeouts (CompScreen *s, + Bool switchIt) { + int time = elementsGetTitleDisplayTime (s); + ELEMENTS_SCREEN (s); if (es->renderTimeout) compRemoveTimeout (es->renderTimeout); - es->renderTimeout = compAddTimeout (elementsGetTitleDisplayTime (s), - elementsGetTitleDisplayTime (s) * 2.0, + + es->renderTimeout = compAddTimeout (time, time * 2.0, elementsRemoveTimeout, s); if (switchIt) { if (es->switchTimeout) compRemoveTimeout (es->switchTimeout); - es->switchTimeout = - compAddTimeout (elementsGetTitleDisplayTime (s) / es->ntTextures, - (elementsGetTitleDisplayTime (s) / es->ntTextures * 2.0), - elementsSwitchTextures, s); + + es->switchTimeout = compAddTimeout (time / es->ntTextures, + time * 2 / es->ntTextures, + elementsSwitchTextures, s); } } static Bool -createTemporaryTexture (CompScreen *s, +createTemporaryTexture (CompScreen *s, CompListValue *paths, CompListValue *iters, - int iter, - int size) + int iter, + int size) { - ELEMENTS_SCREEN (s); - CompMatrix *mat; int i; int texIter = 0; + ELEMENTS_SCREEN (s); + es->ntTextures = 0; es->nTexture = 0; @@ -800,20 +836,23 @@ createTemporaryTexture (CompScreen *s, { initTexture (s, &es->eTexture[texIter].tex); - es->eTexture[texIter].loaded = readImageToTexture (s, &es->eTexture[texIter].tex, + es->eTexture[texIter].loaded = + readImageToTexture (s, + &es->eTexture[texIter].tex, paths->value[i].s, &es->eTexture[texIter].width, &es->eTexture[texIter].height); + if (!es->eTexture[texIter].loaded) { - compLogMessage ("Elements", CompLogLevelWarn, + compLogMessage ("elements", CompLogLevelWarn, "Texture not found or invalid at %s", paths->value[i].s); return FALSE; } else { - compLogMessage ("Elements", CompLogLevelInfo, + compLogMessage ("elements", CompLogLevelInfo, "Loaded Texture %s", paths->value[i].s); } @@ -858,19 +897,22 @@ elementsNextElement (CompDisplay *d, int nOption) { CompScreen *s; - CompListValue *cType, *cPath, *cIter; - char *string; - int i; - Bool foundHigher = FALSE; - ElementTypeInfo *info; - s = findScreenAtDisplay (d, - getIntOptionNamed (option, nOption, "root", -1)); + Window xid; - ELEMENTS_DISPLAY (d); + xid = getIntOptionNamed (option, nOption, "root", 0); + s = findScreenAtDisplay (d, xid); if (s) { + CompListValue *cType, *cPath, *cIter; + char *string; + int i; + Bool foundHigher = FALSE; + ElementTypeInfo *info; + + ELEMENTS_DISPLAY (d); ELEMENTS_SCREEN (s); + cType = elementsGetElementType (s); cPath = elementsGetElementImage (s); cIter = elementsGetElementIter (s); @@ -880,7 +922,7 @@ elementsNextElement (CompDisplay *d, { compLogMessage ("elements", CompLogLevelWarn, "Options are not set correctly," - " cannot read this setting\n"); + " cannot read this setting."); return FALSE; } @@ -888,7 +930,7 @@ elementsNextElement (CompDisplay *d, { if (cIter->value[i].i > es->animIter) { - foundHigher = TRUE; + foundHigher = TRUE; es->listIter = i; es->animIter = cIter->value[i].i; break; @@ -905,7 +947,7 @@ elementsNextElement (CompDisplay *d, { for (info = ed->elementTypes; info; info = info->next) { - if (strcmp (info->name, cType->value[es->listIter].s)==0) + if (!strcmp (info->name, cType->value[es->listIter].s)) { string = info->desc; break; @@ -915,24 +957,23 @@ elementsNextElement (CompDisplay *d, if (string) { elementsRenderTitle (s, string); - es->renderText = TRUE; + es->renderText = TRUE; es->renderTexture = - createTemporaryTexture (s, cPath, cIter, es->animIter, - es->textHeight); - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + createTemporaryTexture (s, cPath, cIter, + es->animIter, es->textHeight); + addDisplayTimeouts (s, es->ntTextures > 1); damageScreen (s); - } } else if (ed->textAvailable) { elementsRenderTitle (s, "No elements have been defined"); es->renderText = TRUE; - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + addDisplayTimeouts (s, es->ntTextures > 1); } } - return TRUE; + return FALSE; } static Bool @@ -942,20 +983,23 @@ elementsPrevElement (CompDisplay *d, CompOption *option, int nOption) { - CompScreen *s; - CompListValue *cType, *cPath, *cIter; - char *string; - int i; - Bool foundLower = FALSE; - ElementTypeInfo *info; - s = findScreenAtDisplay (d, - getIntOptionNamed (option, nOption, "root", -1)); + CompScreen *s; + Window xid; - ELEMENTS_DISPLAY (d); + xid = getIntOptionNamed (option, nOption, "root", 0); + s = findScreenAtDisplay (d, xid); if (s) { + CompListValue *cType, *cPath, *cIter; + char *string; + int i; + Bool foundLower = FALSE; + ElementTypeInfo *info; + + ELEMENTS_DISPLAY (d); ELEMENTS_SCREEN (s); + cType = elementsGetElementType (s); cPath = elementsGetElementImage (s); cIter = elementsGetElementIter (s); @@ -965,7 +1009,7 @@ elementsPrevElement (CompDisplay *d, { compLogMessage ("elements", CompLogLevelWarn, "Options are not set correctly," - " cannot read this settings\n"); + " cannot read this setting."); return FALSE; } @@ -973,7 +1017,7 @@ elementsPrevElement (CompDisplay *d, { if (cIter->value[i].i < es->animIter) { - foundLower = TRUE; + foundLower = TRUE; es->listIter = i; es->animIter = cIter->value[i].i; break; @@ -983,6 +1027,7 @@ elementsPrevElement (CompDisplay *d, if (!foundLower) { int highest = 0; + for (i = 0; i < cIter->nValue; i++) if (cIter->value[i].i > highest) highest = cIter->value[i].i; @@ -999,7 +1044,7 @@ elementsPrevElement (CompDisplay *d, { for (info = ed->elementTypes; info; info = info->next) { - if (strcmp (info->name, cType->value[es->listIter].s)==0) + if (!strcmp (info->name, cType->value[es->listIter].s)) { string = info->desc; break; @@ -1009,11 +1054,11 @@ elementsPrevElement (CompDisplay *d, if (string) { elementsRenderTitle (s, string); - es->renderText = TRUE; + es->renderText = TRUE; es->renderTexture = - createTemporaryTexture (s, cPath, cIter, es->animIter, - es->textHeight); - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + createTemporaryTexture (s, cPath, cIter, + es->animIter, es->textHeight); + addDisplayTimeouts (s, es->ntTextures > 1); damageScreen (s); } @@ -1022,12 +1067,12 @@ elementsPrevElement (CompDisplay *d, { elementsRenderTitle (s, "No elements have been defined"); es->renderText = TRUE; - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + addDisplayTimeouts (s, es->ntTextures > 1); } } - return TRUE; + return FALSE; } static Bool @@ -1038,22 +1083,25 @@ elementsToggleSelected (CompDisplay *d, int nOption) { CompScreen *s; - char *string; - Bool success = TRUE; - ElementTypeInfo *info; - s = findScreenAtDisplay (d, - getIntOptionNamed (option, nOption, "root", -1)); - - ELEMENTS_DISPLAY (d); + Window xid; + + xid = getIntOptionNamed (option, nOption, "root", 0); + s = findScreenAtDisplay (d, xid); if (s) { - CompListValue *cIter = elementsGetElementIter (s); - CompListValue *cType = elementsGetElementType (s); - CompListValue *cPath = elementsGetElementImage (s); - CompListValue *cCap = elementsGetElementCap (s); - CompListValue *cSize = elementsGetElementSize (s); - CompListValue *cSpeed = elementsGetElementSpeed (s); + char *string; + Bool success = TRUE; + ElementTypeInfo *info; + CompListValue *cIter = elementsGetElementIter (s); + CompListValue *cType = elementsGetElementType (s); + CompListValue *cPath = elementsGetElementImage (s); + CompListValue *cCap = elementsGetElementCap (s); + CompListValue *cSize = elementsGetElementSize (s); + CompListValue *cSpeed = elementsGetElementSpeed (s); + ElementAnimation *anim; + + ELEMENTS_DISPLAY (d); ELEMENTS_SCREEN (s); if (!((cType->nValue == cIter->nValue) && @@ -1064,7 +1112,7 @@ elementsToggleSelected (CompDisplay *d, { compLogMessage ("elements", CompLogLevelWarn, "Options are not set correctly," - " cannot read this settings\n"); + " cannot read this setting."); return FALSE; } @@ -1074,11 +1122,10 @@ elementsToggleSelected (CompDisplay *d, { elementsRenderTitle (s, "No elements have been defined\n"); es->renderText = TRUE; - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + addDisplayTimeouts (s, es->ntTextures > 1); } } - ElementAnimation *anim; for (anim = es->animations; anim; anim = anim->next) { if (anim->id == es->animIter) @@ -1090,20 +1137,19 @@ elementsToggleSelected (CompDisplay *d, if (!anim) { - success = - createElementAnimation (s, - cCap->value[es->listIter].i, - cType->value[es->listIter].s, - cSize->value[es->listIter].i, - cSpeed->value[es->listIter].i, - es->animIter); + success = createElementAnimation (s, + cCap->value[es->listIter].i, + cType->value[es->listIter].s, + cSize->value[es->listIter].i, + cSpeed->value[es->listIter].i, + es->animIter); } if (ed->textAvailable && elementsGetTitleOnToggle (s) && success) { for (info = ed->elementTypes; info; info = info->next) { - if (strcmp (info->name, cType->value[es->listIter].s)==0) + if (!strcmp (info->name, cType->value[es->listIter].s)) { string = info->desc; break; @@ -1113,11 +1159,11 @@ elementsToggleSelected (CompDisplay *d, if (string) { elementsRenderTitle (s, string); - es->renderText = TRUE; + es->renderText = TRUE; es->renderTexture = - createTemporaryTexture (s, cPath, cIter, es->animIter, - es->textHeight); - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + createTemporaryTexture (s, cPath, cIter, + es->animIter, es->textHeight); + addDisplayTimeouts (s, es->ntTextures > 1); damageScreen (s); } @@ -1127,20 +1173,20 @@ elementsToggleSelected (CompDisplay *d, elementsRenderTitle (s, "Error - Element image was not found" " or is invalid"); es->renderText = TRUE; - addDisplayTimeouts (s, es->ntTextures > 1 ? TRUE : FALSE); + addDisplayTimeouts (s, es->ntTextures > 1); damageScreen (s); } } - return TRUE; + return FALSE; } static void setupDisplayList (CompScreen *s) { ELEMENTS_SCREEN (s); - + es->displayList = glGenLists (1); glNewList (es->displayList, GL_COMPILE); glBegin (GL_QUADS); @@ -1159,7 +1205,10 @@ setupDisplayList (CompScreen *s) static void beginRendering (CompScreen *s) { + ElementAnimation *anim; + ELEMENTS_SCREEN (s); + glEnable (GL_BLEND); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); @@ -1169,29 +1218,33 @@ beginRendering (CompScreen *s) es->needUpdate = FALSE; } - ElementAnimation *anim; - for (anim = es->animations; anim; anim = anim->next) { int num = anim->nElement; int i; + if (anim->nTextures > 0) - for (i = 0; i < num; i++) { - Element *e = &anim->elements[i]; - int nTexture = e->nTexture % anim->nTextures; - enableTexture (s, &anim->texture[nTexture].tex, - COMP_TEXTURE_FILTER_GOOD); - glColor4f (1.0, 1.0, 1.0, e->opacity); - glTranslatef (e->x, e->y, e->z); - glRotatef (e->rAngle, 0, 0, 1); - glCallList (anim->texture[nTexture].dList); - glRotatef (-e->rAngle, 0, 0, 1); - glTranslatef (-e->x, -e->y, -e->z); - disableTexture (s, &anim->texture[nTexture].tex); + for (i = 0; i < num; i++) + { + Element *e = &anim->elements[i]; + int nTexture = e->nTexture % anim->nTextures; + + enableTexture (s, &anim->texture[nTexture].tex, + COMP_TEXTURE_FILTER_GOOD); + + glColor4f (1.0, 1.0, 1.0, e->opacity); + glTranslatef (e->x, e->y, e->z); + glRotatef (e->rAngle, 0, 0, 1); + glCallList (anim->texture[nTexture].dList); + glRotatef (-e->rAngle, 0, 0, 1); + glTranslatef (-e->x, -e->y, -e->z); + + disableTexture (s, &anim->texture[nTexture].tex); + } } } - + glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glDisable (GL_BLEND); glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); @@ -1201,42 +1254,35 @@ beginRendering (CompScreen *s) static Bool elementsPaintOutput (CompScreen *s, const ScreenPaintAttrib *sa, - const CompTransform *transform, + const CompTransform *transform, Region region, - CompOutput *output, + CompOutput *output, unsigned int mask) { Bool status; ELEMENTS_SCREEN (s); - Bool active = FALSE; - if (es->animations) - active = TRUE; - if (active && elementsGetOverWindows (s)) + if (es->animations && elementsGetOverWindows (s)) mask |= PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS_MASK; UNWRAP (es, s, paintOutput); status = (*s->paintOutput) (s, sa, transform, region, output, mask); WRAP (es, s, paintOutput, elementsPaintOutput); - if (active && elementsGetOverWindows (s)) + if (es->renderText || (es->animations && elementsGetOverWindows (s))) { CompTransform sTransform = *transform; - transformToScreenSpace (s, output, -DEFAULT_Z_CAMERA, &sTransform); - glPushMatrix (); - glLoadMatrixf (sTransform.m); - beginRendering (s); - glPopMatrix (); - } - if (es->renderText) - { - CompTransform sTransform = *transform; transformToScreenSpace (s, output, -DEFAULT_Z_CAMERA, &sTransform); glPushMatrix (); glLoadMatrixf (sTransform.m); - elementsDrawTitle (s); + + if (es->animations && elementsGetOverWindows (s)) + beginRendering (s); + if (es->renderText) + elementsDrawTitle (s); + glPopMatrix (); } @@ -1251,48 +1297,48 @@ elementsDrawWindow (CompWindow *w, Region region, unsigned int mask) { - Bool status; + Bool status; + CompScreen *s = w->screen; - ELEMENTS_SCREEN (w->screen); - Bool active = FALSE; - if (es->animations) - active = TRUE; - UNWRAP (es, w->screen, drawWindow); - status = (*w->screen->drawWindow) (w, transform, attrib, region, mask); - WRAP (es, w->screen, drawWindow, elementsDrawWindow); + ELEMENTS_SCREEN (s); + + UNWRAP (es, s, drawWindow); + status = (*s->drawWindow) (w, transform, attrib, region, mask); + WRAP (es, s, drawWindow, elementsDrawWindow); - if (active && (w->type & CompWindowTypeDesktopMask) && - !elementsGetOverWindows (w->screen)) + if (es->animations && (w->type & CompWindowTypeDesktopMask) && + !elementsGetOverWindows (s)) { - beginRendering (w->screen); + beginRendering (s); } return status; } void -initiateElement (CompScreen *s, +initiateElement (CompScreen *s, ElementAnimation *anim, - Element *e) + Element *e) { - e->z = elementsMmRand (-elementsGetScreenDepth (s), 0.1, 5000); e->x = 0; e->y = 0; + e->z = elementsMmRand (-elementsGetScreenDepth (s), 0.1, 5000); e->dz = elementsMmRand (-500, 500, 500000); e->rAngle = elementsMmRand (-1000, 1000, 50); e->rSpeed = elementsMmRand (-2100, 2100, 700); - e->opacity = 1.0f; + + e->opacity = 1.0f; e->nTexture = 0; - e->ptr = NULL; + e->ptr = NULL; if (anim->properties->initiate) (*anim->properties->initiate) (s, e); } void -elementMove (CompScreen *s, - Element *e, +elementMove (CompScreen *s, + Element *e, ElementAnimation *anim, - int updateDelay) + int updateDelay) { if (anim->properties->move) (*anim->properties->move) (s, anim, e, updateDelay); @@ -1300,75 +1346,73 @@ elementMove (CompScreen *s, } static Bool -stepPositions(void *closure) +stepPositions (void *closure) { - CompScreen *s = closure; - Bool onTopOfWindows = elementsGetOverWindows (s); - ELEMENTS_SCREEN(s); + CompScreen *s = (CompScreen *) closure; + ElementAnimation *anim; - Bool active = FALSE; - if (es->animations) - active = TRUE; + ELEMENTS_SCREEN (s); - if (!active) + if (!es->animations) return TRUE; - ElementAnimation *anim; - if (es->animations) + for (anim = es->animations; anim; anim = anim->next) { - for (anim = es->animations; anim; anim = anim->next) + int i; + + if (anim->active) { - int i; - if (anim->active) - { - for (i = 0; i < anim->nElement; i++) - elementTestCreate (s, &anim->elements[i], anim); - } - else + for (i = 0; i < anim->nElement; i++) + elementTestCreate (s, &anim->elements[i], anim); + } + else + { + if (elementTestOffscreen (s, anim)) { - if (elementTestOffscreen (s, anim)) + for (i = 0; i < anim->nTextures; i++) { - int i; - for (i = 0; i < anim->nTextures; i++) - { - finiTexture (s, &anim->texture[i].tex); - glDeleteLists (anim->texture[i].dList, 1); - } - free (anim->elements); - free (anim->texture); - elementsDeleteAnimation (s, anim); - break; + finiTexture (s, &anim->texture[i].tex); + glDeleteLists (anim->texture[i].dList, 1); } + + free (anim->elements); + free (anim->texture); + elementsDeleteAnimation (s, anim); + break; } } - if (active && !onTopOfWindows ) - { - CompWindow *w; - for (w = s->windows; w; w = w->next) - { - if (w->type & CompWindowTypeDesktopMask) - addWindowDamage (w); - } - } - else if (active) + } + + if (!elementsGetOverWindows (s)) + { + CompWindow *w; + + for (w = s->windows; w; w = w->next) { - damageScreen (s); + if (w->type & CompWindowTypeDesktopMask) + addWindowDamage (w); } } + else + { + damageScreen (s); + } return TRUE; } void updateElementTextures (CompScreen *s, - Bool changeTextures) + Bool changeTextures) { + ElementAnimation *anim; + ELEMENTS_SCREEN (s); - ElementAnimation *anim; for (anim = es->animations; anim; anim = anim->next) { - int i; + int i, iter, nElement, size,speed; + char *type; CompListValue *cType = elementsGetElementType (s); CompListValue *cPath = elementsGetElementImage (s); CompListValue *cCap = elementsGetElementCap (s); @@ -1384,15 +1428,16 @@ updateElementTextures (CompScreen *s, { compLogMessage ("elements", CompLogLevelWarn, "Options are not set correctly," - " cannot read this settings\n"); + " cannot read this setting."); return; } - int iter = anim->id; - int nElement = cCap->value[anim->id].i; - char * type = cType->value[anim->id].s; - int size = cSize->value[anim->id].i; - int speed = cSpeed->value[anim->id].i; + iter = anim->id; + nElement = cCap->value[anim->id].i; + type = cType->value[anim->id].s; + size = cSize->value[anim->id].i; + speed = cSpeed->value[anim->id].i; + for (i = 0; i < anim->nTextures; i++) { finiTexture (s, &anim->texture[i].tex); @@ -1402,18 +1447,23 @@ updateElementTextures (CompScreen *s, if (textureToAnimation (s, anim, cPath, cIter, size, iter)) { Element *e; - Bool initiate = FALSE; + Bool initiate = FALSE; + anim->type = type; + if (nElement != anim->nElement) { anim->nElement = nElement; anim->elements = realloc (anim->elements, sizeof (Element) * nElement); + /* FIXME: NULL check? */ initiate = TRUE; } - if (strcmp (type, anim->type)!=0) + + if (strcmp (type, anim->type)) { int i; + anim->type = type; for (i = 0; i < anim->nElement; i++) { @@ -1422,16 +1472,17 @@ updateElementTextures (CompScreen *s, } initiate = TRUE; } - anim->size = size; + + anim->size = size; anim->speed = speed; e = anim->elements; + while (nElement--) { e->type = type; if (initiate) - { initiateElement (s, anim, e); - } + e++; } } @@ -1449,9 +1500,9 @@ static ElementsBaseFunctions elementsFunctions = }; static void -elementsScreenOptionChanged (CompScreen *s, - CompOption *opt, - ElementsScreenOptions num) +elementsScreenOptionChanged (CompScreen *s, + CompOption *opt, + ElementsScreenOptions num) { switch (num) { @@ -1464,6 +1515,7 @@ elementsScreenOptionChanged (CompScreen *s, { ELEMENTS_SCREEN (s); + es->needUpdate = TRUE; updateElementTextures (s, FALSE); @@ -1472,13 +1524,13 @@ elementsScreenOptionChanged (CompScreen *s, case ElementsScreenOptionUpdateDelay: { ELEMENTS_SCREEN (s); - + if (es->timeoutHandle) compRemoveTimeout (es->timeoutHandle); es->timeoutHandle = - compAddTimeout (elementsGetUpdateDelay (s), - (float) elementsGetUpdateDelay (s) * 1.2, - stepPositions, s); + compAddTimeout (elementsGetUpdateDelay (s), + (float) elementsGetUpdateDelay (s) * 1.2, + stepPositions, s); } break; default: @@ -1491,22 +1543,26 @@ elementsInitScreen (CompPlugin *p, CompScreen *s) { ElementsScreen *es; + int delay; + ELEMENTS_DISPLAY (s->display); - es = calloc (1, sizeof(ElementsScreen)); - s->base.privates[ed->privateIndex].ptr = es; - es->needUpdate = FALSE; - es->listIter = 0; - es->animIter = 1; - es->animations = NULL; - es->textPixmap = None; - es->textWidth = 0; - es->textHeight = 0; - es->renderText = FALSE; + es = calloc (1, sizeof (ElementsScreen)); + if (!es) + return FALSE; + + es->needUpdate = FALSE; + es->listIter = 0; + es->animIter = 1; + es->animations = NULL; + es->textPixmap = None; + es->textWidth = 0; + es->textHeight = 0; + es->renderText = FALSE; es->renderTexture = FALSE; es->renderTimeout = 0; es->switchTimeout = 0; - es->eTexture = NULL; + es->eTexture = NULL; elementsSetElementTypeNotify (s, elementsScreenOptionChanged); elementsSetElementImageNotify (s, elementsScreenOptionChanged); @@ -1520,10 +1576,15 @@ elementsInitScreen (CompPlugin *p, updateElementTextures (s, TRUE); setupDisplayList (s); - WRAP (es, s, paintOutput, elementsPaintOutput); WRAP (es, s, drawWindow, elementsDrawWindow); - es->timeoutHandle = compAddTimeout (elementsGetUpdateDelay (s), - (float) elementsGetUpdateDelay (s) * 1.2, - stepPositions, s); + + delay = elementsGetUpdateDelay (s); + es->timeoutHandle = compAddTimeout (delay, (float) delay * 1.2, + stepPositions, s); + + WRAP (es, s, paintOutput, elementsPaintOutput); + WRAP (es, s, drawWindow, elementsDrawWindow); + + s->base.privates[ed->privateIndex].ptr = es; return TRUE; } @@ -1550,15 +1611,18 @@ elementsFiniScreen (CompPlugin *p, finiTexture (s, &es->eTexture[i].tex); glDeleteLists (es->eTexture[i].dList, 1); } - free(es->eTexture); + free (es->eTexture); } elementsRemoveElementType (s, "autumn"); elementsRemoveElementType (s, "fireflies"); elementsRemoveElementType (s, "snow"); elementsRemoveElementType (s, "stars"); - elementsRemoveElementType (s, "bubbles"); UNWRAP (es, s, paintOutput); + elementsRemoveElementType (s, "bubbles"); + + UNWRAP (es, s, paintOutput); UNWRAP (es, s, drawWindow); + free (es); } @@ -1568,10 +1632,13 @@ elementsInitDisplay (CompPlugin *p, { ElementsDisplay *ed; CompOption *abi, *index; + if (!checkPluginABI ("core", CORE_ABIVERSION)) - return FALSE; + return FALSE; ed = malloc (sizeof (ElementsDisplay)); + if (!ed) + return FALSE; ed->privateIndex = allocateScreenPrivateIndex (d); if (ed->privateIndex < 0) @@ -1587,39 +1654,43 @@ elementsInitDisplay (CompPlugin *p, ed->elementTypes = NULL; - abi = elementsGetAbiOption (d); + abi = elementsGetAbiOption (d); index = elementsGetIndexOption (d); - abi->value.i = ELEMENTS_ABIVERSION; + abi->value.i = ELEMENTS_ABIVERSION; index->value.i = functionsPrivateIndex; elementsSetNextElementKeyInitiate (d, elementsNextElement); elementsSetPrevElementKeyInitiate (d, elementsPrevElement); elementsSetToggleSelectedKeyInitiate (d, elementsToggleSelected); - d->base.privates[displayPrivateIndex].ptr = ed; + d->base.privates[displayPrivateIndex].ptr = ed; d->base.privates[functionsPrivateIndex].ptr = &elementsFunctions; elementsCreateNewElementType (d, "autumn", "Autumn", - initiateAutumnElement, - autumnMove, - autumnFini); + initiateAutumnElement, + autumnMove, + autumnFini); + elementsCreateNewElementType (d, "fireflies", "Fireflies", - initiateFireflyElement, - fireflyMove, - fireflyFini); - elementsCreateNewElementType (d, "snow", "Snow", - initiateSnowElement, - snowMove, - snowFini); + initiateFireflyElement, + fireflyMove, + fireflyFini); + + elementsCreateNewElementType (d, "snow", "Snow", + initiateSnowElement, + snowMove, + snowFini); + elementsCreateNewElementType (d, "stars", "Stars", - initiateStarElement, - starMove, - starFini); + initiateStarElement, + starMove, + starFini); + elementsCreateNewElementType (d, "bubbles", "Bubbles", - initiateBubbleElement, - bubbleMove, - bubbleFini); + initiateBubbleElement, + bubbleMove, + bubbleFini); return TRUE; } @@ -1659,12 +1730,12 @@ elementsFini (CompPlugin *p) freeDisplayPrivateIndex (functionsPrivateIndex); } - -static CompBool elementsInitObject(CompPlugin *p, - CompObject *o) +static CompBool +elementsInitObject(CompPlugin *p, + CompObject *o) { static InitPluginObjectProc dispTab[] = { - (InitPluginObjectProc) 0, // InitCore + (InitPluginObjectProc) 0, /* InitCore */ (InitPluginObjectProc) elementsInitDisplay, (InitPluginObjectProc) elementsInitScreen }; @@ -1672,11 +1743,12 @@ static CompBool elementsInitObject(CompPlugin *p, RETURN_DISPATCH(o, dispTab, ARRAY_SIZE(dispTab), TRUE, (p, o)); } -static void elementsFiniObject(CompPlugin *p, - CompObject *o) +static void +elementsFiniObject(CompPlugin *p, + CompObject *o) { static FiniPluginObjectProc dispTab[] = { - (FiniPluginObjectProc) 0, // FiniCore + (FiniPluginObjectProc) 0, /* FiniCore */ (FiniPluginObjectProc) elementsFiniDisplay, (FiniPluginObjectProc) elementsFiniScreen }; @@ -1695,7 +1767,7 @@ CompPluginVTable elementsVTable = { 0 }; -CompPluginVTable* +CompPluginVTable * getCompPluginInfo (void) { return &elementsVTable; diff --git a/fireflies.c b/fireflies.c index c91efa7..c3c8907 100644 --- a/fireflies.c +++ b/fireflies.c @@ -1,33 +1,41 @@ +#include #include "elements-internal.h" /* FIREFLIES SPECIFIC FUNCTIONS */ -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 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 float fireflyBezierCurve (float p[4], float time) +static float +fireflyBezierCurve (float p[4], + float time) { float out; float a = p[0]; float b = p[0] + p[1]; float c = p[3] + p[2]; float d = p[3]; - float e = 1.0 - time; - out = (a*(e*e*e)) + (3.0*b*(e*e)*time) - + (3.0*c*e*(time*time)) + (d*(time*time*time)); + float e = 1.0 - time; + + out = (a * pow (e, 3)) + (3.0 * b * pow (e, 2) * time) + + (3.0 * c * e * pow (time, 2)) + (d * pow (time, 3)); + return out; } void initiateFireflyElement (CompScreen *s, - Element *e) + Element *e) { - int i; + int i; FireflyElement *fe; + if (!e->ptr) e->ptr = calloc (1, sizeof (FireflyElement)); @@ -35,40 +43,47 @@ initiateFireflyElement (CompScreen *s, return; fe = (FireflyElement *) e->ptr; - e->x = elementsMmRand(0, s->width, 1); - e->y = elementsMmRand(0, s->height, 1); - fe->lifespan = elementsMmRand(50,1000, 100); - fe->age = 0.0; - for (i = 0; i < 4; i++) + + e->x = elementsMmRand (0, s->width, 1); + e->y = elementsMmRand (0, s->height, 1); + + fe->lifespan = elementsMmRand (50,1000, 100); + fe->age = 0.0; + + for (i = 0; i < 4; i++) { - fe->dx[i] = elementsMmRand(-3000, 3000, 200); - fe->dy[i] = elementsMmRand(-2000, 2000, 200); - fe->dz[i] = elementsMmRand(-1000, 1000, 500000); + fe->dx[i] = elementsMmRand (-3000, 3000, 200); + fe->dy[i] = elementsMmRand (-2000, 2000, 200); + fe->dz[i] = elementsMmRand (-1000, 1000, 500000); } } void -fireflyMove (CompScreen *s, +fireflyMove (CompScreen *s, ElementAnimation *anim, - Element *e, - int updateDelay) + Element *e, + int updateDelay) { - float ffSpeed = anim->speed / 700.0f; + float ffSpeed = anim->speed / 700.0f; FireflyElement *fe = (FireflyElement *) e->ptr; + int glowStage; + float xs, ys, zs; - if (!e->ptr) + if (!fe) return; - fe->age += 0.01; + fe->age += 0.01; fe->lifecycle = (fe->age / 10) / fe->lifespan * (ffSpeed * 70); - int glowStage = (fe->lifecycle * GLOW_STAGES); - e->glowAlpha = fireflyBezierCurve(glowCurve[glowStage], fe->lifecycle); - float xs = fireflyBezierCurve(fe->dx, fe->lifecycle); - float ys = fireflyBezierCurve(fe->dy, fe->lifecycle); - float zs = fireflyBezierCurve(fe->dz, fe->lifecycle); - e->x += (float)(xs * (double)updateDelay) * ffSpeed; - e->y += (float)(ys * (double)updateDelay) * ffSpeed; - e->z += (float)(zs * (double)updateDelay) * ffSpeed; + glowStage = fe->lifecycle * GLOW_STAGES; + e->glowAlpha = fireflyBezierCurve (glowCurve[glowStage], fe->lifecycle); + + xs = fireflyBezierCurve (fe->dx, fe->lifecycle); + ys = fireflyBezierCurve (fe->dy, fe->lifecycle); + zs = fireflyBezierCurve (fe->dz, fe->lifecycle); + + e->x += xs * updateDelay * ffSpeed; + e->y += ys * updateDelay * ffSpeed; + e->z += zs * updateDelay * ffSpeed; } diff --git a/snow.c b/snow.c index 9689817..78f8954 100644 --- a/snow.c +++ b/snow.c @@ -4,9 +4,10 @@ void initiateSnowElement (CompScreen *s, - Element *e) + Element *e) { int snowSway = elementsGetSnowSway (s); + switch (elementsGetWindDirection (s)) { case WindDirectionNone: @@ -39,12 +40,13 @@ initiateSnowElement (CompScreen *s, } void -snowMove (CompScreen *s, - ElementAnimation *anim, - Element *e, - int updateDelay) +snowMove (CompScreen *s, + ElementAnimation *anim, + Element *e, + int updateDelay) { float snowSpeed = anim->speed / 500.0f; + e->x += (e->dx * (float) updateDelay) * snowSpeed; e->y += (e->dy * (float) updateDelay) * snowSpeed; e->z += (e->dz * (float) updateDelay) * snowSpeed; diff --git a/stars.c b/stars.c index 9cdbf1b..24135aa 100644 --- a/stars.c +++ b/stars.c @@ -2,43 +2,52 @@ /* STARS SPECIFIC FUNCTIONS */ -static float starBezierCurve(float p, float time) +static float +starBezierCurve (float p, + float time) { float out; - out = p * (time+0.01) * 10; + + out = p * (time + 0.01) * 10; + return out; } void initiateStarElement (CompScreen *s, - Element *e) + Element *e) { float init; - e->dx = elementsMmRand(-50000, 50000, 5000); - e->dy = elementsMmRand(-50000, 50000, 5000); - e->dz = elementsMmRand(000, 200, 2000); - e->x = s->width * .5 + elementsGetStarOffsetX (s); // X Offset - e->y = s->height * .5 + elementsGetStarOffsetY (s); // Y Offset - e->z = elementsMmRand(000, 0.1, 5000); - init = elementsMmRand(0,100, 1); + + e->dx = elementsMmRand (-50000, 50000, 5000); + e->dy = elementsMmRand (-50000, 50000, 5000); + e->dz = elementsMmRand (000, 200, 2000); + e->x = s->width / 2 + elementsGetStarOffsetX (s); /* X Offset */ + e->y = s->height / 2 + elementsGetStarOffsetY (s); /* Y Offset */ + e->z = elementsMmRand (000, 0.1, 5000); + init = elementsMmRand (0,100, 1); + e->x += init * e->dx; e->y += init * e->dy; } void -starMove (CompScreen *s, - ElementAnimation *anim, - Element *e, - int updateDelay) +starMove (CompScreen *s, + ElementAnimation *anim, + Element *e, + int updateDelay) { + float xs, ys, zs; float starsSpeed = anim->speed / 500.0f; float tmp = 1.0f / (100.0f - starsSpeed); - float xs = starBezierCurve(e->dx, tmp); - float ys = starBezierCurve(e->dy, tmp); - float zs = starBezierCurve(e->dz, tmp); - e->x += (float)(xs * (double)updateDelay) * starsSpeed; - e->y += (float)(ys * (double)updateDelay) * starsSpeed; - e->z += (float)(zs * (double)updateDelay) * starsSpeed; + + xs = starBezierCurve(e->dx, tmp); + ys = starBezierCurve(e->dy, tmp); + zs = starBezierCurve(e->dz, tmp); + + e->x += xs * updateDelay * starsSpeed; + e->y += ys * updateDelay * starsSpeed; + e->z += zs * updateDelay * starsSpeed; } void -- 1.6.0.4