Mercurial > audlegacy-plugins
view src/aosd/aosd.c @ 569:d401f87f89f7 trunk
[svn] - added Audacious OSD, yet-another-written-from-scratch plugin to display OSD, based on Ghosd library; currently untied from configure, to compile it you have to run make in its directory; will be added to configure after some testing
author | giacomo |
---|---|
date | Mon, 29 Jan 2007 06:40:04 -0800 |
parents | |
children | 1708b03e116c |
line wrap: on
line source
/* * * Author: Giacomo Lozito <james@develia.org>, (C) 2005-2007 * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #include "aosd.h" #include "aosd_osd.h" #include "aosd_cfg.h" #include <audacious/input.h> #include <audacious/playlist.h> #include <audacious/strings.h> static guint timeout_sid = 0; static gchar *prev_title = NULL; static gboolean was_playing = FALSE; aosd_cfg_t * global_config = NULL; gboolean aosd_check_pl_change ( gpointer data ) { if ( ip_data.playing ) { Playlist *active = playlist_get_active(); gint pos = playlist_get_position(active); gchar *title = playlist_get_songtitle(active, pos); if ( ( title != NULL ) && ( (( prev_title != NULL ) && ( strcmp(title,prev_title) )) || ( was_playing == FALSE ) ) ) { /* string formatting is done here a.t.m. - TODO - improve this area */ gchar *utf8_title = str_to_utf8( title ); gchar *utf8_title_markup = g_markup_printf_escaped( "<span font_desc='%s'>%s</span>" , global_config->osd->text.fonts_name[0] , utf8_title ); aosd_display( utf8_title_markup , global_config->osd , FALSE ); g_free( utf8_title_markup ); g_free( utf8_title ); } if ( prev_title != NULL ) g_free(prev_title); prev_title = g_strdup(title); g_free( title ); } else { if ( prev_title != NULL ) { g_free(prev_title); prev_title = NULL; } } was_playing = ip_data.playing; return TRUE; } /* ***************** */ /* plug-in functions */ GeneralPlugin *get_gplugin_info() { return &aosd_gp; } void aosd_init ( void ) { g_log_set_handler( NULL , G_LOG_LEVEL_WARNING , g_log_default_handler , NULL ); global_config = aosd_cfg_new(); aosd_cfg_load( global_config ); timeout_sid = g_timeout_add( 500 , (GSourceFunc)aosd_check_pl_change , NULL ); return; } void aosd_cleanup ( void ) { if ( timeout_sid > 0 ) g_source_remove( timeout_sid ); if ( prev_title != NULL ) { g_free(prev_title); prev_title = NULL; } aosd_shutdown(); if ( global_config != NULL ) { aosd_cfg_delete( global_config ); global_config = NULL; } return; } void aosd_configure ( void ) { /* create a new configuration object */ aosd_cfg_t *cfg = aosd_cfg_new(); /* fill it with information from config file */ aosd_cfg_load( cfg ); /* call the configuration UI */ aosd_ui_configure( cfg ); /* delete configuration object */ aosd_cfg_delete( cfg ); return; } void aosd_about ( void ) { aosd_ui_about(); return; }