ocarina/ocarina/footer/now_playing.cpp

88 lines
2.0 KiB
C++

#include <libsaria/track.h>
#include <ocarina/gtk.h>
#include "footer.h"
static GtkWidget *now_playing = NULL;
static GtkWidget *title = NULL;
static GtkWidget *artist = NULL;
static GtkWidget *album = NULL;
static void set_label(GtkWidget *label, string text, string size)
{
string escaped = g_markup_escape_text(text.c_str(), -1);
string markup = "<span size='" + size + "'>" + escaped + "</span>";
gtk_label_set_markup(GTK_LABEL(label), markup.c_str());
}
static void set_title(string new_title)
{
set_label(title, new_title, "xx-large");
}
static void set_artist(string new_artist)
{
set_label(artist, new_artist, "x-large");
}
static void set_album(string new_album)
{
set_label(album, new_album, "x-large");
}
static GtkWidget *align(GtkWidget *label)
{
GtkWidget *alignment = gtk_alignment_new(0.0, 0.5, 0.0, 0.0);
container_add(alignment, label);
return alignment;
}
static GtkWidget *setup_window()
{
GtkWidget *viewport = gtk_viewport_new(NULL, NULL);
now_playing = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(now_playing),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_NEVER);
gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
container_add(now_playing, viewport);
return viewport;
}
static void make_now_playing()
{
GtkWidget *tag_box = gtk_vbox_new(FALSE, 0);
GtkWidget *container = setup_window();
title = gtk_label_new("");
artist = gtk_label_new("");
album = gtk_label_new("");
set_title(" ");
set_artist(" ");
set_album(" ");
box_pack_start(tag_box, align(title), TRUE, FALSE, 0);
box_pack_start(tag_box, align(artist), TRUE, FALSE, 0);
box_pack_start(tag_box, align(album), TRUE, FALSE, 0);
container_add(container, tag_box);
gtk_widget_show_all(now_playing);
}
GtkWidget *get_nowplaying()
{
if (now_playing == NULL)
make_now_playing();
return now_playing;
}
void set_now_playing(Track &track)
{
set_title(track.get_title());
set_artist("by " + track.get_artist());
set_album("from " + track.get_album());
}