You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
6.9 KiB

/*
* Copyright © 2007 Novell, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without
* fee, provided that the above copyright notice appear in all copies
* and that both that copyright notice and this permission notice
* appear in supporting documentation, and that the name of
* Novell, Inc. not be used in advertising or publicity pertaining to
* distribution of the software without specific, written prior permission.
* Novell, Inc. makes no representations about the suitability of this
* software for any purpose. It is provided "as is" without express or
* implied warranty.
*
* NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
* NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Author: David Reveman <davidr@novell.com>
*/
#ifndef _COMPIZ_CUBE_H
#define _COMPIZ_CUBE_H
#include <compiz-core.h>
COMPIZ_BEGIN_DECLS
#define CUBE_ABIVERSION 20080424
typedef struct _CubeCore {
SetOptionForPluginProc setOptionForPlugin;
} CubeCore;
#define CUBE_MOMODE_AUTO 0
#define CUBE_MOMODE_MULTI 1
#define CUBE_MOMODE_ONE 2
#define CUBE_MOMODE_LAST CUBE_MOMODE_ONE
#define CUBE_DISPLAY_OPTION_ABI 0
#define CUBE_DISPLAY_OPTION_INDEX 1
#define CUBE_DISPLAY_OPTION_UNFOLD_KEY 2
#define CUBE_DISPLAY_OPTION_NEXT_KEY 3
#define CUBE_DISPLAY_OPTION_PREV_KEY 4
#define CUBE_DISPLAY_OPTION_NUM 5
typedef struct _CubeDisplay {
int screenPrivateIndex;
CompOption opt[CUBE_DISPLAY_OPTION_NUM];
} CubeDisplay;
#define CUBE_SCREEN_OPTION_COLOR 0
#define CUBE_SCREEN_OPTION_IN 1
#define CUBE_SCREEN_OPTION_SCALE_IMAGE 2
#define CUBE_SCREEN_OPTION_IMAGES 3
#define CUBE_SCREEN_OPTION_SKYDOME 4
#define CUBE_SCREEN_OPTION_SKYDOME_IMG 5
#define CUBE_SCREEN_OPTION_SKYDOME_ANIM 6
#define CUBE_SCREEN_OPTION_SKYDOME_GRAD_START 7
#define CUBE_SCREEN_OPTION_SKYDOME_GRAD_END 8
#define CUBE_SCREEN_OPTION_ACCELERATION 9
#define CUBE_SCREEN_OPTION_SPEED 10
#define CUBE_SCREEN_OPTION_TIMESTEP 11
#define CUBE_SCREEN_OPTION_MIPMAP 12
#define CUBE_SCREEN_OPTION_ADJUST_IMAGE 13
#define CUBE_SCREEN_OPTION_ACTIVE_OPACITY 14
#define CUBE_SCREEN_OPTION_INACTIVE_OPACITY 15
#define CUBE_SCREEN_OPTION_TRANSPARENT_MANUAL_ONLY 16
#define CUBE_SCREEN_OPTION_MULTIOUTPUT_MODE 17
#define CUBE_SCREEN_OPTION_NUM 18
typedef enum _PaintOrder {
BTF = 0,
FTB
} PaintOrder;
typedef enum _RotationState {
RotationNone = 0,
RotationChange,
RotationManual
} RotationState;
typedef void (*CubeGetRotationProc) (CompScreen *s,
float *x,
float *v,
float *progress);
typedef void (*CubeClearTargetOutputProc) (CompScreen *s,
float xRotate,
float vRotate);
typedef void (*CubePaintTopProc) (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform,
CompOutput *output,
int size);
typedef void (*CubePaintBottomProc) (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform,
CompOutput *output,
int size);
typedef void (*CubePaintInsideProc) (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform,
CompOutput *output,
int size);
typedef Bool (*CubeCheckOrientationProc) (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform,
CompOutput *output,
CompVector *points);
typedef void (*CubePaintViewportProc) (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform,
Region region,
CompOutput *output,
unsigned int mask);
typedef Bool (*CubeShouldPaintViewportProc) (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform,
CompOutput *output,
PaintOrder order);
typedef struct _CubeScreen {
PreparePaintScreenProc preparePaintScreen;
DonePaintScreenProc donePaintScreen;
PaintScreenProc paintScreen;
PaintOutputProc paintOutput;
PaintTransformedOutputProc paintTransformedOutput;
EnableOutputClippingProc enableOutputClipping;
PaintWindowProc paintWindow;
ApplyScreenTransformProc applyScreenTransform;
OutputChangeNotifyProc outputChangeNotify;
InitWindowWalkerProc initWindowWalker;
CubeGetRotationProc getRotation;
CubeClearTargetOutputProc clearTargetOutput;
CubePaintTopProc paintTop;
CubePaintBottomProc paintBottom;
CubePaintInsideProc paintInside;
CubeCheckOrientationProc checkOrientation;
CubePaintViewportProc paintViewport;
CubeShouldPaintViewportProc shouldPaintViewport;
CompOption opt[CUBE_SCREEN_OPTION_NUM];
int invert;
int xRotations;
PaintOrder paintOrder;
RotationState rotationState;
Bool paintAllViewports;
GLfloat distance;
GLushort color[3];
GLfloat tc[12];
int grabIndex;
int srcOutput;
Bool unfolded;
GLfloat unfold, unfoldVelocity;
GLfloat *vertices;
int nVertices;
GLuint skyListId;
int pw, ph;
unsigned int skyW, skyH;
CompTexture texture, sky;
int imgCurFile;
int nOutput;
int output[64];
int outputMask[64];
Bool cleared[64];
Bool capsPainted[64];
Bool fullscreenOutput;
float outputXScale;
float outputYScale;
float outputXOffset;
float outputYOffset;
float desktopOpacity;
float toOpacity;
int lastOpacityIndex;
int moMode;
Bool recalcOutput;
} CubeScreen;
#define GET_CUBE_CORE(c) \
((CubeCore *) (c)->base.privates[cubeCorePrivateIndex].ptr)
#define CUBE_CORE(c) \
CubeCore *cc = GET_CUBE_CORE (c)
#define GET_CUBE_DISPLAY(d) \
((CubeDisplay *) (d)->base.privates[cubeDisplayPrivateIndex].ptr)
#define CUBE_DISPLAY(d) \
CubeDisplay *cd = GET_CUBE_DISPLAY (d)
#define GET_CUBE_SCREEN(s, cd) \
((CubeScreen *) (s)->base.privates[(cd)->screenPrivateIndex].ptr)
#define CUBE_SCREEN(s) \
CubeScreen *cs = GET_CUBE_SCREEN (s, GET_CUBE_DISPLAY (s->display))
COMPIZ_END_DECLS
#endif