1 /*
2 * This file is a part of the Cairo-Dock project
3 *
4 * Copyright : (C) see the 'copyright' file.
5 * E-mail    : see the 'copyright' file.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 3
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 
21 #ifndef __CAIRO_DOCK_BACKENDS_MANAGER__
22 #define  __CAIRO_DOCK_BACKENDS_MANAGER__
23 
24 #include <glib.h>
25 
26 #include "cairo-dock-struct.h"
27 #include "cairo-dock-manager.h"
28 #include "cairo-dock-desklet-factory.h"
29 #include "cairo-dock-dock-factory.h"
30 #include "cairo-dock-dialog-factory.h"
31 G_BEGIN_DECLS
32 
33 // manager
34 typedef struct _CairoBackendsParam CairoBackendsParam;
35 
36 #ifndef _MANAGER_DEF_
37 extern GldiManager myBackendsMgr;
38 extern CairoBackendsParam myBackendsParam;
39 #endif
40 
41 // params
42 struct _CairoBackendsParam {
43 	// views
44 	gchar *cMainDockDefaultRendererName;
45 	gchar *cSubDockDefaultRendererName;
46 	gdouble fSubDockSizeRatio;
47 	// system
48 	gint iUnfoldingDuration;
49 	gint iGrowUpInterval, iShrinkDownInterval;
50 	gint iHideNbSteps, iUnhideNbSteps;
51 	gdouble fRefreshInterval;
52 	gboolean bDynamicReflection;
53 	};
54 
55 struct _CairoDockAnimationRecord {
56 	gint id;
57 	const gchar *cDisplayedName;
58 	gboolean bIsEffect;
59 	};
60 
61 // Dock renderer
62 CairoDockRenderer *cairo_dock_get_renderer (const gchar *cRendererName, gboolean bForMainDock);
63 void cairo_dock_register_renderer (const gchar *cRendererName, CairoDockRenderer *pRenderer);
64 void cairo_dock_remove_renderer (const gchar *cRendererName);
65 
66 // Desklet renderer
67 CairoDeskletRenderer *cairo_dock_get_desklet_renderer (const gchar *cRendererName);
68 void cairo_dock_register_desklet_renderer (const gchar *cRendererName, CairoDeskletRenderer *pRenderer);
69 void cairo_dock_remove_desklet_renderer (const gchar *cRendererName);
70 void cairo_dock_predefine_desklet_renderer_config (CairoDeskletRenderer *pRenderer, const gchar *cConfigName, CairoDeskletRendererConfigPtr pConfig);
71 CairoDeskletRendererConfigPtr cairo_dock_get_desklet_renderer_predefined_config (const gchar *cRendererName, const gchar *cConfigName);
72 
73 // Dialog renderer
74 CairoDialogRenderer *cairo_dock_get_dialog_renderer (const gchar *cRendererName);
75 void cairo_dock_register_dialog_renderer (const gchar *cRendererName, CairoDialogRenderer *pRenderer);
76 void cairo_dock_remove_dialog_renderer (const gchar *cRendererName);
77 
78 // Desklet decorations
79 CairoDeskletDecoration *cairo_dock_get_desklet_decoration (const gchar *cDecorationName);
80 void cairo_dock_register_desklet_decoration (const gchar *cDecorationName, CairoDeskletDecoration *pDecoration);
81 void cairo_dock_remove_desklet_decoration (const gchar *cDecorationName);
82 
83 // Hiding animations
84 CairoDockHidingEffect *cairo_dock_get_hiding_effect (const gchar *cHidingEffect);
85 void cairo_dock_register_hiding_effect (const gchar *cHidingEffect, CairoDockHidingEffect *pEffect);
86 void cairo_dock_remove_hiding_effect (const gchar *cHidingEffect);
87 
88 // Container Icon renderer
89 CairoIconContainerRenderer *cairo_dock_get_icon_container_renderer (const gchar *cRendererName);
90 void cairo_dock_register_icon_container_renderer (const gchar *cRendererName, CairoIconContainerRenderer *pRenderer);
91 void cairo_dock_remove_icon_container_renderer (const gchar *cRendererName);
92 void cairo_dock_foreach_icon_container_renderer (GHFunc pCallback, gpointer data);
93 
94 
95 void cairo_dock_set_renderer (CairoDock *pDock, const gchar *cRendererName);
96 void cairo_dock_set_default_renderer (CairoDock *pDock);
97 
98 void cairo_dock_set_desklet_renderer (CairoDesklet *pDesklet, CairoDeskletRenderer *pRenderer, CairoDeskletRendererConfigPtr pConfig);
99 void cairo_dock_set_desklet_renderer_by_name (CairoDesklet *pDesklet, const gchar *cRendererName, CairoDeskletRendererConfigPtr pConfig);
100 
101 void cairo_dock_set_dialog_renderer (CairoDialog *pDialog, CairoDialogRenderer *pRenderer, CairoDialogRendererConfigPtr pConfig);
102 void cairo_dock_set_dialog_renderer_by_name (CairoDialog *pDialog, const gchar *cRendererName, CairoDialogRendererConfigPtr pConfig);
103 
104 // Dialog decorator
105 CairoDialogDecorator *cairo_dock_get_dialog_decorator (const gchar *cDecoratorName);
106 void cairo_dock_register_dialog_decorator (const gchar *cDecoratorName, CairoDialogDecorator *pDecorator);
107 void cairo_dock_remove_dialog_decorator (const gchar *cDecoratorName);
108 void cairo_dock_set_dialog_decorator (CairoDialog *pDialog, CairoDialogDecorator *pDecorator);
109 void cairo_dock_set_dialog_decorator_by_name (CairoDialog *pDialog, const gchar *cDecoratorName);
110 
111 
112 void cairo_dock_render_desklet_with_new_data (CairoDesklet *pDesklet, CairoDeskletRendererDataPtr pNewData);
113 void cairo_dock_render_dialog_with_new_data (CairoDialog *pDialog, CairoDialogRendererDataPtr pNewData);
114 
115 
116 void cairo_dock_foreach_dock_renderer (GHFunc pFunction, gpointer data);
117 void cairo_dock_foreach_desklet_decoration (GHFunc pFunction, gpointer data);
118 void cairo_dock_foreach_dialog_decorator (GHFunc pFunction, gpointer data);
119 void cairo_dock_foreach_animation (GHFunc pFunction, gpointer data);
120 
121 
122 void cairo_dock_update_renderer_list_for_gui (void);
123 void cairo_dock_update_desklet_decorations_list_for_gui (void);
124 void cairo_dock_update_desklet_decorations_list_for_applet_gui (void);
125 void cairo_dock_update_animations_list_for_gui (void);
126 void cairo_dock_update_dialog_decorator_list_for_gui (void);
127 
128 
129 // Icon animations
130 int cairo_dock_register_animation (const gchar *cAnimation, const gchar *cDisplayedName, gboolean bIsEffect);
131 void cairo_dock_free_animation_record (CairoDockAnimationRecord *pRecord);
132 int cairo_dock_get_animation_id (const gchar *cAnimation);
133 const gchar *cairo_dock_get_animation_displayed_name (const gchar *cAnimation);
134 void cairo_dock_unregister_animation (const gchar *cAnimation);
135 void cairo_dock_foreach_animation (GHFunc pHFunction, gpointer data);
136 
137 
138 #define CAIRO_CONTAINER_IS_OPENGL(pContainer) (g_bUseOpenGL && ((CAIRO_DOCK_IS_DOCK (pContainer) && CAIRO_DOCK (pContainer)->pRenderer->render_opengl) || (CAIRO_DOCK_IS_DESKLET (pContainer) && CAIRO_DESKLET (pContainer)->pRenderer && CAIRO_DESKLET (pContainer)->pRenderer->render_opengl)))
139 #define CAIRO_DOCK_CONTAINER_IS_OPENGL CAIRO_CONTAINER_IS_OPENGL
140 
141 void gldi_register_backends_manager (void);
142 
143 G_END_DECLS
144 #endif
145