Mercurial > pidgin
comparison console/libgnt/gntwidget.c @ 13927:9309d27d780c
[gaim-migrate @ 16447]
Pseudo-shadow effect for the windows and buttons. Uses non-ASCII
emblems for buddies in the buddy-list if locale is set to UTF.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 06 Jul 2006 17:54:46 +0000 |
parents | fdf2dbed6faa |
children | 3dbcbc5e57e1 |
comparison
equal
deleted
inserted
replaced
13926:756c3d7177d9 | 13927:9309d27d780c |
---|---|
261 gnt_screen_occupy(widget); | 261 gnt_screen_occupy(widget); |
262 } | 262 } |
263 | 263 |
264 if (widget->window == NULL) | 264 if (widget->window == NULL) |
265 { | 265 { |
266 /* XXX: It may be necessary to make sure the size hasn't changed */ | 266 gboolean shadow = TRUE; |
267 widget->window = newwin(widget->priv.height, widget->priv.width, | 267 |
268 if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) | |
269 shadow = FALSE; | |
270 | |
271 widget->window = newwin(widget->priv.height + shadow, widget->priv.width + shadow, | |
268 widget->priv.y, widget->priv.x); | 272 widget->priv.y, widget->priv.x); |
269 wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL)); | 273 wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL)); |
270 | 274 |
271 if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_BORDER)) | 275 if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_BORDER)) |
272 box(widget->window, 0, 0); | 276 { |
277 WINDOW *tmp = derwin(widget->window, widget->priv.height, widget->priv.width, 0, 0); | |
278 box(tmp, 0, 0); | |
279 delwin(tmp); | |
280 } | |
273 else | 281 else |
274 werase(widget->window); | 282 werase(widget->window); |
275 } | 283 |
276 | 284 if (shadow) |
277 #if 0 | 285 { |
278 /* XXX: No shadow for now :( */ | 286 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_SHADOW)); |
279 if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_SHADOW)) | 287 mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height); |
280 { | 288 mvwhline(widget->window, widget->priv.height, 1, ' ', widget->priv.width); |
281 widget->back = newwin(widget->priv.height, widget->priv.width, | 289 } |
282 widget->priv.y + 1, widget->priv.x + 1); | 290 } |
283 wbkgd(widget->back, COLOR_PAIR(GNT_COLOR_SHADOW)); | 291 |
284 werase(widget->back); | |
285 | |
286 mvwchgat(widget->back, 0, 0, widget->priv.height, | |
287 A_REVERSE | A_BLINK, 0, 0); | |
288 touchline(widget->back, 0, widget->priv.height); | |
289 wrefresh(widget->back); | |
290 } | |
291 | |
292 wrefresh(widget->window); | |
293 #endif | |
294 g_signal_emit(widget, signals[SIG_DRAW], 0); | 292 g_signal_emit(widget, signals[SIG_DRAW], 0); |
295 gnt_widget_queue_update(widget); | 293 gnt_widget_queue_update(widget); |
296 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_DRAWING); | 294 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_DRAWING); |
297 } | 295 } |
298 | 296 |
314 | 312 |
315 void | 313 void |
316 gnt_widget_hide(GntWidget *widget) | 314 gnt_widget_hide(GntWidget *widget) |
317 { | 315 { |
318 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); | 316 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); |
317 #if 1 | |
318 /* XXX: I have no clue why, but this seems to be necessary. */ | |
319 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) | |
320 mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height); | |
321 #endif | |
319 gnt_screen_release(widget); | 322 gnt_screen_release(widget); |
320 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_MAPPED); | 323 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_MAPPED); |
321 } | 324 } |
322 | 325 |
323 void | 326 void |
325 { | 328 { |
326 /* XXX: Need to install properties for these and g_object_notify */ | 329 /* XXX: Need to install properties for these and g_object_notify */ |
327 wid->priv.x = x; | 330 wid->priv.x = x; |
328 wid->priv.y = y; | 331 wid->priv.y = y; |
329 | 332 |
330 /* XXX: I am supposed to move_panel ... but that seems to crash */ | |
331 if (wid->window) | |
332 mvwin(wid->window, y, x); | |
333 | |
334 g_signal_emit(wid, signals[SIG_POSITION], 0, x, y); | 333 g_signal_emit(wid, signals[SIG_POSITION], 0, x, y); |
335 } | 334 } |
336 | 335 |
337 void | 336 void |
338 gnt_widget_get_position(GntWidget *wid, int *x, int *y) | 337 gnt_widget_get_position(GntWidget *wid, int *x, int *y) |
350 } | 349 } |
351 | 350 |
352 void | 351 void |
353 gnt_widget_get_size(GntWidget *wid, int *width, int *height) | 352 gnt_widget_get_size(GntWidget *wid, int *width, int *height) |
354 { | 353 { |
354 gboolean shadow = TRUE; | |
355 if (GNT_WIDGET_IS_FLAG_SET(wid, GNT_WIDGET_NO_SHADOW)) | |
356 shadow = FALSE; | |
357 | |
355 if (width) | 358 if (width) |
356 *width = wid->priv.width; | 359 *width = wid->priv.width + shadow; |
357 if (height) | 360 if (height) |
358 *height = wid->priv.height; | 361 *height = wid->priv.height + shadow; |
362 | |
359 } | 363 } |
360 | 364 |
361 void | 365 void |
362 gnt_widget_set_size(GntWidget *widget, int width, int height) | 366 gnt_widget_set_size(GntWidget *widget, int width, int height) |
363 { | 367 { |