Mercurial > pidgin
diff 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 |
line wrap: on
line diff
--- a/console/libgnt/gntwidget.c Thu Jul 06 09:21:57 2006 +0000 +++ b/console/libgnt/gntwidget.c Thu Jul 06 17:54:46 2006 +0000 @@ -263,34 +263,32 @@ if (widget->window == NULL) { - /* XXX: It may be necessary to make sure the size hasn't changed */ - widget->window = newwin(widget->priv.height, widget->priv.width, + gboolean shadow = TRUE; + + if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) + shadow = FALSE; + + widget->window = newwin(widget->priv.height + shadow, widget->priv.width + shadow, widget->priv.y, widget->priv.x); wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL)); if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_BORDER)) - box(widget->window, 0, 0); + { + WINDOW *tmp = derwin(widget->window, widget->priv.height, widget->priv.width, 0, 0); + box(tmp, 0, 0); + delwin(tmp); + } else werase(widget->window); + + if (shadow) + { + wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_SHADOW)); + mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height); + mvwhline(widget->window, widget->priv.height, 1, ' ', widget->priv.width); + } } -#if 0 - /* XXX: No shadow for now :( */ - if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_SHADOW)) - { - widget->back = newwin(widget->priv.height, widget->priv.width, - widget->priv.y + 1, widget->priv.x + 1); - wbkgd(widget->back, COLOR_PAIR(GNT_COLOR_SHADOW)); - werase(widget->back); - - mvwchgat(widget->back, 0, 0, widget->priv.height, - A_REVERSE | A_BLINK, 0, 0); - touchline(widget->back, 0, widget->priv.height); - wrefresh(widget->back); - } - - wrefresh(widget->window); -#endif g_signal_emit(widget, signals[SIG_DRAW], 0); gnt_widget_queue_update(widget); GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_DRAWING); @@ -316,6 +314,11 @@ gnt_widget_hide(GntWidget *widget) { wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); +#if 1 + /* XXX: I have no clue why, but this seems to be necessary. */ + if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) + mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height); +#endif gnt_screen_release(widget); GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_MAPPED); } @@ -327,10 +330,6 @@ wid->priv.x = x; wid->priv.y = y; - /* XXX: I am supposed to move_panel ... but that seems to crash */ - if (wid->window) - mvwin(wid->window, y, x); - g_signal_emit(wid, signals[SIG_POSITION], 0, x, y); } @@ -352,10 +351,15 @@ void gnt_widget_get_size(GntWidget *wid, int *width, int *height) { + gboolean shadow = TRUE; + if (GNT_WIDGET_IS_FLAG_SET(wid, GNT_WIDGET_NO_SHADOW)) + shadow = FALSE; + if (width) - *width = wid->priv.width; + *width = wid->priv.width + shadow; if (height) - *height = wid->priv.height; + *height = wid->priv.height + shadow; + } void