cairo-dock-struct.h

Aller à la documentation de ce fichier.
00001 /******************************************************************************
00002 
00003 This file is a part of the cairo-dock program, 
00004 released under the terms of the GNU General Public License.
00005 
00006 Written by Fabrice Rey (for any bug report, please mail me to fabounet_03@yahoo.fr)
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;  // la liste de ses icones.
00057         GtkWidget *pWidget;  // sa fenetre de dessin.
00058         gboolean bIsMainDock;  // si le dock est le dock racine.
00059         gint iRefCount;  // le nombre d'icones pointant sur lui.
00060         
00061         //\_______________ Les parametres de position et de geometrie de la fenetre du dock.
00062         gint iGapX;  // decalage de la zone par rapport au milieu bas de l'ecran.
00063         gint iGapY;
00064         gdouble fAlign;  // alignement, entre 0 et 1, du dock sur le bord de l'ecran.
00065         CairoDockTypeHorizontality bHorizontalDock;  // dit si le dock est horizontal ou vertical.
00066         
00067         gint iMaxIconHeight;  // max des hauteurs des icones.
00068         gint iFlatDockWidth;  // largeur du dock a plat, avec juste les icones.
00069         gint iMinDockWidth;  // taille du dock au repos.
00070         gint iMinDockHeight;
00071         gint iMaxDockWidth;  // taille du dock actif.
00072         gint iMaxDockHeight;
00073         gint iDecorationsWidth;  // la taille des decorations.
00074         gint iDecorationsHeight;
00075         gint iWindowPositionX;  // dock-windows current y-position
00076         gint iWindowPositionY;  // dock-windows current y-position
00077         gint iCurrentWidth;  // taille de la fenetre, _apres_ le redimensionnement par GTK.
00078         gint iCurrentHeight;
00079         
00080         //\_______________ Les parametres lies a une animation du dock.
00081         gint iScrollOffset;  // pour faire defiler les icones avec la molette.
00082         gint iMagnitudeIndex; // indice de calcul du coef multiplicateur de l'amplitude de la sinusoide (entre 0 et 1000).
00083         gdouble fFoldingFactor;  // un facteur d'acceleration lateral des icones lors du grossissement initial.
00084         gint iMouseX;  // derniere position du curseur (pour l'instant, dans le cas de decorations non asservies).
00085         gint iMouseY;
00086         gint iAvoidingMouseIconType;  // type d'icone devant eviter la souris, -1 si aucun.
00087         gdouble fAvoidingMouseMargin;  // marge d'evitement de la souris, en fraction de la largeur d'une icone (entre 0 et 0.5) 
00088         
00089         GList *pFirstDrawnElement;  // pointeur sur le 1er element de la liste des icones a etre dessine, en partant de la gauche.
00090         gdouble fDecorationsOffsetX;  // decalage des decorations pour les faire suivre la souris.
00091         
00092         gboolean bAtBottom;  // le dock est en bas au repos.
00093         gboolean bAtTop;  // le dock est en haut pret a etre utilise.
00094         gboolean bInside;  // lorsque la souris est dans le dock.
00095         gboolean bMenuVisible;  // lorsque le menu du clique droit est visible.
00096         
00097         //\_______________ Les ID des threads en cours sur le dock.
00098         gint iSidMoveDown;  // serial ID du thread de descente de la fenetre.
00099         gint iSidMoveUp;  // serial ID du thread de montee de la fenetre.
00100         gint iSidGrowUp;  // serial ID du thread de grossisement des icones.
00101         gint iSidShrinkDown;  // serial ID du thread de diminution des icones.
00102         gint iSidLeaveDemand;  // serial ID du thread qui enverra le signal de sortie retarde.
00103         
00104         //\_______________ Les fonctions de dessin du dock.
00105         gchar *cRendererName;  // nom de la vue, utile pour charger les fonctions de rendu posterieurement a la creation du dock.
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;  // dit si la vue courante utilise les reflets ou pas (utile pour les plug-ins).
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);  // renvoie son icone si il en a.
00132 
00133 typedef void (*CairoDockModuleStop) (void);
00134 
00135 struct _CairoDockModule {
00136         gchar *cModuleName;  // le nom du module : libtruc.so => cModuleName = 'truc'.
00137         gchar *cSoFilePath;  // le chemin du .so.
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);  // NULL <=> Annuler ou Non.
00148 
00149 struct _CairoDockDialog
00150 {
00151         int iWidth;  // dimensions de la fenetre GTK du dialogue.
00152         int iHeight;
00153         int iPositionX;  // position de la fenetre GTK du dialogue.
00154         int iPositionY;
00155         int iAimedX;  // position visee par la pointe.
00156         int iAimedY;
00157         gboolean bRight;  // dialogue a droite <=> pointe a gauche.
00158         gboolean bIsPerpendicular;  // TRUE <=> dialogue perpendiculaire au dock.
00159         gboolean bDirectionUp;  // TRUE <=> pointe vers le bas.
00160         double fRadius;  // rayon des coins.
00161         double fTipHeight;  // hauteur de la pointe, sans la partie "aiguisee".
00162         cairo_surface_t* pTextBuffer;  // surface du message + icone.
00163         int iTextWidth;  // taille de la zone de texte globale (widgets et boutons compris).
00164         int iTextHeight;
00165         int iMessageHeight;  // hauteur du message + double marge.
00166         int iButtonOkOffset;  // decalage pour l'effet de clique sur le bouton.
00167         int iButtonCancelOffset;
00168         GtkWidget *pWidget;  // la fenetre GTK.
00169         int iSidTimer;  // le timer pour la destruction du dialogue.
00170         int iRefCount;  // reference atomique.
00171         gboolean bBuildComplete;  // TRUE quand la fenetre GTK a atteint sa dimension definitive.
00172         GtkWidget *pInteractiveWidget;  // le widget d'interaction utilisateur.
00173         int iButtonsType;  // le type des boutons (aucun, oui/non, ok/annuler).
00174         CairoDockActionOnAnswerFunc action_on_answer;  // fonction appelee au clique sur l'un des 2 boutons.
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         //\____________ renseignes lors de la creation de l'icone.
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         //\____________ calcules lors du chargement de l'icone.
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         //\____________ calcules a chaque scroll et insertion/suppression d'une icone.
00228         gdouble fXAtRest;
00229         //\____________ calcules a chaque fois.
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         //\____________ Pour les applis.
00246         gint iPid;
00247         Window Xid;
00248         gchar *cClass;
00249         double fLastCheckTime;
00250         //\____________ Pour les modules.
00251         CairoDockModule *pModule;
00252         gchar *cQuickInfo;
00253         cairo_surface_t* pQuickInfoBuffer;
00254         int iQuickInfoWidth;
00255         int iQuickInfoHeight;
00256         double fQuickInfoXOffset;
00257         double fQuickInfoYOffset;
00258         //\____________ Pour les bulles de dialogues.
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

Généré le Tue Dec 4 16:38:28 2007 pour Cairo-Dock par  doxygen 1.4.6