Mercurial > pidgin.yaz
annotate src/gtkcellrendererprogress.c @ 7863:6ee2fe9bb74e
[gaim-migrate @ 8517]
"Patch 2: ssl-plugins.patch
Other plugins might need to use the NSS/GNUTLS libraries,
which shouldn't be initialized multiple times in the same
thread (at least NSS says this is a bad thing to do).
This patch
enables other plugins to load either the NSS or
GNUTLS plugin,
and
a) have them init on load, rather when sslconn inits them
b) have them not stomp on each other if the other one has
already loaded." --Bill Tompkins (obobo)
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Sun, 14 Dec 2003 16:46:28 +0000 |
parents | b14442b31a9b |
children | fa6395637e2c |
rev | line source |
---|---|
3832 | 1 /* gtkcellrendererprogress.c |
2 * Copyright (C) 2002, Sean Egan <bj91704@binghamton.edu> | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * This program is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License | |
15 * along with this program; if not, write to the Free Software | |
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
17 * | |
18 */ | |
19 | |
20 /* This is taken largely from GtkCellRenderer[Text|Pixbuf|Toggle] by | |
21 * Jonathon Blandford <jrb@redhat.com> for RedHat, Inc. | |
22 */ | |
23 | |
24 #include "gtkcellrendererprogress.h" | |
25 | |
26 static void gtk_cell_renderer_progress_get_property (GObject *object, | |
27 guint param_id, | |
28 GValue *value, | |
29 GParamSpec *pspec); | |
30 static void gtk_cell_renderer_progress_set_property (GObject *object, | |
31 guint param_id, | |
32 const GValue *value, | |
33 GParamSpec *pspec); | |
34 static void gtk_cell_renderer_progress_init (GtkCellRendererProgress *cellprogress); | |
35 static void gtk_cell_renderer_progress_class_init (GtkCellRendererProgressClass *class); | |
36 static void gtk_cell_renderer_progress_get_size (GtkCellRenderer *cell, | |
37 GtkWidget *widget, | |
38 GdkRectangle *cell_area, | |
39 gint *x_offset, | |
40 gint *y_offset, | |
41 gint *width, | |
42 gint *height); | |
43 static void gtk_cell_renderer_progress_render (GtkCellRenderer *cell, | |
44 GdkWindow *window, | |
45 GtkWidget *widget, | |
46 GdkRectangle *background_area, | |
47 GdkRectangle *cell_area, | |
48 GdkRectangle *expose_area, | |
49 guint flags); | |
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
3832
diff
changeset
|
50 #if 0 |
3832 | 51 static gboolean gtk_cell_renderer_progress_activate (GtkCellRenderer *cell, |
52 GdkEvent *event, | |
53 GtkWidget *widget, | |
54 const gchar *path, | |
55 GdkRectangle *background_area, | |
56 GdkRectangle *cell_area, | |
57 guint flags); | |
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
3832
diff
changeset
|
58 #endif |
3832 | 59 static void gtk_cell_renderer_progress_finalize (GObject *gobject); |
60 | |
61 enum { | |
62 LAST_SIGNAL | |
63 }; | |
64 | |
65 enum { | |
66 PROP_0, | |
67 | |
68 PROP_PERCENTAGE, | |
69 PROP_TEXT, | |
70 PROP_SHOW_TEXT | |
71 }; | |
72 | |
73 static gpointer parent_class; | |
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
3832
diff
changeset
|
74 /* static guint progress_cell_renderer_signals [LAST_SIGNAL]; */ |
3832 | 75 |
76 GType gtk_cell_renderer_progress_get_type (void) | |
77 { | |
78 static GType cell_progress_type = 0; | |
79 | |
80 if (!cell_progress_type) | |
81 { | |
82 static const GTypeInfo cell_progress_info = | |
83 { | |
84 sizeof (GtkCellRendererProgressClass), | |
85 NULL, /* base_init */ | |
86 NULL, /* base_finalize */ | |
87 (GClassInitFunc) gtk_cell_renderer_progress_class_init, | |
88 NULL, /* class_finalize */ | |
89 NULL, /* class_data */ | |
90 sizeof (GtkCellRendererProgress), | |
91 0, /* n_preallocs */ | |
92 (GInstanceInitFunc) gtk_cell_renderer_progress_init, | |
93 }; | |
94 | |
95 cell_progress_type = | |
96 g_type_register_static (GTK_TYPE_CELL_RENDERER, "GtkCellRendererProgress", | |
97 &cell_progress_info, 0); | |
98 } | |
99 | |
100 return cell_progress_type; | |
101 } | |
102 | |
103 | |
104 static void gtk_cell_renderer_progress_init (GtkCellRendererProgress *cellprogress) | |
105 { | |
106 GTK_CELL_RENDERER(cellprogress)->mode = GTK_CELL_RENDERER_MODE_INERT; | |
107 GTK_CELL_RENDERER(cellprogress)->xpad = 2; | |
108 GTK_CELL_RENDERER(cellprogress)->ypad = 2; | |
109 } | |
110 | |
111 static void gtk_cell_renderer_progress_class_init (GtkCellRendererProgressClass *class) | |
112 { | |
113 GObjectClass *object_class = G_OBJECT_CLASS(class); | |
114 GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(class); | |
115 | |
116 parent_class = g_type_class_peek_parent (class); | |
117 object_class->finalize = gtk_cell_renderer_progress_finalize; | |
118 | |
119 object_class->get_property = gtk_cell_renderer_progress_get_property; | |
120 object_class->set_property = gtk_cell_renderer_progress_set_property; | |
121 | |
122 cell_class->get_size = gtk_cell_renderer_progress_get_size; | |
123 cell_class->render = gtk_cell_renderer_progress_render; | |
124 | |
125 g_object_class_install_property (object_class, | |
126 PROP_PERCENTAGE, | |
127 g_param_spec_double ("percentage", | |
128 "Percentage", | |
129 "The fractional progress to display", | |
130 0, 1, 0, | |
131 G_PARAM_READWRITE)); | |
132 | |
133 g_object_class_install_property (object_class, | |
134 PROP_TEXT, | |
135 g_param_spec_string ("text", | |
136 "Text", | |
137 "Text to overlay over progress bar", | |
138 NULL, | |
139 G_PARAM_READWRITE)); | |
140 g_object_class_install_property(object_class, | |
141 PROP_SHOW_TEXT, | |
142 g_param_spec_string("text_set", | |
143 "Text set", | |
144 "Whether to overlay text on the progress bar", | |
145 FALSE, | |
146 G_PARAM_READABLE | G_PARAM_WRITABLE)); | |
147 } | |
148 | |
149 | |
150 | |
151 static void gtk_cell_renderer_progress_finalize (GObject *object) | |
152 { | |
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
3832
diff
changeset
|
153 /* |
3832 | 154 GtkCellRendererProgress *cellprogress = GTK_CELL_RENDERER_PROGRESS(object); |
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
3832
diff
changeset
|
155 */ |
3832 | 156 |
157 (* G_OBJECT_CLASS (parent_class)->finalize) (object); | |
158 } | |
159 | |
160 static void gtk_cell_renderer_progress_get_property (GObject *object, | |
161 guint param_id, | |
162 GValue *value, | |
163 GParamSpec *psec) | |
164 { | |
165 GtkCellRendererProgress *cellprogress = GTK_CELL_RENDERER_PROGRESS(object); | |
166 | |
167 switch (param_id) | |
168 { | |
169 case PROP_PERCENTAGE: | |
170 g_value_set_double(value, cellprogress->progress); | |
171 break; | |
172 case PROP_TEXT: | |
173 g_value_set_string(value, cellprogress->text); | |
174 break; | |
175 case PROP_SHOW_TEXT: | |
176 g_value_set_boolean(value, cellprogress->text_set); | |
177 break; | |
178 default: | |
179 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, psec); | |
180 break; | |
181 } | |
182 } | |
183 | |
184 static void gtk_cell_renderer_progress_set_property (GObject *object, | |
185 guint param_id, | |
186 const GValue *value, | |
187 GParamSpec *pspec) | |
188 { | |
189 GtkCellRendererProgress *cellprogress = GTK_CELL_RENDERER_PROGRESS (object); | |
190 | |
191 switch (param_id) | |
192 { | |
193 case PROP_PERCENTAGE: | |
194 cellprogress->progress = g_value_get_double(value); | |
195 break; | |
196 case PROP_TEXT: | |
197 if (cellprogress->text) | |
198 g_free(cellprogress->text); | |
199 cellprogress->text = g_strdup(g_value_get_string(value)); | |
200 g_object_notify(object, "text"); | |
201 break; | |
202 case PROP_SHOW_TEXT: | |
203 cellprogress->text_set = g_value_get_boolean(value); | |
204 break; | |
205 default: | |
206 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); | |
207 break; | |
208 } | |
209 } | |
210 | |
211 GtkCellRenderer *gtk_cell_renderer_progress_new(void) | |
212 { | |
213 return g_object_new(GTK_TYPE_CELL_RENDERER_PROGRESS, NULL); | |
214 } | |
215 | |
216 static void gtk_cell_renderer_progress_get_size (GtkCellRenderer *cell, | |
217 GtkWidget *widget, | |
218 GdkRectangle *cell_area, | |
219 gint *x_offset, | |
220 gint *y_offset, | |
221 gint *width, | |
222 gint *height) | |
223 { | |
224 gint calc_width; | |
225 gint calc_height; | |
226 | |
227 calc_width = (gint) cell->xpad * 2 + 50; | |
7705 | 228 calc_height = (gint) cell->ypad * 2 + 12; |
3832 | 229 |
230 if (width) | |
231 *width = calc_width; | |
232 | |
233 if (height) | |
234 *height = calc_height; | |
235 | |
236 if (cell_area) | |
237 { | |
238 if (x_offset) | |
239 { | |
240 *x_offset = cell->xalign * (cell_area->width - calc_width); | |
241 *x_offset = MAX (*x_offset, 0); | |
242 } | |
243 if (y_offset) | |
244 { | |
245 *y_offset = cell->yalign * (cell_area->height - calc_height); | |
246 *y_offset = MAX (*y_offset, 0); | |
247 } | |
248 } | |
249 } | |
250 | |
251 | |
252 static void gtk_cell_renderer_progress_render (GtkCellRenderer *cell, | |
253 GdkWindow *window, | |
254 GtkWidget *widget, | |
255 GdkRectangle *background_area, | |
256 GdkRectangle *cell_area, | |
257 GdkRectangle *expose_area, | |
258 guint flags) | |
259 { | |
260 GtkCellRendererProgress *cellprogress = (GtkCellRendererProgress *) cell; | |
261 | |
262 gint width, height; | |
263 GtkStateType state; | |
264 | |
7738 | 265 width = cell_area->width; |
266 height = cell_area->height; | |
3832 | 267 |
268 if (GTK_WIDGET_HAS_FOCUS (widget)) | |
269 state = GTK_STATE_ACTIVE; | |
270 else | |
271 state = GTK_STATE_NORMAL; | |
272 | |
273 | |
274 | |
275 width -= cell->xpad*2; | |
276 height -= cell->ypad*2; | |
277 | |
278 gtk_paint_box (widget->style, | |
279 window, | |
280 GTK_STATE_NORMAL, GTK_SHADOW_IN, | |
281 NULL, widget, "trough", | |
7738 | 282 cell_area->x + cell->xpad, |
283 cell_area->y + cell->ypad, | |
3832 | 284 width - 1, height - 1); |
285 gtk_paint_box (widget->style, | |
286 window, | |
287 state, GTK_SHADOW_OUT, | |
288 NULL, widget, "bar", | |
7738 | 289 cell_area->x + cell->xpad + 1, |
290 cell_area->y + cell->ypad + 1, | |
7705 | 291 (width - 3) * cellprogress->progress, |
292 height - 3); | |
3832 | 293 } |