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 {