Ejemplo n.º 1
0
void xmms_remote_set_main_volume(int session, int v)
{
	int b, vl, vr;

	b = xmms_remote_get_balance(session);

	v = CLAMP(v, 0, 100);
	
	if (b < 0)
	{
		vl = v;
		vr = rint((v * (100 + b)) / 100.0);
	}
	else if (b > 0)
	{
		vl = rint((v * (100 - b)) / 100.0);
		vr = v;
	}
	else
		vl = vr = v;
	xmms_remote_set_volume(session, vl, vr);
}
Ejemplo n.º 2
0
/*
 * Callback funtion to handle delayed display.
 */
static gint timeout_func(gpointer data)
{
  gint pos, volume, balance;
  gboolean playing, paused, repeat, shuffle;
  gchar *text;

  if (!osd)
    return FALSE;

  GDK_THREADS_ENTER();

  pos = xmms_remote_get_playlist_pos (gp.xmms_session);
  playing = xmms_remote_is_playing (gp.xmms_session);
  paused = xmms_remote_is_paused (gp.xmms_session);
  volume = xmms_remote_get_main_volume (gp.xmms_session);
  shuffle = xmms_remote_is_shuffle (gp.xmms_session);
  repeat = xmms_remote_is_repeat (gp.xmms_session);
  balance = (xmms_remote_get_balance(gp.xmms_session) + 100) / 2;

  /**
   * Check if the position of the current song has changed.
   * DTM: bugfix
   *        1) 'get_playlist_time' seems "variable" for a song, don't use it
   *        2) we must free the titles we download
   */
  if (pos != previous_song)
    {
      if (xmms_remote_get_playlist_length (gp.xmms_session)) /* otherwise it'll crash */
	{

	  text = xmms_remote_get_playlist_title (gp.xmms_session, pos);
	  if (text)
	    replace_hexcodes (text);

	  /**
	   * Check to see if the title of the song has changed.
	   */
	  if ( !previous_title ||
	       g_strcasecmp(text, previous_title) != 0 ) {
	    if (show_stop) {
	      xosd_display (osd, 0, XOSD_string, playing ? "Play" : "Stopped");
	      xosd_display (osd, 1, XOSD_string, text);
	    }
	    save_previous_title( text );
	  }

	} else {
	  /** No song titles available. */
	  if (show_stop) {
	    xosd_display (osd, 0, XOSD_string, playing ? "Play" : "Stopped");
	  }
	  save_previous_title( 0 );
	}

      previous_song = pos;
    }

  else if (playing != previous_playing )
    {
      if (playing && show_trackname)
	{
	  xosd_display (osd, 0, XOSD_string, "Play");
	  text = xmms_remote_get_playlist_title (gp.xmms_session, pos);
	  if (text) {
	    replace_hexcodes (text);
	    xosd_display (osd, 1, XOSD_string, text);
	    save_previous_title ( text );
	  }
	}
      else if (!playing && show_stop )
	{
	  xosd_display (osd, 0, XOSD_string, "Stop");
	  xosd_display (osd, 1, XOSD_string, "");
	}

      previous_playing = playing;
    }

  else if (paused != previous_paused && show_pause)
    {
      if (paused)
	{
	  xosd_display (osd, 0, XOSD_string, "Paused");
	  xosd_display (osd, 1, XOSD_string, "");
	}
      else
	{
	  xosd_display (osd, 0, XOSD_string, "Unpaused");
	  text = xmms_remote_get_playlist_title (gp.xmms_session, pos);
	  if (text) {
	    replace_hexcodes (text);
	    xosd_display (osd, 1, XOSD_string, text);
	    save_previous_title( text );
	  }
	}
      previous_paused = paused;
    }

  else if (volume != previous_volume && show_volume)
    {
      xosd_display (osd, 0, XOSD_string, "Volume");
      xosd_display (osd, 1, XOSD_percentage, volume);
      previous_volume = volume;
    }

  else if (balance != previous_balance && show_balance)
    {
      xosd_display (osd, 0, XOSD_string, "Balance");
      xosd_display (osd, 1, XOSD_slider, balance);

      previous_balance = balance;
    }

  else if (repeat != previous_repeat && show_repeat )
    {
      xosd_display (osd, 0, XOSD_string, "Repeat");
      xosd_display (osd, 1, XOSD_string, repeat ? "On" : "Off");

      previous_repeat = repeat;
    }

  else if (shuffle != previous_shuffle && show_shuffle )
    {
      xosd_display (osd, 0, XOSD_string, "Shuffle");
      xosd_display (osd, 1, XOSD_string, shuffle ? "On" : "Off");

      previous_shuffle = shuffle;
    }

  GDK_THREADS_LEAVE();

  return TRUE;
}