comparison finch/libgnt/gntprogressbar.c @ 26639:a372ea58c3ae

Change how the progressbar is drawn. Don't highlight the progress-bar ... because it looks weird when the window is not in focus.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sun, 12 Apr 2009 20:55:49 +0000
parents cd7fa6306f85
children 09ad3b69711f
comparison
equal deleted inserted replaced
26638:cd7fa6306f85 26639:a372ea58c3ae
53 gnt_progress_bar_draw (GntWidget *widget) 53 gnt_progress_bar_draw (GntWidget *widget)
54 { 54 {
55 GntProgressBarPrivate *priv = GNT_PROGRESS_BAR_GET_PRIVATE (GNT_PROGRESS_BAR (widget)); 55 GntProgressBarPrivate *priv = GNT_PROGRESS_BAR_GET_PRIVATE (GNT_PROGRESS_BAR (widget));
56 gchar progress[8]; 56 gchar progress[8];
57 gint start, end, i, pos; 57 gint start, end, i, pos;
58 int color;
58 59
59 g_snprintf (progress, sizeof (progress), "%.1f%%", priv->fraction * 100); 60 g_snprintf (progress, sizeof (progress), "%.1f%%", priv->fraction * 100);
61 color = gnt_color_pair(GNT_COLOR_NORMAL);
60 62
61 switch (priv->orientation) { 63 switch (priv->orientation) {
62 case GNT_PROGRESS_LEFT_TO_RIGHT: 64 case GNT_PROGRESS_LEFT_TO_RIGHT:
63 case GNT_PROGRESS_RIGHT_TO_LEFT: 65 case GNT_PROGRESS_RIGHT_TO_LEFT:
64 start = (priv->orientation == GNT_PROGRESS_LEFT_TO_RIGHT ? 0 : (1.0 - priv->fraction) * widget->priv.width); 66 start = (priv->orientation == GNT_PROGRESS_LEFT_TO_RIGHT ? 0 : (1.0 - priv->fraction) * widget->priv.width);
65 end = (priv->orientation == GNT_PROGRESS_LEFT_TO_RIGHT ? widget->priv.width * priv->fraction : widget->priv.width); 67 end = (priv->orientation == GNT_PROGRESS_LEFT_TO_RIGHT ? widget->priv.width * priv->fraction : widget->priv.width);
66 68
67 /* background */ 69 /* background */
68 for (i = 0; i < widget->priv.height; i++) 70 for (i = 0; i < widget->priv.height; i++)
69 mvwhline (widget->window, i, 0, ' ' | gnt_color_pair (GNT_COLOR_HIGHLIGHT) | A_REVERSE, widget->priv.width); 71 mvwhline (widget->window, i, 0, ' ' | color, widget->priv.width);
70 72
71 /* foreground */ 73 /* foreground */
72 for (i = 0; i < widget->priv.height; i++) 74 for (i = 0; i < widget->priv.height; i++)
73 mvwhline (widget->window, i, start, ' ' | gnt_color_pair (GNT_COLOR_HIGHLIGHT), end); 75 mvwhline (widget->window, i, start, ACS_CKBOARD | color | A_REVERSE, end);
74 76
75 /* text */ 77 /* text */
76 if (priv->show_value) { 78 if (priv->show_value) {
77 for (i = 0; i < strlen(progress); i++) { 79 pos = widget->priv.width / 2 - strlen (progress) / 2;
78 pos = widget->priv.width / 2 - strlen (progress) / 2 + i; 80 for (i = 0; i < progress[i]; i++, pos++) {
79 wattrset (widget->window, gnt_color_pair (GNT_COLOR_HIGHLIGHT) | ((pos >= start && pos <= end) ? A_NORMAL : A_REVERSE)); 81 wattrset (widget->window, color | ((pos < start || pos > end) ? A_NORMAL : A_REVERSE));
80 mvwprintw (widget->window, widget->priv.height / 2, pos, "%c", progress[i]); 82 mvwprintw (widget->window, widget->priv.height / 2, pos, "%c", progress[i]);
81 } 83 }
82 wattrset (widget->window, gnt_color_pair (GNT_COLOR_HIGHLIGHT)); 84 wattrset (widget->window, color);
83 } 85 }
84 86
85 break; 87 break;
86 case GNT_PROGRESS_TOP_TO_BOTTOM: 88 case GNT_PROGRESS_TOP_TO_BOTTOM:
87 case GNT_PROGRESS_BOTTOM_TO_TOP: 89 case GNT_PROGRESS_BOTTOM_TO_TOP:
88 start = (priv->orientation == GNT_PROGRESS_TOP_TO_BOTTOM ? 0 : (1.0 - priv->fraction) * widget->priv.height); 90 start = (priv->orientation == GNT_PROGRESS_TOP_TO_BOTTOM ? 0 : (1.0 - priv->fraction) * widget->priv.height);
89 end = (priv->orientation == GNT_PROGRESS_TOP_TO_BOTTOM ? widget->priv.height * priv->fraction : widget->priv.height); 91 end = (priv->orientation == GNT_PROGRESS_TOP_TO_BOTTOM ? widget->priv.height * priv->fraction : widget->priv.height);
90 92
91 /* background */ 93 /* background */
92 for (i = 0; i < widget->priv.width; i++) 94 for (i = 0; i < widget->priv.width; i++)
93 mvwvline (widget->window, 0, i, ' ' | gnt_color_pair (GNT_COLOR_HIGHLIGHT) | A_REVERSE, widget->priv.height); 95 mvwvline (widget->window, 0, i, ' ' | color | A_REVERSE, widget->priv.height);
94 96
95 /* foreground */ 97 /* foreground */
96 for (i = 0; i < widget->priv.width; i++) 98 for (i = 0; i < widget->priv.width; i++)
97 mvwvline (widget->window, start, i, ' ' | gnt_color_pair (GNT_COLOR_HIGHLIGHT), end); 99 mvwvline (widget->window, start, i, ' ' | color, end);
98 100
99 /* text */ 101 /* text */
100 if (priv->show_value) { 102 if (priv->show_value) {
101 for (i = 0; i < strlen(progress); i++) { 103 pos = widget->priv.height / 2 - strlen (progress) / 2;
102 pos = widget->priv.height / 2 - strlen (progress) / 2 + i; 104 for (i = 0; i < progress[i]; i++, pos++) {
103 wattrset (widget->window, gnt_color_pair (GNT_COLOR_HIGHLIGHT) | ((pos >= start && pos <= end) ? A_NORMAL : A_REVERSE)); 105 wattrset (widget->window, color | ((pos >= start && pos <= end) ? A_NORMAL : A_REVERSE));
104 mvwprintw (widget->window, pos, widget->priv.width / 2, "%c\n", progress[i]); 106 mvwprintw (widget->window, pos, widget->priv.width / 2, "%c\n", progress[i]);
105 } 107 }
106 wattrset (widget->window, gnt_color_pair (GNT_COLOR_HIGHLIGHT)); 108 wattrset (widget->window, color);
107 } 109 }
108 110
109 break; 111 break;
110 default: 112 default:
111 g_assert_not_reached (); 113 g_assert_not_reached ();