This commit is contained in:
Julian Ospald 2017-07-04 00:23:26 +02:00
parent d12d43f404
commit a6201df328
No known key found for this signature in database
GPG Key ID: 511B62C09D50CD28
1 changed files with 35 additions and 5 deletions

View File

@ -12,7 +12,7 @@ use std::cell::RefCell;
use libc;
use audio::*;
use errors::*;
use std::path;
use std::path::*;
@ -63,7 +63,7 @@ struct AudioPix {
impl AudioPix {
pub fn new(size: i32) -> Result<AudioPix> {
pub fn new_from_theme(size: i32) -> Result<AudioPix> {
let theme: gtk::IconTheme =
gtk::IconTheme::get_default().ok_or("Couldn't get default icon theme")?;
let pix = AudioPix {
@ -82,6 +82,19 @@ impl AudioPix {
return Ok(pix);
}
pub fn new_from_pnmixer() -> Result<AudioPix> {
gtk::IconTheme::get_default().ok_or("Couldn't get default icon theme")?;
let pix = AudioPix {
muted: pixbuf_new_from_file("pnmixer-muted.png")?,
low: pixbuf_new_from_file("pnmixer-low.png")?,
medium: pixbuf_new_from_file("pnmixer-medium.png")?,
high: pixbuf_new_from_file("pnmixer-high.png")?,
off: pixbuf_new_from_file("pnmixer-off.png")?,
};
return Ok(pix);
}
pub fn select_pix(&self, vol_level: VolLevel) -> &gdk_pixbuf::Pixbuf {
match vol_level {
VolLevel::Muted => &self.muted,
@ -105,7 +118,7 @@ fn pixbuf_new_from_theme(icon_name: &str,
debug!("Loading stock icon {} from {:?}",
icon_name,
icon_info.get_filename().unwrap_or(path::PathBuf::new()));
icon_info.get_filename().unwrap_or(PathBuf::new()));
// TODO: propagate error
let pixbuf = icon_info.load_icon().unwrap();
@ -114,6 +127,23 @@ fn pixbuf_new_from_theme(icon_name: &str,
}
fn pixbuf_new_from_file(filename: &str) -> Result<gdk_pixbuf::Pixbuf> {
ensure!(!filename.is_empty(), "Filename is empty");
let s = format!("./data/pixmaps/{}", filename);
let path = Path::new(s.as_str());
if path.exists() {
let str_path = path.to_str().ok_or("Path is not valid unicode")?;
// TODO: propagate error
return Ok(gdk_pixbuf::Pixbuf::new_from_file(str_path).unwrap());
} else {
bail!("Uh-oh");
}
}
fn update_tray_icon(audio_pix: &AudioPix, appstate: &AppS) {
let status_icon = &appstate.gui.status_icon;
let pixbuf = audio_pix.select_pix(appstate.audio.vol_level());
@ -122,7 +152,7 @@ fn update_tray_icon(audio_pix: &AudioPix, appstate: &AppS) {
pub fn init_tray_icon(appstate: Rc<AppS>) {
let audio_pix = Rc::new(RefCell::new(try_w!(AudioPix::new(ICON_MIN_SIZE))));
let audio_pix = Rc::new(RefCell::new(try_w!(AudioPix::new_from_pnmixer())));
update_tray_icon(&audio_pix.borrow(), &appstate);
/* connect audio handler */
@ -240,7 +270,7 @@ fn on_tray_icon_size_changed(appstate: &AppS,
{
let mut pix = audio_pix.borrow_mut();
*pix = try_wr!(AudioPix::new(size), false);
*pix = try_wr!(AudioPix::new_from_pnmixer(), false);
}
update_tray_icon(&audio_pix.borrow(), &appstate);