1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
/* Insert copyright */
#ifndef _COMPIZ_ELEMENTS_H
#define _COMPIZ_ELEMENTS_H
#include <compiz-core.h>
/* This is the number used to make sure that elements don't get all
created in one place. Bigger number, more distance.
Possibly fixable later. -> s->width? */
#define BIG_NUMBER 20000
#define ELEMENTS_ABIVERSION 20081215
typedef struct _ElementTypeInfo ElementTypeInfo;
typedef struct _Element Element;
typedef struct _ElementAnimation ElementAnimation;
typedef struct _ElementTexture ElementTexture;
typedef void (*ElementInitiateProc) (CompScreen *s,
Element *e);
typedef void (*ElementMoveProc) (CompScreen *s,
ElementAnimation *anim,
Element *e,
int updateDelay);
typedef void (*ElementFiniProc) (CompScreen *s,
Element *e);
/* Element Type management, extension plugins should call this to create
a new 'type' of element in the core of elements on initDisplay.
What is provided:
* CompDisplay *
* Element Name
* Function pointer to element initialization function
* Function pointer to element movement function
* Fuction pointer to fini function
*/
typedef struct _ElementsBaseFunctions
{
Bool (*newElementType) (CompDisplay *d,
char *name,
char *desc,
ElementInitiateProc initiate,
ElementMoveProc move,
ElementFiniProc fini);
void (*removeElementType) (CompScreen *s,
char *name);
int (*getRand) (int min, int max);
float (*mmRand) (int min, int max, float divisor);
int (*boxing) (CompScreen *s);
int (*depth) (CompScreen *s);
} ElementsBaseFunctions;
struct _ElementTypeInfo
{
char *name;
char *desc;
ElementInitiateProc initiate;
ElementMoveProc move;
ElementFiniProc fini;
struct _ElementTypeInfo *next;
};
struct _ElementTexture
{
CompTexture tex;
unsigned int width;
unsigned int height;
Bool loaded;
GLuint dList;
};
struct _Element
{
float x, y, z;
float dx, dy, dz;
float rSpeed;
int rDirection;
int rAngle;
float opacity;
float glowAlpha; /* Needs to be painted */
int nTexture;
void *ptr; /* Extensions latch on to this */
};
struct _ElementAnimation
{
char *type;
char *desc;
int nElement;
int size;
int speed;
int id; /* Uniquely idenitifies this animation */
Bool rotate;
Bool active;
ElementTexture *texture;
int nTextures;
Element *elements;
ElementTypeInfo *properties;
struct _ElementAnimation *next;
};
/* Resets an animation to defaults */
void initiateElement (CompScreen *s,
ElementAnimation *anim,
Element *ele,
Bool rotate);
/* Calls the movement function pointer for an element in an element animation */
void elementMove (CompScreen *s,
Element *e,
ElementAnimation *anim,
int updateDelay);
/* Used to update all element textures and settings */
void updateElementTextures (CompScreen *s,
Bool changeTextures);
/* Utility Functions */
int elementsGetRand (int min, int max);
float elementsMmRand(int min, int max, float divisor);
int elementsGetEBoxing (CompScreen *s);
int elementsGetEDepth (CompScreen *s);
/* Management of ElementAnimations */
ElementAnimation* elementsCreateAnimation (CompScreen *s,
char *name);
void elementsDeleteAnimation (CompScreen *s,
ElementAnimation *anim);
#endif
|