From: Darren S. <ds...@us...> - 2004-11-26 22:57:12
|
Update of /cvsroot/xine/gnome-xine/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5900/src Modified Files: infobar.c infobar.h Log Message: Add an extra line (for audio stream information). Assume UTF-8. Index: infobar.c =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/infobar.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- infobar.c 10 Nov 2004 01:29:12 -0000 1.15 +++ infobar.c 26 Nov 2004 22:57:01 -0000 1.16 @@ -34,31 +34,35 @@ #include "globals.h" #include "player.h" -#define LINESIZE 1025 +#define NUMLINES 3 struct infobar_s { GtkWidget *w; - PangoLayout *pl, *pl_big; + PangoLayout *pl[NUMLINES]; PangoFontDescription *pfd, *pfd_big; GdkGC *black_gc, *blue_gc, *white_gc; - gchar *line1; - gchar *line2; + gchar *line[NUMLINES]; }; -static void paint_bar (infobar_t *bar) { +static void paint_bar (infobar_t *bar) +{ + int i; gdk_draw_rectangle (bar->w->window, bar->black_gc, TRUE, 0, 0, bar->w->allocation.width, bar->w->allocation.height+1); - pango_layout_set_text (bar->pl_big, bar->line1, -1); - gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 2, bar->pl_big); + pango_layout_set_text (bar->pl[0], bar->line[0] ? : "", -1); + gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 2, bar->pl[0]); - pango_layout_set_text (bar->pl, bar->line2, -1); - gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 23, bar->pl); + for (i = 1; i < NUMLINES; ++i) + { + pango_layout_set_text (bar->pl[i], bar->line[i] ? : "", -1); + gdk_draw_layout (bar->w->window, bar->blue_gc, 7, 9 + 14 * i, bar->pl[i]); + } } static gboolean expose_event_cb (GtkWidget *widget, @@ -81,36 +85,33 @@ return TRUE; } -void infobar_line1 (infobar_t *bar, const char *format, ...) { - - va_list argp; - +void infobar_clear (infobar_t *bar) +{ + int i; if (!bar) return; - - va_start (argp, format); - - vsnprintf (bar->line1, LINESIZE, format, argp); - - va_end (argp); - - normalize_to_ascii (bar->line1); - + for (i = 0; i < NUMLINES; ++i) + { + free (bar->line[i]); + bar->line[i] = NULL; + } paint_bar (bar); } -void infobar_line2 (infobar_t *bar, const char *format, ...){ - - va_list argp; - - if (!bar) return; - - va_start (argp, format); - - vsnprintf (bar->line2, LINESIZE, format, argp); - - va_end (argp); - - normalize_to_ascii (bar->line2); +void infobar_line (infobar_t *bar, unsigned int line, const char *format, ...) +{ + if (!bar || line >= NUMLINES) + return; + + free (bar->line[line]); + bar->line[line] = NULL; + + if (format) + { + va_list argp; + va_start (argp, format); + vasprintf (&bar->line[line], format, argp); + va_end (argp); + } paint_bar (bar); } @@ -143,10 +144,10 @@ if ( (a=xine_get_meta_info (stream, XINE_META_INFO_ARTIST)) ) { snprintf (strbuf, 2048, "%s (%s) - gxine %s", t, a, VERSION); - infobar_line1 (bar, "%s (%s)", t, a); + infobar_line (bar, 0, "%s (%s)", t, a); } else { snprintf (strbuf, 2048, "%s - gxine %s", t, VERSION); - infobar_line1 (bar, "%s", t); + infobar_line (bar, 0, "%s", t); } } else { if (strlen (player_get_cur_mrl()) > 0) { @@ -155,17 +156,16 @@ if (str) { snprintf (strbuf, 2048, "%s - gxine %s", str+1, VERSION); - infobar_line1 (bar, "%s", str+1); + infobar_line (bar, 0, "%s", str+1); } else { snprintf (strbuf, 2048, "%s - gxine %s", player_get_cur_mrl(), VERSION); - infobar_line1 (bar, "%s", player_get_cur_mrl()); + infobar_line (bar, 0, "%s", player_get_cur_mrl()); } } else { snprintf (strbuf, 2048, "gxine %s", VERSION); - infobar_line1 (bar, "%s", strbuf); + infobar_line (bar, 0, "%s", strbuf); } } - normalize_to_ascii (strbuf); gtk_window_set_title (GTK_WINDOW (app), strbuf); /* @@ -174,22 +174,23 @@ strbuf[0]=0; -#if 0 - n = xine_get_stream_info (stream, XINE_STREAM_INFO_BITRATE)/1000; - if ((n>10) && (n<20000)) append_printf (strbuf, "%d kBit/s ", n); -#endif - str = xine_get_meta_info (stream, XINE_META_INFO_SYSTEMLAYER); if (str) append_printf (strbuf, "%s ", str); w = xine_get_stream_info (stream, XINE_STREAM_INFO_VIDEO_WIDTH); h = xine_get_stream_info (stream, XINE_STREAM_INFO_VIDEO_HEIGHT); - if (w && h) append_printf (strbuf, "%dx%d ", w, h); str = xine_get_meta_info (stream, XINE_META_INFO_VIDEOCODEC); if (str) append_printf (strbuf, "%s ", str); + n = xine_get_stream_info (stream, XINE_STREAM_INFO_VIDEO_BITRATE)/1000; + if (n > 10 && n < 20000) append_printf (strbuf, "%d kBit/s ", n); + + infobar_line (bar, 1, strbuf); + + strbuf[0] = 0; + n = xine_get_stream_info (stream, XINE_STREAM_INFO_AUDIO_SAMPLERATE)/1000; if ((n>0) && (n<256)) append_printf (strbuf, "%d kHz ", n); @@ -199,7 +200,7 @@ str = xine_get_meta_info (stream, XINE_META_INFO_AUDIOCODEC); if (str) append_printf (strbuf, "%s ", str); - infobar_line2 (bar, strbuf); + infobar_line (bar, 2, strbuf); } @@ -207,21 +208,24 @@ infobar_t *create_infobar (GtkWidget **w) { infobar_t *bar; + int i; bar = (infobar_t *) malloc (sizeof (infobar_t)); bar->w = gtk_drawing_area_new (); - gtk_drawing_area_size (GTK_DRAWING_AREA(bar->w), 300, 40); + gtk_drawing_area_size (GTK_DRAWING_AREA(bar->w), 300, 12 + NUMLINES * 14); - bar->line1 = malloc(LINESIZE); - bar->line2 = malloc(LINESIZE); + for (i = 0; i < NUMLINES; ++i) + bar->line[i] = NULL; *w = bar->w; return bar; } -void postinit_infobar (GtkWidget *window, infobar_t *bar) { +void postinit_infobar (GtkWidget *window, infobar_t *bar) +{ + int i; if (!bar) return; @@ -250,9 +254,13 @@ pango_font_description_set_weight (bar->pfd_big, PANGO_WEIGHT_BOLD); pango_font_description_set_size (bar->pfd_big, 12*PANGO_SCALE); - bar->pl = gtk_widget_create_pango_layout (bar->w, NULL); - pango_layout_set_font_description (bar->pl, bar->pfd); + bar->pl[0] = gtk_widget_create_pango_layout (bar->w, NULL); + pango_layout_set_font_description (bar->pl[0], bar->pfd_big); + + for (i = 1; i < NUMLINES; ++i) + { + bar->pl[i] = gtk_widget_create_pango_layout (bar->w, NULL); + pango_layout_set_font_description (bar->pl[i], bar->pfd); + } - bar->pl_big = gtk_widget_create_pango_layout (bar->w, NULL); - pango_layout_set_font_description (bar->pl_big, bar->pfd_big); } Index: infobar.h =================================================================== RCS file: /cvsroot/xine/gnome-xine/src/infobar.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- infobar.h 9 Apr 2004 18:07:51 -0000 1.2 +++ infobar.h 26 Nov 2004 22:57:01 -0000 1.3 @@ -33,7 +33,8 @@ void infobar_show_metadata (void); -void infobar_line1 (infobar_t *bar, const char *format, ...); -void infobar_line2 (infobar_t *bar, const char *format, ...); +void infobar_clear (infobar_t *bar); +void infobar_line (infobar_t *bar, unsigned int lineno, + const char *format, ...); #endif |