16
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19
* $Id: infobar.c,v 1.10 2003/03/24 00:13:55 guenter Exp $
19
* $Id: infobar.c,v 1.18 2004/12/03 22:01:22 dsalt Exp $
21
21
* a nice black information display area
29
27
#include <stdlib.h>
30
28
#include <string.h>
32
32
#include "infobar.h"
39
PangoFontDescription *pfd;
43
PangoLayout *pl[NUMLINES];
44
PangoFontDescription *pfd, *pfd_big;
41
46
GdkGC *black_gc, *blue_gc, *white_gc;
48
gchar *line[NUMLINES];
47
static void paint_bar (infobar_t *bar) {
51
static void paint_bar (infobar_t *bar)
49
54
gdk_draw_rectangle (bar->w->window, bar->black_gc, TRUE,
51
bar->w->allocation.width, bar->w->allocation.height);
53
pango_layout_set_text (bar->pl, bar->line1, -1);
55
gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 2, bar->pl);
57
pango_layout_set_text (bar->pl, bar->line2, -1);
58
gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 15, bar->pl);
56
bar->w->allocation.width, bar->w->allocation.height+1);
58
pango_layout_set_text (bar->pl[0], bar->line[0] ? : "", -1);
59
gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 2, bar->pl[0]);
61
for (i = 1; i < NUMLINES; ++i)
63
pango_layout_set_text (bar->pl[i], bar->line[i] ? : "", -1);
64
gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 9 + 14 * i, bar->pl[i]);
61
68
static gboolean expose_event_cb (GtkWidget *widget,
81
void infobar_line1 (infobar_t *bar, const char *format, ...) {
85
va_start (argp, format);
87
vsnprintf (bar->line1, 1024, format, argp);
91
normalize_to_ascii (bar->line1);
88
void infobar_clear (infobar_t *bar)
92
for (i = 0; i < NUMLINES; ++i)
96
void infobar_line2 (infobar_t *bar, const char *format, ...){
100
va_start (argp, format);
102
vsnprintf (bar->line2, 1024, format, argp);
106
normalize_to_ascii (bar->line2);
100
void infobar_line (infobar_t *bar, unsigned int line, const char *format, ...)
102
if (!bar || line >= NUMLINES)
105
free (bar->line[line]);
106
bar->line[line] = NULL;
111
va_start (argp, format);
112
bar->line[line] = g_strdup_vprintf (format, argp);
133
void infobar_show_metadata (void)
142
if ( (t=xine_get_meta_info (stream, XINE_META_INFO_TITLE)) ) {
145
if ( (a=xine_get_meta_info (stream, XINE_META_INFO_ARTIST)) ) {
146
strbuf = g_strdup_printf ("%s (%s) - gxine %s", t, a, VERSION);
147
infobar_line (bar, 0, "%s (%s)", t, a);
149
strbuf = g_strdup_printf ("%s - gxine %s", t, VERSION);
150
infobar_line (bar, 0, "%s", t);
153
if (strlen (player_get_cur_mrl()) > 0) {
155
char *str = strrchr (player_get_cur_mrl(), '/');
158
strbuf = g_strdup_printf ("%s - gxine %s", str+1, VERSION);
159
infobar_line (bar, 0, "%s", str+1);
161
str = player_get_cur_mrl ();
162
strbuf = g_strdup_printf ("%s - gxine %s", str, VERSION);
163
infobar_line (bar, 0, "%s", str);
166
strbuf = g_strdup_printf ("gxine %s", VERSION);
167
infobar_line (bar, 0, "%s", strbuf);
170
gtk_window_set_title (GTK_WINDOW (app), strbuf);
173
* display some metainfo
178
str = xine_get_meta_info (stream, XINE_META_INFO_SYSTEMLAYER);
179
if (str) asreprintf (&strbuf, "%s%s ", strbuf, str);
181
w = xine_get_stream_info (stream, XINE_STREAM_INFO_VIDEO_WIDTH);
182
h = xine_get_stream_info (stream, XINE_STREAM_INFO_VIDEO_HEIGHT);
183
if (w && h) asreprintf (&strbuf, "%s%dx%d ", strbuf, w, h);
185
str = xine_get_meta_info (stream, XINE_META_INFO_VIDEOCODEC);
186
if (str) asreprintf (&strbuf, "%s%s ", strbuf, str);
188
n = xine_get_stream_info (stream, XINE_STREAM_INFO_VIDEO_BITRATE)/1000;
189
if (n > 10 && n < 20000) asreprintf (&strbuf, "%s%d kBit/s ", strbuf, n);
191
infobar_line (bar, 1, strbuf);
195
n = xine_get_stream_info (stream, XINE_STREAM_INFO_AUDIO_SAMPLERATE)/1000;
196
if ((n>0) && (n<256)) asreprintf (&strbuf, "%s%d kHz ", strbuf, n);
198
n = xine_get_stream_info (stream, XINE_STREAM_INFO_AUDIO_BITRATE)/1000;
199
if ((n>0) && (n<1024)) asreprintf (&strbuf, "%s%d kBit/s ", strbuf, n);
201
str = xine_get_meta_info (stream, XINE_META_INFO_AUDIOCODEC);
202
if (str) asreprintf (&strbuf, "%s%s ", strbuf, str);
204
infobar_line (bar, 2, strbuf);
126
210
infobar_t *create_infobar (GtkWidget **w) {
130
215
bar = (infobar_t *) malloc (sizeof (infobar_t));
132
217
bar->w = gtk_drawing_area_new ();
133
gtk_drawing_area_size (GTK_DRAWING_AREA(bar->w), 250, 30);
218
gtk_drawing_area_size (GTK_DRAWING_AREA(bar->w), 300, 12 + NUMLINES * 14);
135
bar->line1 = malloc(1025);
136
bar->line2 = malloc(1025);
220
for (i = 0; i < NUMLINES; ++i)
143
void postinit_infobar (GtkWidget *window, infobar_t *bar) {
228
void postinit_infobar (GtkWidget *window, infobar_t *bar)
145
234
g_signal_connect (bar->w, "expose_event",
146
235
G_CALLBACK (expose_event_cb), bar);
162
251
pango_font_description_set_family (bar->pfd, "Sans");
163
252
pango_font_description_set_weight (bar->pfd, PANGO_WEIGHT_BOLD);
164
253
pango_font_description_set_size (bar->pfd, 8*PANGO_SCALE);
166
bar->pl = gtk_widget_create_pango_layout (bar->w, NULL);
168
pango_layout_set_font_description (bar->pl, bar->pfd);
254
bar->pfd_big = pango_font_description_new ();
255
pango_font_description_set_family (bar->pfd_big, "Sans");
256
pango_font_description_set_weight (bar->pfd_big, PANGO_WEIGHT_BOLD);
257
pango_font_description_set_size (bar->pfd_big, 12*PANGO_SCALE);
259
bar->pl[0] = gtk_widget_create_pango_layout (bar->w, NULL);
260
pango_layout_set_font_description (bar->pl[0], bar->pfd_big);
262
for (i = 1; i < NUMLINES; ++i)
264
bar->pl[i] = gtk_widget_create_pango_layout (bar->w, NULL);
265
pango_layout_set_font_description (bar->pl[i], bar->pfd);