comparison console/libgnt/gntwidget.c @ 14010:7573bd40a190

[gaim-migrate @ 16602] Allow plugins to be loaded and unloaded. Remember the window positions and sizes. All turning on/off shadow from ~/.gntrc (off by default). committer: Tailor Script <tailor@pidgin.im>
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Mon, 31 Jul 2006 23:19:12 +0000
parents c9509bd42d7a
children 735c4e927eb8
comparison
equal deleted inserted replaced
14009:1e283c3566ab 14010:7573bd40a190
1 /* Stuff brutally ripped from Gflib */ 1 /* Stuff brutally ripped from Gflib */
2 2
3 #include "gntwidget.h" 3 #include "gntwidget.h"
4 #include "gntstyle.h"
4 #include "gntmarshal.h" 5 #include "gntmarshal.h"
5 #include "gnt.h" 6 #include "gnt.h"
6 7
7 enum 8 enum
8 { 9 {
288 289
289 if (widget->window == NULL) 290 if (widget->window == NULL)
290 { 291 {
291 gboolean shadow = TRUE; 292 gboolean shadow = TRUE;
292 293
293 if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) 294 if (!gnt_widget_has_shadow(widget))
294 shadow = FALSE; 295 shadow = FALSE;
295 296
296 widget->window = newwin(widget->priv.height + shadow, widget->priv.width + shadow, 297 widget->window = newwin(widget->priv.height + shadow, widget->priv.width + shadow,
297 widget->priv.y, widget->priv.x); 298 widget->priv.y, widget->priv.x);
298 init_widget(widget); 299 init_widget(widget);
323 gnt_widget_hide(GntWidget *widget) 324 gnt_widget_hide(GntWidget *widget)
324 { 325 {
325 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL)); 326 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_NORMAL));
326 #if 1 327 #if 1
327 /* XXX: I have no clue why, but this seems to be necessary. */ 328 /* XXX: I have no clue why, but this seems to be necessary. */
328 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) 329 if (gnt_widget_has_shadow(widget))
329 mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height); 330 mvwvline(widget->window, 1, widget->priv.width, ' ', widget->priv.height);
330 #endif 331 #endif
331 gnt_screen_release(widget); 332 gnt_screen_release(widget);
332 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_INVISIBLE); 333 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_INVISIBLE);
333 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_MAPPED); 334 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_MAPPED);
359 360
360 void 361 void
361 gnt_widget_get_size(GntWidget *wid, int *width, int *height) 362 gnt_widget_get_size(GntWidget *wid, int *width, int *height)
362 { 363 {
363 gboolean shadow = TRUE; 364 gboolean shadow = TRUE;
364 if (GNT_WIDGET_IS_FLAG_SET(wid, GNT_WIDGET_NO_SHADOW)) 365 if (!gnt_widget_has_shadow(wid))
365 shadow = FALSE; 366 shadow = FALSE;
366 367
367 if (width) 368 if (width)
368 *width = wid->priv.width + shadow; 369 *width = wid->priv.width + shadow;
369 if (height) 370 if (height)
374 static void 375 static void
375 init_widget(GntWidget *widget) 376 init_widget(GntWidget *widget)
376 { 377 {
377 gboolean shadow = TRUE; 378 gboolean shadow = TRUE;
378 379
379 if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) 380 if (!gnt_widget_has_shadow(widget))
380 shadow = FALSE; 381 shadow = FALSE;
381 382
382 wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL)); 383 wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL));
383 werase(widget->window); 384 werase(widget->window);
384 385
385 if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_BORDER)) 386 if (!(GNT_WIDGET_FLAGS(widget) & GNT_WIDGET_NO_BORDER))
386 { 387 {
387 WINDOW *tmp = derwin(widget->window, widget->priv.height, widget->priv.width, 0, 0); 388 /* - This is ugly. */
388 box(tmp, 0, 0); 389 /* - What's your point? */
389 delwin(tmp); 390 mvwvline(widget->window, 0, 0, ACS_VLINE, widget->priv.height);
391 mvwvline(widget->window, 0, widget->priv.width - 1, ACS_VLINE, widget->priv.height);
392 mvwhline(widget->window, widget->priv.height - 1, 0, ACS_HLINE, widget->priv.width);
393 mvwhline(widget->window, 0, 0, ACS_HLINE, widget->priv.width);
394 mvwaddch(widget->window, 0, 0, ACS_ULCORNER);
395 mvwaddch(widget->window, 0, widget->priv.width - 1, ACS_URCORNER);
396 mvwaddch(widget->window, widget->priv.height - 1, 0, ACS_LLCORNER);
397 mvwaddch(widget->window, widget->priv.height - 1, widget->priv.width - 1, ACS_LRCORNER);
390 } 398 }
391 399
392 if (shadow) 400 if (shadow)
393 { 401 {
394 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_SHADOW)); 402 wbkgdset(widget->window, '\0' | COLOR_PAIR(GNT_COLOR_SHADOW));
400 gboolean 408 gboolean
401 gnt_widget_set_size(GntWidget *widget, int width, int height) 409 gnt_widget_set_size(GntWidget *widget, int width, int height)
402 { 410 {
403 gboolean ret = TRUE; 411 gboolean ret = TRUE;
404 412
405 if (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) 413 if (gnt_widget_has_shadow(widget))
406 { 414 {
407 width--; 415 width--;
408 height--; 416 height--;
409 } 417 }
410 418
416 if (ret) 424 if (ret)
417 { 425 {
418 gboolean shadow = TRUE; 426 gboolean shadow = TRUE;
419 int oldw, oldh; 427 int oldw, oldh;
420 428
421 if (GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW)) 429 if (!gnt_widget_has_shadow(widget))
422 shadow = FALSE; 430 shadow = FALSE;
423 431
424 oldw = widget->priv.width; 432 oldw = widget->priv.width;
425 oldh = widget->priv.height; 433 oldh = widget->priv.height;
426 434
516 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_INVISIBLE); 524 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_INVISIBLE);
517 else 525 else
518 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_INVISIBLE); 526 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_INVISIBLE);
519 } 527 }
520 528
529 gboolean gnt_widget_has_shadow(GntWidget *widget)
530 {
531 return (!GNT_WIDGET_IS_FLAG_SET(widget, GNT_WIDGET_NO_SHADOW) &&
532 gnt_style_get_bool(GNT_STYLE_SHADOW, FALSE));
533 }
534