28
28
static int s_iLeafPosition[2][3*3] = {{-30,30,1 , 60,107,0 , -45,115,1},{-60,65,0 , 55,115,1 , -30,115,0}};
31
CDTreeParameters *rendering_configure_tree (CairoDesklet *pDesklet, cairo_t *pSourceContext, gpointer *pConfig)
31
static CDTreeParameters *configure (CairoDesklet *pDesklet, CairoDeskletRendererConfigPtr pConfig)
33
CDTreeParameters *pTree = g_new0 (CDTreeParameters, 1);
38
static void load_data (CairoDesklet *pDesklet)
40
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
44
double fImageWidth = TREE_WIDTH * pTree->fTreeWidthFactor, fImageHeight = TREE_HEIGHT * pTree->fTreeHeightFactor;
45
gchar *cImageFilePath = g_strconcat (MY_APPLET_SHARE_DATA_DIR, "/branche1.svg", NULL);
47
pTree->pBrancheSurface[0] = cairo_dock_create_surface_from_image_simple (cImageFilePath,
51
cImageFilePath[strlen(cImageFilePath)-5] = '2';
52
pTree->pBrancheSurface[0] = cairo_dock_create_surface_from_image_simple (cImageFilePath,
55
g_free (cImageFilePath);
59
static void free_data (CairoDesklet *pDesklet)
62
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
66
cairo_surface_destroy (pTree->pBrancheSurface[0]);
67
cairo_surface_destroy (pTree->pBrancheSurface[1]);
70
pDesklet->pRendererData = NULL;
74
static void set_icon_size (CairoDesklet *pDesklet, Icon *pIcon)
76
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
80
if (pIcon == pDesklet->pIcon)
87
pIcon->fWidth = 48 * MIN (pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
88
pIcon->fHeight = 48 * MIN (pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
93
static void calculate_icons (CairoDesklet *pDesklet)
95
g_return_if_fail (pDesklet != NULL);
96
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
100
Icon *pIcon = pDesklet->pIcon;
101
if (pIcon != NULL) // on ne veut pas charger cette icone.
107
// on compte le nombre d'icones.
34
108
GList *pIconsList = pDesklet->icons;
35
109
if (pIconsList == NULL)
41
114
for (ic = pIconsList; ic != NULL; ic = ic->next)
44
if (! CAIRO_DOCK_IS_SEPARATOR (pIcon))
117
if (! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
50
CDTreeParameters *pTree = g_new0 (CDTreeParameters, 1);
121
// on en deduit les parametres de l'arbre.
51
122
pTree->iNbIconsInTree = iNbIcons;
52
123
pTree->iNbBranches = (int) ceil (1.*iNbIcons/3.);
58
129
cd_message (" -> %d icones, %d branches, proportions : %.2fx%.2f", pTree->iNbIconsInTree, pTree->iNbBranches, pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
64
void rendering_load_tree_data (CairoDesklet *pDesklet, cairo_t *pSourceContext)
66
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
70
double fImageWidth = TREE_WIDTH * pTree->fTreeWidthFactor, fImageHeight = TREE_HEIGHT * pTree->fTreeHeightFactor;
71
gchar *cImageFilePath = g_strconcat (MY_APPLET_SHARE_DATA_DIR, "/branche1.svg", NULL);
73
pTree->pBrancheSurface[0] = cairo_dock_create_surface_from_image_simple (cImageFilePath,
78
cImageFilePath[strlen(cImageFilePath)-5] = '2';
79
pTree->pBrancheSurface[0] = cairo_dock_create_surface_from_image_simple (cImageFilePath,
83
/**pTree->pBrancheSurface[0] = cairo_dock_load_image (pSourceContext,
90
cImageFilePath[strlen(cImageFilePath)-5] = '2';
91
pTree->pBrancheSurface[1] = cairo_dock_load_image (pSourceContext,
98
g_free (cImageFilePath);
102
void rendering_free_tree_data (CairoDesklet *pDesklet)
105
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
109
cairo_surface_destroy (pTree->pBrancheSurface[0]);
110
cairo_surface_destroy (pTree->pBrancheSurface[1]);
113
pDesklet->pRendererData = NULL;
117
void rendering_load_icons_for_tree (CairoDesklet *pDesklet, cairo_t *pSourceContext)
119
g_return_if_fail (pDesklet != NULL && pSourceContext != NULL);
120
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
126
for (ic = pDesklet->icons; ic != NULL; ic = ic->next)
131
// on calcule les tailles de chaque icone.
132
for (ic = pIconsList; ic != NULL; ic = ic->next)
129
icon->fWidth = 48 * MIN (pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
130
icon->fHeight = 48 * MIN (pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
132
cairo_dock_fill_icon_buffers_for_desklet (icon, pSourceContext);
135
if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
142
pIcon->fWidth = 48 * MIN (pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
143
pIcon->fHeight = 48 * MIN (pTree->fTreeWidthFactor, pTree->fTreeHeightFactor);
138
void rendering_draw_tree_in_desklet (cairo_t *pCairoContext, CairoDesklet *pDesklet)
149
static void render (cairo_t *pCairoContext, CairoDesklet *pDesklet)
140
151
CDTreeParameters *pTree = (CDTreeParameters *) pDesklet->pRendererData;
163
174
for (ic = pDesklet->icons; ic != NULL; ic = ic->next)
165
176
pIcon = ic->data;
166
if (! CAIRO_DOCK_IS_SEPARATOR (pIcon))
177
if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (pIcon))
180
x = s_iLeafPosition[iBrancheType][3*iLeafNumber];
181
y = s_iLeafPosition[iBrancheType][3*iLeafNumber+1];
182
sens = s_iLeafPosition[iBrancheType][3*iLeafNumber+2];
184
pIcon->fDrawX = w / 2 + x * pTree->fTreeWidthFactor - pIcon->fWidth / 2;
185
pIcon->fDrawY = h - (iBrancheNumber * TREE_HEIGHT + y) * pTree->fTreeHeightFactor - sens * pIcon->fHeight;
188
pIcon->fWidthFactor = 1;
189
pIcon->fHeightFactor = 1;
191
cairo_save (pCairoContext);
192
cairo_dock_render_one_icon_in_desklet (pIcon, pCairoContext, FALSE, TRUE, pDesklet->container.iWidth);
193
cairo_restore (pCairoContext);
196
if (iLeafNumber == 3)
168
x = s_iLeafPosition[iBrancheType][3*iLeafNumber];
169
y = s_iLeafPosition[iBrancheType][3*iLeafNumber+1];
170
sens = s_iLeafPosition[iBrancheType][3*iLeafNumber+2];
172
pIcon->fDrawX = w / 2 + x * pTree->fTreeWidthFactor - pIcon->fWidth / 2;
173
pIcon->fDrawY = h - (iBrancheNumber * TREE_HEIGHT + y) * pTree->fTreeHeightFactor - sens * pIcon->fHeight;
176
pIcon->fWidthFactor = 1;
177
pIcon->fHeightFactor = 1;
179
cairo_save (pCairoContext);
180
cairo_dock_render_one_icon_in_desklet (pIcon, pCairoContext, FALSE, TRUE, pDesklet->container.iWidth);
181
cairo_restore (pCairoContext);
184
if (iLeafNumber == 3)
188
iBrancheType = iBrancheNumber % 2;
200
iBrancheType = iBrancheNumber % 2;
195
206
void rendering_register_tree_desklet_renderer (void)
197
208
CairoDeskletRenderer *pRenderer = g_new0 (CairoDeskletRenderer, 1);
198
pRenderer->render = rendering_draw_tree_in_desklet ;
199
pRenderer->configure = rendering_configure_tree;
200
pRenderer->load_data = rendering_load_tree_data;
201
pRenderer->free_data = rendering_free_tree_data;
202
pRenderer->load_icons = rendering_load_icons_for_tree;
209
pRenderer->render = render ;
210
pRenderer->configure = (CairoDeskletConfigureRendererFunc)configure;
211
pRenderer->load_data = load_data;
212
pRenderer->free_data = free_data;
213
pRenderer->calculate_icons = calculate_icons;
204
215
cairo_dock_register_desklet_renderer (MY_APPLET_TREE_DESKLET_RENDERER_NAME, pRenderer);