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.
212 lines
6.2 KiB
212 lines
6.2 KiB
4 years ago
|
/*
|
||
|
* 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_SCALE_H
|
||
|
#define _COMPIZ_SCALE_H
|
||
|
|
||
|
#include <compiz-core.h>
|
||
|
|
||
|
COMPIZ_BEGIN_DECLS
|
||
|
|
||
|
#define SCALE_ABIVERSION 20081007
|
||
|
|
||
|
#define SCALE_STATE_NONE 0
|
||
|
#define SCALE_STATE_OUT 1
|
||
|
#define SCALE_STATE_WAIT 2
|
||
|
#define SCALE_STATE_IN 3
|
||
|
|
||
|
#define SCALE_ICON_NONE 0
|
||
|
#define SCALE_ICON_EMBLEM 1
|
||
|
#define SCALE_ICON_BIG 2
|
||
|
#define SCALE_ICON_LAST SCALE_ICON_BIG
|
||
|
|
||
|
#define SCALE_MOMODE_CURRENT 0
|
||
|
#define SCALE_MOMODE_ALL 1
|
||
|
#define SCALE_MOMODE_LAST SCALE_MOMODE_ALL
|
||
|
|
||
|
typedef struct _ScaleSlot {
|
||
|
int x1, y1, x2, y2;
|
||
|
int filled;
|
||
|
float scale;
|
||
|
} ScaleSlot;
|
||
|
|
||
|
typedef struct _SlotArea {
|
||
|
int nWindows;
|
||
|
XRectangle workArea;
|
||
|
} SlotArea;
|
||
|
|
||
|
#define SCALE_DISPLAY_OPTION_ABI 0
|
||
|
#define SCALE_DISPLAY_OPTION_INDEX 1
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_EDGE 2
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_BUTTON 3
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_KEY 4
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_ALL_EDGE 5
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_ALL_BUTTON 6
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_ALL_KEY 7
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_GROUP_EDGE 8
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_GROUP_BUTTON 9
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_GROUP_KEY 10
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_OUTPUT_EDGE 11
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_OUTPUT_BUTTON 12
|
||
|
#define SCALE_DISPLAY_OPTION_INITIATE_OUTPUT_KEY 13
|
||
|
#define SCALE_DISPLAY_OPTION_SHOW_DESKTOP 14
|
||
|
#define SCALE_DISPLAY_OPTION_RELAYOUT 15
|
||
|
#define SCALE_DISPLAY_OPTION_KEY_BINDINGS_TOGGLE 16
|
||
|
#define SCALE_DISPLAY_OPTION_BUTTON_BINDINGS_TOGGLE 17
|
||
|
#define SCALE_DISPLAY_OPTION_NUM 18
|
||
|
|
||
|
typedef struct _ScaleDisplay {
|
||
|
int screenPrivateIndex;
|
||
|
HandleEventProc handleEvent;
|
||
|
|
||
|
CompOption opt[SCALE_DISPLAY_OPTION_NUM];
|
||
|
|
||
|
unsigned int lastActiveNum;
|
||
|
Window lastActiveWindow;
|
||
|
|
||
|
Window selectedWindow;
|
||
|
Window hoveredWindow;
|
||
|
Window previousActiveWindow;
|
||
|
|
||
|
KeyCode leftKeyCode, rightKeyCode, upKeyCode, downKeyCode;
|
||
|
} ScaleDisplay;
|
||
|
|
||
|
#define SCALE_SCREEN_OPTION_SPACING 0
|
||
|
#define SCALE_SCREEN_OPTION_SPEED 1
|
||
|
#define SCALE_SCREEN_OPTION_TIMESTEP 2
|
||
|
#define SCALE_SCREEN_OPTION_WINDOW_MATCH 3
|
||
|
#define SCALE_SCREEN_OPTION_DARKEN_BACK 4
|
||
|
#define SCALE_SCREEN_OPTION_OPACITY 5
|
||
|
#define SCALE_SCREEN_OPTION_ICON 6
|
||
|
#define SCALE_SCREEN_OPTION_HOVER_TIME 7
|
||
|
#define SCALE_SCREEN_OPTION_MULTIOUTPUT_MODE 8
|
||
|
#define SCALE_SCREEN_OPTION_NUM 9
|
||
|
|
||
|
typedef enum {
|
||
|
ScaleTypeNormal = 0,
|
||
|
ScaleTypeOutput,
|
||
|
ScaleTypeGroup,
|
||
|
ScaleTypeAll
|
||
|
} ScaleType;
|
||
|
|
||
|
typedef Bool (*ScaleLayoutSlotsAndAssignWindowsProc) (CompScreen *s);
|
||
|
|
||
|
typedef Bool (*ScaleSetScaledPaintAttributesProc) (CompWindow *w,
|
||
|
WindowPaintAttrib *attrib);
|
||
|
|
||
|
typedef void (*ScalePaintDecorationProc) (CompWindow *w,
|
||
|
const WindowPaintAttrib *attrib,
|
||
|
const CompTransform *transform,
|
||
|
Region region,
|
||
|
unsigned int mask);
|
||
|
|
||
|
typedef void (*ScaleSelectWindowProc) (CompWindow *w);
|
||
|
|
||
|
typedef struct _ScaleScreen {
|
||
|
int windowPrivateIndex;
|
||
|
|
||
|
PreparePaintScreenProc preparePaintScreen;
|
||
|
DonePaintScreenProc donePaintScreen;
|
||
|
PaintOutputProc paintOutput;
|
||
|
PaintWindowProc paintWindow;
|
||
|
DamageWindowRectProc damageWindowRect;
|
||
|
|
||
|
ScaleLayoutSlotsAndAssignWindowsProc layoutSlotsAndAssignWindows;
|
||
|
ScaleSetScaledPaintAttributesProc setScaledPaintAttributes;
|
||
|
ScalePaintDecorationProc scalePaintDecoration;
|
||
|
ScaleSelectWindowProc selectWindow;
|
||
|
|
||
|
CompOption opt[SCALE_SCREEN_OPTION_NUM];
|
||
|
|
||
|
Bool grab;
|
||
|
int grabIndex;
|
||
|
|
||
|
Window dndTarget;
|
||
|
|
||
|
CompTimeoutHandle hoverHandle;
|
||
|
|
||
|
int state;
|
||
|
int moreAdjust;
|
||
|
|
||
|
Cursor cursor;
|
||
|
|
||
|
ScaleSlot *slots;
|
||
|
int slotsSize;
|
||
|
int nSlots;
|
||
|
|
||
|
/* only used for sorting */
|
||
|
CompWindow **windows;
|
||
|
int windowsSize;
|
||
|
int nWindows;
|
||
|
|
||
|
GLushort opacity;
|
||
|
|
||
|
ScaleType type;
|
||
|
|
||
|
Window clientLeader;
|
||
|
|
||
|
CompMatch match;
|
||
|
CompMatch *currentMatch;
|
||
|
} ScaleScreen;
|
||
|
|
||
|
typedef struct _ScaleWindow {
|
||
|
ScaleSlot *slot;
|
||
|
|
||
|
int sid;
|
||
|
int distance;
|
||
|
|
||
|
GLfloat xVelocity, yVelocity, scaleVelocity;
|
||
|
GLfloat scale;
|
||
|
GLfloat tx, ty;
|
||
|
float delta;
|
||
|
Bool adjust;
|
||
|
|
||
|
float lastThumbOpacity;
|
||
|
} ScaleWindow;
|
||
|
|
||
|
#define GET_SCALE_DISPLAY(d) \
|
||
|
((ScaleDisplay *) (d)->base.privates[scaleDisplayPrivateIndex].ptr)
|
||
|
|
||
|
#define SCALE_DISPLAY(d) \
|
||
|
ScaleDisplay *sd = GET_SCALE_DISPLAY (d)
|
||
|
|
||
|
#define GET_SCALE_SCREEN(s, sd) \
|
||
|
((ScaleScreen *) (s)->base.privates[(sd)->screenPrivateIndex].ptr)
|
||
|
|
||
|
#define SCALE_SCREEN(s) \
|
||
|
ScaleScreen *ss = GET_SCALE_SCREEN (s, GET_SCALE_DISPLAY (s->display))
|
||
|
|
||
|
#define GET_SCALE_WINDOW(w, ss) \
|
||
|
((ScaleWindow *) (w)->base.privates[(ss)->windowPrivateIndex].ptr)
|
||
|
|
||
|
#define SCALE_WINDOW(w) \
|
||
|
ScaleWindow *sw = GET_SCALE_WINDOW (w, \
|
||
|
GET_SCALE_SCREEN (w->screen, \
|
||
|
GET_SCALE_DISPLAY (w->screen->display)))
|
||
|
|
||
|
COMPIZ_END_DECLS
|
||
|
|
||
|
#endif
|