driver/volume.cpp: inherit from CChangeObserver;

add changeNotify() for adjusting volume percent
This commit is contained in:
[CST] Focus
2012-08-16 15:54:10 +04:00
parent 7d0be6d58d
commit 49f67b02f4
2 changed files with 31 additions and 3 deletions

View File

@@ -38,6 +38,7 @@
#include <daemonc/remotecontrol.h>
#include <driver/framebuffer.h>
#include <driver/volume.h>
#include <zapit/zapit.h>
#if HAVE_COOL_HARDWARE
#include <gui/widget/progressbar.h>
@@ -62,6 +63,8 @@ CVolume::CVolume()
ShadowOffset = 4;
mute_ay = 0;
m_mode = CNeutrinoApp::getInstance()->getMode();
channel_id = 0;
apid = 0;
Init();
}
@@ -212,7 +215,8 @@ void CVolume::AudioMute(int newValue, bool isEvent)
void CVolume::setvol(int vol)
{
audioDecoder->setVolume(vol, vol);
//audioDecoder->setVolume(vol, vol);
CZapit::getInstance()->SetVolume(vol);
}
void CVolume::setVolume(const neutrino_msg_t key, const bool bDoPaint, bool nowait)
@@ -366,3 +370,21 @@ void CVolume::refreshVolumebar(int current_volume)
g_Font[VolumeFont]->RenderString(digit_x, digit_y, digit_w, buff, colContent);
}
}
bool CVolume::changeNotify(const neutrino_locale_t OptionName, void * data)
{
bool ret = false;
if (ARE_LOCALES_EQUAL(OptionName, NONEXISTANT_LOCALE)) {
int percent = *(int *) data;
int vol = CZapit::getInstance()->GetVolume();
/* keep resulting volume = (vol * percent)/100 not more than 115 */
if (vol * percent > 11500)
percent = 11500 / vol;
printf("CVolume::changeNotify: percent %d\n", percent);
CZapit::getInstance()->SetPidVolume(channel_id, apid, percent);
CZapit::getInstance()->SetVolumePercent(percent);
*(int *) data = percent;
}
return ret;
}

View File

@@ -30,7 +30,7 @@
#define ROUNDED g_settings.rounded_corners ? vbar_h/2 : 0
class CVolume
class CVolume : public CChangeObserver
{
private:
void refreshVolumebar(int current_volume);
@@ -47,6 +47,9 @@ class CVolume
int rounded;
int m_mode;
bool paintShadow, paintDigits, MuteIconFrame;
/* volume adjustment variables */
t_channel_id channel_id;
int apid;
public:
CVolume();
@@ -60,7 +63,10 @@ class CVolume
void setVolume(const neutrino_msg_t key, const bool bDoPaint = true, bool nowait = false);
int getStartPosTop(){ return sy; }
int getEndPosRight(){ return sw; }
void SetCurrentPid(int pid) { apid = pid; }
void SetCurrentChannel(t_channel_id id) { channel_id = id; }
bool changeNotify(const neutrino_locale_t OptionName, void *);
};
#endif // __CVOLUME__