static Bool elementsPaintOutput (CompScreen *s, const ScreenPaintAttrib *sa, const CompTransform *transform, Region region, CompOutput *output, unsigned int mask) { CompDisplay *d = s->display; Bool status; Bool active = elementActive(s); E_SCREEN (s); UNWRAP (eScreen, s, paintOutput); status = (*s->paintOutput) (s, sa, transform, region, output, mask); WRAP (eScreen, s, paintOutput, elementsPaintOutput); if(elementsGetApplyTransform (d)) return status; if (active && elementsGetOverWindows (d)) { CompTransform sTransform = *transform; transformToScreenSpace (s, output, -DEFAULT_Z_CAMERA, &sTransform); glPushMatrix (); glLoadMatrixf (sTransform.m); beginRendering (s); glPopMatrix (); } return status; }
static Bool elementsDrawWindow (CompWindow *w, const CompTransform *transform, const FragmentAttrib *attrib, Region region, unsigned int mask) { Bool status; E_SCREEN (w->screen); Bool active = FALSE; int ii; for (ii = 0; ii <= 4; ii++) { if (eScreen->isActive[ii]) active = TRUE; } UNWRAP (eScreen, w->screen, drawWindow); status = (*w->screen->drawWindow) (w, transform, attrib, region, mask); WRAP (eScreen, w->screen, drawWindow, elementsDrawWindow); if (active && (w->type & CompWindowTypeDesktopMask) && !elementsGetOverWindows (w->screen->display)) { beginRendering (eScreen, w->screen); }
static Bool elementsBubblesToggle (CompDisplay *d, CompAction *action, CompActionState state, CompOption *option, int nOption) { Bool useKeys = FALSE; CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); useKeys = eScreen->useKeys; if (useKeys) { eScreen->isActive[4] = !eScreen->isActive[4]; damageScreen (s); eScreen->needUpdate = TRUE; } } if (useKeys) { createAll( d ); } return TRUE; }
static Bool stepPositions(void *closure) { CompScreen *s = closure; int i, ii, numSnow, numAutumn, numStars, numFf, numBubbles, numTmp; element *ele; Bool onTopOfWindows; E_SCREEN(s); Bool active = FALSE; //THis makes sure nothing happens if all features are off. for (ii = 0; ii <= 4; ii++) { if (eScreen->isActive[ii]) active = TRUE; } if (!active) return TRUE; ele = eScreen->allElements; if (eScreen->isActive[0]) numAutumn = elementsGetNumLeaves (s->display); else numAutumn = 0; if (eScreen->isActive[1]) numFf = elementsGetNumFireflies (s->display); else numFf = 0; if (eScreen->isActive[2]) numSnow = elementsGetNumSnowflakes (s->display); else numSnow = 0; if (eScreen->isActive[3]) numStars = elementsGetNumStars (s->display); else numStars = 0; if (eScreen->isActive[4]) numBubbles = elementsGetNumBubbles (s->display); else numBubbles = 0; numTmp = numAutumn + numFf + numSnow + numStars + numBubbles; onTopOfWindows = elementsGetOverWindows (s->display); for (i = 0; i < numTmp; i++) elementTestCreate(eScreen, ele++); if (active && !onTopOfWindows ) { CompWindow *w; for (w = s->windows; w; w = w->next) { if (w->type & CompWindowTypeDesktopMask) addWindowDamage (w); } } else if (active) damageScreen (s); return TRUE;
static Bool stepPositions(CompScreen *s, int elapsed) { int i, numSnow, numAutumn, numStars, numFf, numBubbles, numTmp; element *ele; Bool onTopOfWindows; Bool active = elementActive(s); E_SCREEN(s); if (!active) return TRUE; ele = eScreen->allElements; if (eScreen->isActive[0]) numAutumn = elementsGetNumLeaves (s->display); else numAutumn = 0; if (eScreen->isActive[1]) numFf = elementsGetNumFireflies (s->display); else numFf = 0; if (eScreen->isActive[2]) numSnow = elementsGetNumSnowflakes (s->display); else numSnow = 0; if (eScreen->isActive[3]) numStars = elementsGetNumStars (s->display); else numStars = 0; if (eScreen->isActive[4]) numBubbles = elementsGetNumBubbles (s->display); else numBubbles = 0; numTmp = numAutumn + numFf + numSnow + numStars + numBubbles; onTopOfWindows = elementsGetOverWindows (s->display); for (i = 0; i < numTmp; i++) elementTestCreate(eScreen, ele++, elapsed); if (active) { CompWindow *w; for (w = s->windows; w; w = w->next) { if (!onTopOfWindows && (w->type & CompWindowTypeDesktopMask)) addWindowDamage (w); else if (onTopOfWindows && isNormalWin(w)) { eScreen->topWindow = w; addWindowDamage (w); } } damageScreen (s); } return TRUE; }
static void elementsDonePaintScreen (CompScreen *s) { E_SCREEN (s); if (elementActive(s)) damageScreen (s); UNWRAP (eScreen, s, donePaintScreen); (*s->donePaintScreen) (s); WRAP (eScreen, s, donePaintScreen, elementsDonePaintScreen); }
static void elementsPreparePaintScreen (CompScreen *s, int elapsed) { E_SCREEN (s); if (elementActive(s)) stepPositions (s, elapsed); UNWRAP (eScreen, s, preparePaintScreen); (*s->preparePaintScreen) (s, elapsed); WRAP (eScreen, s, preparePaintScreen, elementsPreparePaintScreen); }
static Bool elementActive (CompScreen *s) { int i; E_SCREEN (s); for (i = 0; i <= 4; i++) if (eScreen->isActive[i]) return TRUE; return FALSE; }
static Bool elementsDrawWindow (CompWindow *w, const CompTransform *transform, const FragmentAttrib *attrib, Region region, unsigned int mask) { CompScreen *s = w->screen; CompDisplay *d = s->display; Bool active = elementActive(s); Bool status = FALSE; E_SCREEN (s); if (active) { Bool applyTransform = elementsGetApplyTransform (d); Bool onTop = elementsGetOverWindows (d); Bool isDesktop = (w->type & CompWindowTypeDesktopMask) && !onTop; Bool isTopMost = w && (w == eScreen->topWindow) && onTop; if (isDesktop) { UNWRAP (eScreen, s, drawWindow); status = (*s->drawWindow) (w, transform, attrib, region, mask); WRAP (eScreen, s, drawWindow, elementsDrawWindow); beginRendering (s); } else if (isTopMost && applyTransform) { UNWRAP (eScreen, s, drawWindow); status = (*s->drawWindow) (w, transform, attrib, region, mask); WRAP (eScreen, s, drawWindow, elementsDrawWindow); beginRendering (s); } else { UNWRAP (eScreen, s, drawWindow); status = (*s->drawWindow) (w, transform, attrib, region, mask); WRAP (eScreen, s, drawWindow, elementsDrawWindow); } } else { UNWRAP (eScreen, s, drawWindow); status = (*s->drawWindow) (w, transform, attrib, region, mask); WRAP (eScreen, s, drawWindow, elementsDrawWindow); } return status; }
static Bool elementsPaintOutput (CompScreen *s, const ScreenPaintAttrib *sa, const CompTransform *transform, Region region, CompOutput *output, unsigned int mask) { Bool status; E_SCREEN (s); int ii; Bool active = FALSE; for (ii = 0; ii <= 4; ii++) { if (eScreen->isActive[ii]) active = TRUE; } if (active && elementsGetOverWindows (s->display)) mask |= PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS_MASK; UNWRAP (eScreen, s, paintOutput); status = (*s->paintOutput) (s, sa, transform, region, output, mask); WRAP (eScreen, s, paintOutput, elementsPaintOutput); if (active && elementsGetOverWindows (s->display)) { CompTransform sTransform = *transform; transformToScreenSpace (s, output, -DEFAULT_Z_CAMERA, &sTransform); glPushMatrix (); glLoadMatrixf (sTransform.m); beginRendering (eScreen, s); glPopMatrix (); }
static void elementsFiniScreen (CompPlugin *p, CompScreen *s) { int i; E_SCREEN (s); for (i = 0; i < eScreen->numElements; i++) { finiTexture (s, &eScreen->textu[i].tex); glDeleteLists (eScreen->textu[i].dList, 1); } if (eScreen->textu) free (eScreen->textu); UNWRAP (eScreen, s, preparePaintScreen); UNWRAP (eScreen, s, donePaintScreen); UNWRAP (eScreen, s, paintOutput); UNWRAP (eScreen, s, drawWindow); free (eScreen); }
static void updateElementTextures (CompScreen *s, Bool changeTextures) { int i, count = 0; float autumnSize = elementsGetLeafSize(s->display); float ffSize = elementsGetFireflySize(s->display); float snowSize = elementsGetSnowSize(s->display); float starsSize = elementsGetStarsSize(s->display); float bubblesSize = elementsGetBubblesSize(s->display); element *ele; E_SCREEN (s); E_DISPLAY (s->display); int numAutumn, numFf, numSnow, numStars, numBubbles; if (eScreen->isActive[0]) numAutumn = elementsGetNumLeaves (s->display); else numAutumn = 0; if (eScreen->isActive[1]) numFf = elementsGetNumFireflies (s->display); else numFf = 0; if (eScreen->isActive[2]) numSnow = elementsGetNumSnowflakes (s->display); else numSnow = 0; if (eScreen->isActive[3]) numStars = elementsGetNumStars (s->display); else numStars = 0; if (eScreen->isActive[4]) numBubbles = elementsGetNumBubbles (s->display); else numBubbles = 0; ele = eScreen->allElements; if (changeTextures) { for (i = 0; i < eScreen->numElements; i++) { finiTexture (s, &eScreen->textu[i].tex); glDeleteLists (eScreen->textu[i].dList, 1); } if (eScreen->textu) free (eScreen->textu); eScreen->numElements = 0; eScreen->numTexLoaded[0] = 0; eScreen->numTexLoaded[1] = 0; eScreen->numTexLoaded[2] = 0; eScreen->numTexLoaded[3] = 0; eScreen->numTexLoaded[4] = 0; eScreen->textu = calloc (1, sizeof (texture) * (ed->numTex[0] + ed->numTex[1] + ed->numTex[2] + ed->numTex[3] + ed->numTex[4])); } for (i = 0; i < ed->numTex[0]; i++) { CompMatrix *mat; texture *aTex; if (changeTextures) { eScreen->textu[count].loaded = readImageToTexture (s, &eScreen->textu[count].tex, ed->texFiles[0][i].s, &eScreen->textu[count].width, &eScreen->textu[count].height); if (!eScreen->textu[count].loaded) { compLogMessage ("Elements", CompLogLevelWarn, "Texture (Autumn) not found : %s", ed->texFiles[0][i].s); continue; } compLogMessage ("Elements", CompLogLevelInfo, "Loaded Texture (Autumn)%s", ed->texFiles[0][i].s); } mat = &eScreen->textu[count].tex.matrix; aTex = &eScreen->textu[count]; aTex->dList = glGenLists (1); glNewList (aTex->dList, GL_COMPILE); 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, aTex->height)); glVertex2f (0, autumnSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, aTex->height)); glVertex2f (autumnSize, autumnSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, 0)); glVertex2f (autumnSize, 0); glEnd (); glEndList (); count++; } if (changeTextures) eScreen->numTexLoaded[0] = count; for (i = 0; i < ed->numTex[1]; i++) { CompMatrix *mat; texture *aTex; if (changeTextures) { eScreen->textu[count].loaded = readImageToTexture (s, &eScreen->textu[count].tex, ed->texFiles[1][i].s, &eScreen->textu[count].width, &eScreen->textu[count].height); if (!eScreen->textu[count].loaded) { compLogMessage ("Elements", CompLogLevelWarn, "Texture (Firefly) not found : %s", ed->texFiles[1][i].s); continue; } compLogMessage ("Elements", CompLogLevelInfo, "Loaded Texture (Firefly) %s", ed->texFiles[1][i].s); } mat = &eScreen->textu[count].tex.matrix; aTex = &eScreen->textu[count]; aTex->dList = glGenLists (1); glNewList (aTex->dList, GL_COMPILE); 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, aTex->height)); glVertex2f (0, ffSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, aTex->height)); glVertex2f (ffSize, ffSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, 0)); glVertex2f (ffSize, 0); glEnd (); glEndList (); count++; } if (changeTextures) eScreen->numTexLoaded[1] = count - eScreen->numTexLoaded[0]; for (i = 0; i < ed->numTex[2]; i++) { CompMatrix *mat; texture *aTex; if (changeTextures) { eScreen->textu[count].loaded = readImageToTexture (s, &eScreen->textu[count].tex, ed->texFiles[2][i].s, &eScreen->textu[count].width, &eScreen->textu[count].height); if (!eScreen->textu[count].loaded) { compLogMessage ("Elements", CompLogLevelWarn, "Texture (snow) not found : %s", ed->texFiles[2][i].s); continue; } compLogMessage ("Elements", CompLogLevelInfo, "Loaded Texture (snow) %s", ed->texFiles[2][i].s); } mat = &eScreen->textu[count].tex.matrix; aTex = &eScreen->textu[count]; aTex->dList = glGenLists (1); glNewList (aTex->dList, GL_COMPILE); 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, aTex->height)); glVertex2f (0, snowSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, aTex->height)); glVertex2f (snowSize, snowSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, 0)); glVertex2f (snowSize, 0); glEnd (); glEndList (); count++; } if (changeTextures) eScreen->numTexLoaded[2] = count - eScreen->numTexLoaded[0] -eScreen->numTexLoaded[1]; for (i = 0; i < ed->numTex[3]; i++) { CompMatrix *mat; texture *aTex; if (changeTextures) { eScreen->textu[count].loaded = readImageToTexture (s, &eScreen->textu[count].tex, ed->texFiles[3][i].s, &eScreen->textu[count].width, &eScreen->textu[count].height); if (!eScreen->textu[count].loaded) { compLogMessage ("Elements", CompLogLevelWarn, "Texture (stars) not found : %s", ed->texFiles[3][i].s); continue; } compLogMessage ("Elements", CompLogLevelInfo, "Loaded Texture (stars)%s", ed->texFiles[3][i].s); } mat = &eScreen->textu[count].tex.matrix; aTex = &eScreen->textu[count]; aTex->dList = glGenLists (1); glNewList (aTex->dList, GL_COMPILE); 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, aTex->height)); glVertex2f (0, starsSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, aTex->height)); glVertex2f (starsSize, starsSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, 0)); glVertex2f (starsSize, 0); glEnd (); glEndList (); count++; } if (changeTextures) eScreen->numTexLoaded[3] = count - eScreen->numTexLoaded[0] - eScreen->numTexLoaded[1] - eScreen->numTexLoaded[2]; for (i = 0; i < ed->numTex[4]; i++) { CompMatrix *mat; texture *aTex; if (changeTextures) { eScreen->textu[count].loaded = readImageToTexture (s, &eScreen->textu[count].tex, ed->texFiles[4][i].s, &eScreen->textu[count].width, &eScreen->textu[count].height); if (!eScreen->textu[count].loaded) { compLogMessage ("Elements", CompLogLevelWarn, "Texture (bubbles) not found : %s", ed->texFiles[4][i].s); continue; } compLogMessage ("Elements", CompLogLevelInfo, "Loaded Texture (bubbles)%s", ed->texFiles[4][i].s); } mat = &eScreen->textu[count].tex.matrix; aTex = &eScreen->textu[count]; aTex->dList = glGenLists (1); glNewList (aTex->dList, GL_COMPILE); 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, aTex->height)); glVertex2f (0, bubblesSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, aTex->height)); glVertex2f (bubblesSize, bubblesSize * aTex->height / aTex->width); glTexCoord2f (COMP_TEX_COORD_X (mat, aTex->width), COMP_TEX_COORD_Y (mat, 0)); glVertex2f (bubblesSize, 0); glEnd (); glEndList (); count++; } if (changeTextures) { eScreen->numTexLoaded[4] = count - eScreen->numTexLoaded[0] - eScreen->numTexLoaded[1] - eScreen->numTexLoaded[2] - eScreen->numTexLoaded[3]; // if (count < (ed->numTex[0] + ed->numTex[1] + ed->numTex[2] + ed->numTex[3] + ed->numTex[4])) eScreen->textu = realloc (eScreen->textu, sizeof (texture) * count); eScreen->numElements = count; for (i = 0; i < (numAutumn + numFf + numSnow + numStars + numBubbles); i++) setElementTexture (eScreen, ele++); } }
static void beginRendering (CompScreen *s) { int j; E_SCREEN (s); glEnable (GL_BLEND); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); if (eScreen->needUpdate) { setupDisplayList (eScreen); eScreen->needUpdate = FALSE; } glColor4f (1.0, 1.0, 1.0, 1.0); for (j = 0; j < eScreen->numElements; j++) { element *ele = eScreen->allElements; int i, numAutumn, numFf, numSnow, numStars, numBubbles; if (eScreen->isActive[0]) numAutumn = elementsGetNumLeaves (s->display); else numAutumn = 0; if (eScreen->isActive[1]) numFf = elementsGetNumFireflies (s->display); else numFf = 0; if (eScreen->isActive[2]) numSnow = elementsGetNumSnowflakes (s->display); else numSnow = 0; if (eScreen->isActive[3]) numStars = elementsGetNumStars (s->display); else numStars = 0; if (eScreen->isActive[4]) numBubbles = elementsGetNumBubbles (s->display); else numBubbles = 0; int numTmp = numAutumn + numFf + numSnow + numStars + numBubbles; Bool autumnRotate = elementsGetAutumnRotate (s->display); Bool snowRotate = elementsGetSnowRotate (s->display); Bool ffRotate = elementsGetFirefliesRotate (s->display); Bool starsRotate = elementsGetStarsRotate (s->display); Bool bubblesRotate = elementsGetBubblesRotate (s->display); enableTexture (eScreen->cScreen, &eScreen->textu[j].tex, COMP_TEXTURE_FILTER_GOOD); for (i = 0; i < numTmp; i++) { if (ele->eTex == &eScreen->textu[j]) { glTranslatef (ele->x, ele->y, ele->z); if (autumnRotate && ele->type == 0) glRotatef (ele->rAngle, 0, 0, 1); if (ffRotate && ele->type == 1) glRotatef (ele->rAngle, 0, 0, 1); if (snowRotate && ele->type == 2) glRotatef (ele->rAngle, 0, 0, 1); if (starsRotate && ele->type == 3) glRotatef (ele->rAngle, 0, 0, 1); if (bubblesRotate && ele->type == 4) glRotatef (ele->rAngle, 0, 0, 1); glCallList (eScreen->textu[j].dList); if (autumnRotate && ele->type == 0) glRotatef (-ele->rAngle, 0, 0, 1); if (ffRotate && ele->type == 1) glRotatef (-ele->rAngle, 0, 0, 1); if (snowRotate && ele->type == 2) glRotatef (-ele->rAngle, 0, 0, 1); if (starsRotate && ele->type == 3) glRotatef (-ele->rAngle, 0, 0, 1); if (bubblesRotate && ele->type == 4) glRotatef (-ele->rAngle, 0, 0, 1); glTranslatef (-ele->x, -ele->y, -ele->z); } ele++; } disableTexture (eScreen->cScreen, &eScreen->textu[j].tex); } glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glDisable (GL_BLEND); glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); }
static void elementsDisplayOptionChanged (CompDisplay *d, CompOption *opt, ElementsDisplayOptions num) { E_DISPLAY (d); switch (num) { case ElementsDisplayOptionToggleAutumnCheck: { Bool useKeys = FALSE; CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); useKeys = eScreen->useKeys; if (!useKeys) { eScreen->isActive[0] = elementsGetToggleAutumnCheck(s->display); damageScreen (s); eScreen->needUpdate = TRUE; } } if (!useKeys) createAll( d ); } break; case ElementsDisplayOptionToggleFirefliesCheck: { Bool useKeys = FALSE; CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); useKeys = eScreen->useKeys; if (!useKeys) { eScreen->isActive[1] = elementsGetToggleFirefliesCheck(s->display); damageScreen (s); eScreen->needUpdate = TRUE; } } if (!useKeys) createAll( d ); } break; case ElementsDisplayOptionToggleSnowCheck: { Bool useKeys = FALSE; CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); useKeys = eScreen->useKeys; if (!useKeys) { eScreen->isActive[2] = elementsGetToggleSnowCheck(s->display); damageScreen (s); eScreen->needUpdate = TRUE; } } if (!useKeys) createAll( d ); } break; case ElementsDisplayOptionToggleStarsCheck: { Bool useKeys = FALSE; CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); useKeys = eScreen->useKeys; if (!useKeys) { eScreen->isActive[3] = elementsGetToggleStarsCheck(s->display); damageScreen (s); eScreen->needUpdate = TRUE; } } if (!useKeys) createAll( d ); } break; case ElementsDisplayOptionToggleBubblesCheck: { Bool useKeys = FALSE; CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); useKeys = eScreen->useKeys; if (!useKeys) { eScreen->isActive[4] = elementsGetToggleBubblesCheck(s->display); damageScreen (s); eScreen->needUpdate = TRUE; } } if (!useKeys) createAll( d ); } break; case ElementsDisplayOptionToggle: { CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); eScreen->useKeys = elementsGetToggle(d); if (!eScreen->useKeys) { eScreen->isActive[0] = elementsGetToggleAutumnCheck(s->display); eScreen->isActive[1] = elementsGetToggleFirefliesCheck(s->display); eScreen->isActive[2] = elementsGetToggleSnowCheck(s->display); eScreen->isActive[3] = elementsGetToggleStarsCheck(s->display); eScreen->isActive[4] = elementsGetToggleBubblesCheck(s->display); createAll( d); } damageScreen (s); } } break; case ElementsDisplayOptionLeafSize: { CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); eScreen->needUpdate = TRUE; updateElementTextures (s, FALSE); } } break; case ElementsDisplayOptionBubblesSize: { CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); eScreen->needUpdate = TRUE; updateElementTextures (s, FALSE); } } break; case ElementsDisplayOptionSnowSize: { CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); eScreen->needUpdate = TRUE; updateElementTextures (s, FALSE); } } break; case ElementsDisplayOptionSnowSway: { createAll( d ); } break; case ElementsDisplayOptionStarsSize: { CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); eScreen->needUpdate = TRUE; updateElementTextures (s, FALSE); } } break; case ElementsDisplayOptionFireflySize: { CompScreen *s; for (s = d->screens; s; s = s->next) { E_SCREEN (s); eScreen->needUpdate = TRUE; updateElementTextures (s, FALSE); } } break; case ElementsDisplayOptionNumLeaves: { createAll( d ); } break; case ElementsDisplayOptionNumBubbles: { createAll( d ); } break; case ElementsDisplayOptionAutumnSway: { createAll( d ); } break; case ElementsDisplayOptionNumFireflies: { createAll( d ); } break; case ElementsDisplayOptionNumSnowflakes: { createAll( d ); } break; case ElementsDisplayOptionNumStars: { createAll( d ); } break; case ElementsDisplayOptionLeafTextures: { CompScreen *s; CompOption *texAutOpt; texAutOpt = elementsGetLeafTexturesOption (d); ed->texFiles[0] = texAutOpt->value.list.value; ed->numTex[0] = texAutOpt->value.list.nValue; for (s = d->screens; s; s = s->next) updateElementTextures (s, TRUE); } break; case ElementsDisplayOptionBubblesTextures: { CompScreen *s; CompOption *texBubblesOpt; texBubblesOpt = elementsGetBubblesTexturesOption (d); ed->texFiles[4] = texBubblesOpt->value.list.value; ed->numTex[4] = texBubblesOpt->value.list.nValue; for (s = d->screens; s; s = s->next) updateElementTextures (s, TRUE); } break; case ElementsDisplayOptionFirefliesTextures: { CompScreen *s; CompOption *texFfOpt; texFfOpt = elementsGetFirefliesTexturesOption (d); ed->texFiles[1] = texFfOpt->value.list.value; ed->numTex[1] = texFfOpt->value.list.nValue; for (s = d->screens; s; s = s->next) updateElementTextures (s, TRUE); } break; case ElementsDisplayOptionSnowTextures: { CompScreen *s; CompOption *texSnowOpt; texSnowOpt = elementsGetSnowTexturesOption (d); ed->texFiles[2] = texSnowOpt->value.list.value; ed->numTex[2] = texSnowOpt->value.list.nValue; for (s = d->screens; s; s = s->next) updateElementTextures (s, TRUE); } break; case ElementsDisplayOptionStarsTextures: { CompScreen *s; CompOption *texStarsOpt; texStarsOpt = elementsGetStarsTexturesOption (d); ed->texFiles[3] = texStarsOpt->value.list.value; ed->numTex[3] = texStarsOpt->value.list.nValue; for (s = d->screens; s; s = s->next) updateElementTextures (s, TRUE); } break; default: break; } }
static void createAll( CompDisplay *d ) { CompScreen *s; int i, ii, iii, iv ,v, numAutumn, numFf, numSnow, numStars, numBubbles, numTmp; element *ele; for (s = d->screens; s; s = s->next) { E_SCREEN (s); if (eScreen->isActive[0]) numAutumn = elementsGetNumLeaves (s->display); else numAutumn = 0; if (eScreen->isActive[1]) numFf = elementsGetNumFireflies (s->display); else numFf = 0; if (eScreen->isActive[2]) numSnow = elementsGetNumSnowflakes (s->display); else numSnow = 0; if (eScreen->isActive[3]) numStars = elementsGetNumStars (s->display); else numStars = 0; if (eScreen->isActive[4]) numBubbles = elementsGetNumBubbles (s->display); else numBubbles = 0; numTmp = (numAutumn + numFf + numSnow + numStars + numBubbles); eScreen->allElements = ele = realloc (eScreen->allElements, numTmp * sizeof (element)); ele = eScreen->allElements; for (i = 0; i < numAutumn; i++) { ele->type = 0; initiateElement (eScreen, ele); setElementTexture (eScreen, ele); ele++; } for (ii = 0; ii < numFf; ii++) { ele->type = 1; initiateElement (eScreen, ele); setElementTexture (eScreen, ele); ele++; } for (iii = 0; iii < numSnow; iii++) { ele->type = 2; initiateElement (eScreen, ele); setElementTexture (eScreen, ele); ele++; } for (iv = 0; iv < numStars; iv++) { ele->type = 3; initiateElement (eScreen, ele); setElementTexture (eScreen, ele); ele++; } for (v = 0; v < numBubbles; v++) { ele->type = 4; initiateElement (eScreen, ele); setElementTexture (eScreen, ele); ele++; } } }