00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __CAIRO_DOCK_STRUCT__
00010 #define __CAIRO_DOCK_STRUCT__
00011
00012 #include <glib.h>
00013 #include <gdk/gdk.h>
00014 #include <X11/Xlib.h>
00015 #include <gtk/gtk.h>
00016 #include <cairo.h>
00017 #include <librsvg/rsvg.h>
00018 #include <librsvg/rsvg-cairo.h>
00019
00020 #ifdef HAVE_GLITZ
00021 #include <gdk/gdkx.h>
00022 #include <glitz-glx.h>
00023 #include <cairo-glitz.h>
00024 #endif
00025
00026 typedef struct _CairoDock CairoDock;
00027 typedef struct _CairoDockModule CairoDockModule;
00028 typedef struct _CairoDockDialog CairoDockDialog;
00029 typedef struct _Icon Icon;
00030 typedef struct _CairoDockVisitCard CairoDockVisitCard;
00031
00032 typedef enum {
00033 CAIRO_DOCK_VERTICAL = 0,
00034 CAIRO_DOCK_HORIZONTAL
00035 } CairoDockTypeHorizontality;
00036
00037
00038 typedef void (*CairoDockCalculateMaxDockSizeFunc) (CairoDock *pDock);
00039 typedef Icon * (*CairoDockCalculateIconsFunc) (CairoDock *pDock);
00040 typedef void (*CairoDockRenderFunc) (CairoDock *pDock);
00041 typedef void (*CairoDockRenderOptimizedFunc) (CairoDock *pDock, GdkRectangle *pArea);
00042 typedef void (*CairoDockSetSubDockPositionFunc) (Icon *pPointedIcon, CairoDock *pParentDock);
00043
00044 typedef struct _CairoDockRenderer {
00045 gchar *cReadmeFilePath;
00046 CairoDockCalculateMaxDockSizeFunc calculate_max_dock_size;
00047 CairoDockCalculateIconsFunc calculate_icons;
00048 CairoDockRenderFunc render;
00049 CairoDockRenderOptimizedFunc render_optimized;
00050 CairoDockSetSubDockPositionFunc set_subdock_position;
00051 gboolean bUseReflect;
00052 } CairoDockRenderer;
00053
00054
00055 struct _CairoDock {
00057 GList* icons;
00059 GtkWidget *pWidget;
00061 gboolean bIsMainDock;
00063 gint iRefCount;
00064
00065
00067 gint iGapX;
00069 gint iGapY;
00071 gdouble fAlign;
00073 CairoDockTypeHorizontality bHorizontalDock;
00074
00076 gint iMaxIconHeight;
00078 gint iFlatDockWidth;
00080 gint iMinDockWidth;
00082 gint iMinDockHeight;
00084 gint iMaxDockWidth;
00086 gint iMaxDockHeight;
00088 gint iDecorationsWidth;
00090 gint iDecorationsHeight;
00092 gint iWindowPositionX;
00094 gint iWindowPositionY;
00096 gint iCurrentWidth;
00098 gint iCurrentHeight;
00099
00100
00102 gint iScrollOffset;
00104 gint iMagnitudeIndex;
00106 gdouble fFoldingFactor;
00108 gint iMouseX;
00110 gint iMouseY;
00112 gint iAvoidingMouseIconType;
00114 gdouble fAvoidingMouseMargin;
00115
00117 GList *pFirstDrawnElement;
00119 gdouble fDecorationsOffsetX;
00120
00122 gboolean bAtBottom;
00124 gboolean bAtTop;
00126 gboolean bInside;
00128 gboolean bMenuVisible;
00129
00130
00132 gint iSidMoveDown;
00134 gint iSidMoveUp;
00136 gint iSidGrowUp;
00138 gint iSidShrinkDown;
00140 gint iSidLeaveDemand;
00141
00142
00144 gchar *cRendererName;
00146 CairoDockCalculateMaxDockSizeFunc calculate_max_dock_size;
00148 CairoDockCalculateIconsFunc calculate_icons;
00150 CairoDockRenderFunc render;
00152 CairoDockRenderOptimizedFunc render_optimized;
00154 CairoDockSetSubDockPositionFunc set_subdock_position;
00156 gboolean bUseReflect;
00157
00158 #ifdef HAVE_GLITZ
00159 glitz_drawable_format_t *pDrawFormat;
00160 glitz_drawable_t* pGlitzDrawable;
00161 glitz_format_t* pGlitzFormat;
00162 #endif // HAVE_GLITZ
00163 };
00164
00165
00166 struct _CairoDockVisitCard {
00168 gchar *cModuleName;
00170 gchar *cReadmeFilePath;
00172 short iMajorVersionNeeded;
00174 short iMinorVersionNeeded;
00176 short iMicroVersionNeeded;
00177 };
00178
00179 typedef CairoDockVisitCard * (* CairoDockModulePreInit) (void);
00180
00181 typedef gpointer (*CairoDockModuleInit) (CairoDock *pDock, gchar **cConfFilePath, GError **erreur);
00182
00183 typedef void (*CairoDockModuleStop) (void);
00184
00185 struct _CairoDockModule {
00187 gchar *cModuleName;
00189 gchar *cSoFilePath;
00191 GModule *pModule;
00193 CairoDockModuleInit initModule;
00195 CairoDockModuleStop stopModule;
00197 gchar *cConfFilePath;
00199 gchar *cReadmeFilePath;
00201 gboolean bActive;
00202 };
00203
00204
00205 typedef void (* CairoDockActionOnAnswerFunc) (int iAnswer, GtkWidget *pWidget, gpointer data);
00206
00207 struct _CairoDockDialog
00208 {
00210 int iWidth;
00212 int iHeight;
00214 int iPositionX;
00216 int iPositionY;
00218 int iAimedX;
00220 int iAimedY;
00222 gboolean bRight;
00224 gboolean bIsPerpendicular;
00226 gboolean bDirectionUp;
00228 double fRadius;
00230 double fTipHeight;
00232 cairo_surface_t* pTextBuffer;
00234 int iTextWidth;
00236 int iTextHeight;
00238 int iMessageHeight;
00240 int iButtonOkOffset;
00242 int iButtonCancelOffset;
00244 GtkWidget *pWidget;
00246 int iSidTimer;
00248 int iRefCount;
00250 gboolean bBuildComplete;
00252 GtkWidget *pInteractiveWidget;
00254 int iButtonsType;
00256 CairoDockActionOnAnswerFunc action_on_answer;
00258 gpointer pUserData;
00260 GFreeFunc pFreeUserDataFunc;
00261 };
00262
00263
00264 typedef enum {
00265 CAIRO_DOCK_LAUNCHER = 0,
00266 CAIRO_DOCK_SEPARATOR12,
00267 CAIRO_DOCK_APPLI,
00268 CAIRO_DOCK_SEPARATOR23,
00269 CAIRO_DOCK_APPLET,
00270 CAIRO_DOCK_NB_TYPES
00271 } CairoDockIconType;
00272
00273 typedef enum {
00274 CAIRO_DOCK_BOUNCE = 0,
00275 CAIRO_DOCK_ROTATE,
00276 CAIRO_DOCK_BLINK,
00277 CAIRO_DOCK_PULSE,
00278 CAIRO_DOCK_UPSIDE_DOWN,
00279 CAIRO_DOCK_WOBBLY,
00280 CAIRO_DOCK_RANDOM,
00281 CAIRO_DOCK_NB_ANIMATIONS,
00282 CAIRO_DOCK_FOLLOW_MOUSE,
00283 CAIRO_DOCK_AVOID_MOUSE
00284 } CairoDockAnimationType;
00285
00286 struct _Icon {
00287
00289 gchar *acDesktopFileName;
00291 gchar *cBaseURI;
00293 gint iVolumeID;
00295 gchar* acFileName;
00297 gchar* acName;
00299 gchar* acCommand;
00301 CairoDockIconType iType;
00303 gdouble fOrder;
00305 CairoDock *pSubDock;
00307 gchar *cParentDockName;
00308
00310 gdouble fWidth;
00312 gdouble fHeight;
00314 cairo_surface_t* pIconBuffer;
00316 cairo_surface_t* pTextBuffer;
00318 cairo_surface_t* pReflectionBuffer;
00320 cairo_surface_t* pFullIconBuffer;
00322 int iTextWidth;
00324 int iTextHeight;
00326 gdouble fTextXOffset;
00328 gdouble fTextYOffset;
00330 gdouble fXMax;
00332 gdouble fXMin;
00333
00335 gdouble fXAtRest;
00336
00338 gdouble fPhase;
00340 gdouble fX;
00342 gdouble fY;
00344 gdouble fScale;
00346 gdouble fDrawX;
00348 gdouble fDrawY;
00350 gdouble fWidthFactor;
00352 gdouble fHeightFactor;
00354 gdouble fAlpha;
00356 gboolean bPointed;
00358 gint iCount;
00360 CairoDockAnimationType iAnimationType;
00362 gdouble fPersonnalScale;
00364 gdouble fDeltaYReflection;
00366 gdouble fOrientation;
00367
00369 gint iPid;
00371 Window Xid;
00373 gchar *cClass;
00375 double fLastCheckTime;
00377 gboolean bIsHidden;
00378
00380 CairoDockModule *pModule;
00382 gchar *cQuickInfo;
00384 cairo_surface_t* pQuickInfoBuffer;
00386 int iQuickInfoWidth;
00388 int iQuickInfoHeight;
00390 double fQuickInfoXOffset;
00392 double fQuickInfoYOffset;
00393
00395 CairoDockDialog *pDialog;
00396 };
00397
00398
00400 #define CAIRO_DOCK_DATA_DIR ".cairo-dock"
00402 #define CAIRO_DOCK_THEMES_DIR "themes"
00404 #define CAIRO_DOCK_CURRENT_THEME_NAME "current_theme"
00406 #define CAIRO_DOCK_LAUNCHERS_DIR "launchers"
00408 #define CAIRO_DOCK_MAIN_DOCK_NAME "_MainDock_"
00410 #define CAIRO_DOCK_DEFAULT_RENDERER_NAME "default"
00411
00412
00413 #define CAIRO_DOCK_LAST_ORDER -1e9
00414 #define CAIRO_DOCK_NB_MAX_ITERATIONS 1000
00415
00416 #define CAIRO_DOCK_UPDATE_DOCK_SIZE TRUE
00417 #define CAIRO_DOCK_ANIMATE_ICON TRUE
00418 #define CAIRO_DOCK_APPLY_RATIO TRUE
00419
00420 #ifdef CAIRO_DOCK_VERBOSE
00421 #define CAIRO_DOCK_MESSAGE if (g_bVerbose) g_message
00422 #else
00423 #define CAIRO_DOCK_MESSAGE(s, ...)
00424 #endif
00425
00426
00427 typedef enum {
00428 CAIRO_DOCK_MAX_SIZE,
00429 CAIRO_DOCK_NORMAL_SIZE,
00430 CAIRO_DOCK_MIN_SIZE
00431 } CairoDockSizeType;
00432
00433 typedef enum {
00434 CAIRO_DOCK_MOUSE_INSIDE,
00435 CAIRO_DOCK_MOUSE_ON_THE_EDGE,
00436 CAIRO_DOCK_MOUSE_OUTSIDE
00437 } CairoDockMousePositionType;
00438
00439 typedef void (* CairoDockConfigFunc) (gchar *cConfFile, gpointer data);
00440
00441 typedef enum {
00442 CAIRO_DOCK_UNKNOWN_ENV=0,
00443 CAIRO_DOCK_GNOME,
00444 CAIRO_DOCK_KDE
00445 } CairoDockDesktopEnv;
00446
00447 typedef enum
00448 {
00449 CAIRO_DOCK_BOTTOM = 0,
00450 CAIRO_DOCK_TOP,
00451 CAIRO_DOCK_LEFT,
00452 CAIRO_DOCK_RIGHT,
00453 CAIRO_DOCK_NB_POSITIONS
00454 } CairoDockPositionType;
00455
00456 #endif