Mercurial > pidgin
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 |