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 {
00056 GList* icons;
00057 GtkWidget *pWidget;
00058 gboolean bIsMainDock;
00059 gint iRefCount;
00060
00061
00062 gint iGapX;
00063 gint iGapY;
00064 gdouble fAlign;
00065 CairoDockTypeHorizontality bHorizontalDock;
00066
00067 gint iMaxIconHeight;
00068 gint iFlatDockWidth;
00069 gint iMinDockWidth;
00070 gint iMinDockHeight;
00071 gint iMaxDockWidth;
00072 gint iMaxDockHeight;
00073 gint iDecorationsWidth;
00074 gint iDecorationsHeight;
00075 gint iWindowPositionX;
00076 gint iWindowPositionY;
00077 gint iCurrentWidth;
00078 gint iCurrentHeight;
00079
00080
00081 gint iScrollOffset;
00082 gint iMagnitudeIndex;
00083 gdouble fFoldingFactor;
00084 gint iMouseX;
00085 gint iMouseY;
00086 gint iAvoidingMouseIconType;
00087 gdouble fAvoidingMouseMargin;
00088
00089 GList *pFirstDrawnElement;
00090 gdouble fDecorationsOffsetX;
00091
00092 gboolean bAtBottom;
00093 gboolean bAtTop;
00094 gboolean bInside;
00095 gboolean bMenuVisible;
00096
00097
00098 gint iSidMoveDown;
00099 gint iSidMoveUp;
00100 gint iSidGrowUp;
00101 gint iSidShrinkDown;
00102 gint iSidLeaveDemand;
00103
00104
00105 gchar *cRendererName;
00106 CairoDockCalculateMaxDockSizeFunc calculate_max_dock_size;
00107 CairoDockCalculateIconsFunc calculate_icons;
00108 CairoDockRenderFunc render;
00109 CairoDockRenderOptimizedFunc render_optimized;
00110 CairoDockSetSubDockPositionFunc set_subdock_position;
00111 gboolean bUseReflect;
00112
00113 #ifdef HAVE_GLITZ
00114 glitz_drawable_format_t *pDrawFormat;
00115 glitz_drawable_t* pGlitzDrawable;
00116 glitz_format_t* pGlitzFormat;
00117 #endif // HAVE_GLITZ
00118 };
00119
00120
00121 struct _CairoDockVisitCard {
00122 gchar *cModuleName;
00123 gchar *cReadmeFilePath;
00124 short iMajorVersionNeeded;
00125 short iMinorVersionNeeded;
00126 short iMicroVersionNeeded;
00127 };
00128
00129 typedef CairoDockVisitCard * (* CairoDockModulePreInit) (void);
00130
00131 typedef gpointer (*CairoDockModuleInit) (CairoDock *pDock, gchar **cConfFilePath, GError **erreur);
00132
00133 typedef void (*CairoDockModuleStop) (void);
00134
00135 struct _CairoDockModule {
00136 gchar *cModuleName;
00137 gchar *cSoFilePath;
00138 GModule *pModule;
00139 CairoDockModuleInit initModule;
00140 CairoDockModuleStop stopModule;
00141 gchar *cConfFilePath;
00142 gchar *cReadmeFilePath;
00143 gboolean bActive;
00144 };
00145
00146
00147 typedef void (* CairoDockActionOnAnswerFunc) (gchar *cAnswer, gpointer data);
00148
00149 struct _CairoDockDialog
00150 {
00151 int iWidth;
00152 int iHeight;
00153 int iPositionX;
00154 int iPositionY;
00155 int iAimedX;
00156 int iAimedY;
00157 gboolean bRight;
00158 gboolean bIsPerpendicular;
00159 gboolean bDirectionUp;
00160 double fRadius;
00161 double fTipHeight;
00162 cairo_surface_t* pTextBuffer;
00163 int iTextWidth;
00164 int iTextHeight;
00165 int iMessageHeight;
00166 int iButtonOkOffset;
00167 int iButtonCancelOffset;
00168 GtkWidget *pWidget;
00169 int iSidTimer;
00170 int iRefCount;
00171 gboolean bBuildComplete;
00172 GtkWidget *pInteractiveWidget;
00173 int iButtonsType;
00174 CairoDockActionOnAnswerFunc action_on_answer;
00175 gpointer pUserData;
00176 GFreeFunc pFreeUserDataFunc;
00177 };
00178
00179
00180 typedef enum {
00181 CAIRO_DOCK_LAUNCHER = 0,
00182 CAIRO_DOCK_SEPARATOR12,
00183 CAIRO_DOCK_APPLI,
00184 CAIRO_DOCK_SEPARATOR23,
00185 CAIRO_DOCK_APPLET,
00186 CAIRO_DOCK_NB_TYPES
00187 } CairoDockIconType;
00188
00189 typedef enum {
00190 CAIRO_DOCK_BOUNCE = 0,
00191 CAIRO_DOCK_ROTATE,
00192 CAIRO_DOCK_BLINK,
00193 CAIRO_DOCK_PULSE,
00194 CAIRO_DOCK_UPSIDE_DOWN,
00195 CAIRO_DOCK_WOBBLY,
00196 CAIRO_DOCK_RANDOM,
00197 CAIRO_DOCK_NB_ANIMATIONS,
00198 CAIRO_DOCK_FOLLOW_MOUSE,
00199 CAIRO_DOCK_AVOID_MOUSE
00200 } CairoDockAnimationType;
00201
00202 struct _Icon {
00203
00204 gchar *acDesktopFileName;
00205 gchar *cBaseURI;
00206 gint iVolumeID;
00207 gchar* acFileName;
00208 gchar* acName;
00209 gchar* acCommand;
00210 CairoDockIconType iType;
00211 gdouble fOrder;
00212 CairoDock *pSubDock;
00213 gchar *cParentDockName;
00214
00215 gdouble fWidth;
00216 gdouble fHeight;
00217 cairo_surface_t* pIconBuffer;
00218 cairo_surface_t* pTextBuffer;
00219 cairo_surface_t* pReflectionBuffer;
00220 cairo_surface_t* pFullIconBuffer;
00221 int iTextWidth;
00222 int iTextHeight;
00223 gdouble fTextXOffset;
00224 gdouble fTextYOffset;
00225 gdouble fXMax;
00226 gdouble fXMin;
00227
00228 gdouble fXAtRest;
00229
00230 gdouble fPhase;
00231 gdouble fX;
00232 gdouble fY;
00233 gdouble fScale;
00234 gdouble fDrawX;
00235 gdouble fDrawY;
00236 gdouble fWidthFactor;
00237 gdouble fHeightFactor;
00238 gdouble fAlpha;
00239 gboolean bPointed;
00240 gint iCount;
00241 CairoDockAnimationType iAnimationType;
00242 gdouble fPersonnalScale;
00243 gdouble fDeltaYReflection;
00244 gdouble fOrientation;
00245
00246 gint iPid;
00247 Window Xid;
00248 gchar *cClass;
00249 double fLastCheckTime;
00250
00251 CairoDockModule *pModule;
00252 gchar *cQuickInfo;
00253 cairo_surface_t* pQuickInfoBuffer;
00254 int iQuickInfoWidth;
00255 int iQuickInfoHeight;
00256 double fQuickInfoXOffset;
00257 double fQuickInfoYOffset;
00258
00259 CairoDockDialog *pDialog;
00260 };
00261
00262
00263
00264 #define CAIRO_DOCK_DATA_DIR ".cairo-dock"
00265 #define CAIRO_DOCK_THEMES_DIR "themes"
00266 #define CAIRO_DOCK_CURRENT_THEME_NAME "current_theme"
00267 #define CAIRO_DOCK_LAUNCHERS_DIR "launchers"
00268
00269 #define CAIRO_DOCK_MAIN_DOCK_NAME "_MainDock_"
00270
00271 #define CAIRO_DOCK_DEFAULT_RENDERER_NAME "default"
00272
00273
00274 #define CAIRO_DOCK_LAST_ORDER -1e9
00275 #define CAIRO_DOCK_NB_MAX_ITERATIONS 1000
00276
00277 #define CAIRO_DOCK_UPDATE_DOCK_SIZE TRUE
00278 #define CAIRO_DOCK_ANIMATE_ICON TRUE
00279 #define CAIRO_DOCK_APPLY_RATIO TRUE
00280
00281 #ifdef CAIRO_DOCK_VERBOSE
00282 #define CAIRO_DOCK_MESSAGE if (g_bVerbose) g_message
00283 #else
00284 #define CAIRO_DOCK_MESSAGE(s, ...)
00285 #endif
00286
00287
00288 typedef enum {
00289 CAIRO_DOCK_MAX_SIZE,
00290 CAIRO_DOCK_NORMAL_SIZE,
00291 CAIRO_DOCK_MIN_SIZE
00292 } CairoDockSizeType;
00293
00294 typedef enum {
00295 CAIRO_DOCK_MOUSE_INSIDE,
00296 CAIRO_DOCK_MOUSE_ON_THE_EDGE,
00297 CAIRO_DOCK_MOUSE_OUTSIDE
00298 } CairoDockMousePositionType;
00299
00300 typedef void (* CairoDockConfigFunc) (gchar *cConfFile, gpointer data);
00301
00302 typedef enum {
00303 CAIRO_DOCK_UNKNOWN_ENV=0,
00304 CAIRO_DOCK_GNOME,
00305 CAIRO_DOCK_KDE
00306 } CairoDockDesktopEnv;
00307
00308 typedef enum
00309 {
00310 CAIRO_DOCK_BOTTOM = 0,
00311 CAIRO_DOCK_TOP,
00312 CAIRO_DOCK_LEFT,
00313 CAIRO_DOCK_RIGHT,
00314 CAIRO_DOCK_NB_POSITIONS
00315 } CairoDockPositionType;
00316
00317 #endif