diff options
Diffstat (limited to 'displayvolume.c')
-rw-r--r-- | displayvolume.c | 109 |
1 files changed, 6 insertions, 103 deletions
diff --git a/displayvolume.c b/displayvolume.c index 997a6fc..ed5fbee 100644 --- a/displayvolume.c +++ b/displayvolume.c @@ -1,4 +1,5 @@ #include "symbols/mute.xpm" +#include "volumebox.h" #include "displayvolume.h" #include "config.h" @@ -7,47 +8,11 @@ cNopacityDisplayVolume::cNopacityDisplayVolume(void) : cThread("DisplayVolume") { initial = true; fadeout = false; - muted = false; int top = geoManager->osdTop + geoManager->osdHeight - geoManager->volumeHeight - config.GetValue("volumeBorderBottom"); - int left = geoManager->osdLeft + (geoManager->osdWidth - geoManager->volumeWidth) / 2; + int left = geoManager->osdLeft + ((geoManager->osdWidth - geoManager->volumeWidth) / 2); osd = CreateOsd(left, top, geoManager->volumeWidth, geoManager->volumeHeight); - - pixmapBackground = osd->CreatePixmap(1, cRect(0, 0, geoManager->volumeWidth, geoManager->volumeHeight)); - - if (config.GetValue("displayType") == dtGraphical) { - cImage *imgBack = imgCache->GetSkinElement(seVolumeBackground); - if (imgBack) { - pixmapBackground->DrawImage(cPoint(0, 0), *imgBack); - } - } else { - pixmapBackground->Fill(Theme.Color(clrChannelBackground)); - if (config.GetValue("displayType") == dtBlending) { - DrawBlendedBackground(pixmapBackground, - 0, - geoManager->volumeWidth, - Theme.Color(clrChannelBackground), - Theme.Color(clrChannelBackBlend), - true); - DrawBlendedBackground(pixmapBackground, - 0, - geoManager->volumeWidth, - Theme.Color(clrChannelBackground), - Theme.Color(clrChannelBackBlend), - false); - } - int cornerRadius = geoManager->volumeHeight/4; - if (cornerRadius > 2) { - DrawRoundedCorners(pixmapBackground, - cornerRadius, - 0, - 0, - geoManager->volumeWidth, - geoManager->volumeHeight); - } - } - pixmapLabel = osd->CreatePixmap(2, cRect(0, 5, geoManager->volumeWidth, geoManager->volumeLabelHeight)); - pixmapProgressBar = osd->CreatePixmap(2, cRect((geoManager->volumeWidth - geoManager->volumeProgressBarWidth) / 2, (geoManager->volumeHeight - geoManager->volumeProgressBarHeight)*2/3, geoManager->volumeProgressBarWidth, geoManager->volumeProgressBarHeight)); + volumeBox = new cNopacityVolumeBox(osd, cRect(0, 0, geoManager->volumeWidth, geoManager->volumeHeight)); } cNopacityDisplayVolume::~cNopacityDisplayVolume(void) { @@ -62,78 +27,16 @@ cNopacityDisplayVolume::~cNopacityDisplayVolume(void) { if (count > 150) Cancel(1); } - osd->DestroyPixmap(pixmapBackground); - osd->DestroyPixmap(pixmapLabel); - osd->DestroyPixmap(pixmapProgressBar); + delete volumeBox; delete osd; } void cNopacityDisplayVolume::SetVolume(int Current, int Total, bool Mute) { - pixmapLabel->Fill(clrTransparent); - cString label = cString::sprintf("%s: %d", tr("Volume"), Current); - pixmapLabel->DrawText(cPoint((geoManager->volumeWidth - fontManager->volumeText->Width(*label)) / 2, (geoManager->volumeLabelHeight - fontManager->volumeText->Height()) / 2), *label, Theme.Color(clrVolumeFont), clrTransparent, fontManager->volumeText); - if (Mute) { - cBitmap bmMute(mute_xpm); - pixmapLabel->DrawBitmap(cPoint(geoManager->volumeWidth - 2*bmMute.Width(), (geoManager->volumeLabelHeight - bmMute.Height()) / 2), bmMute, Theme.Color(clrDiskAlert), clrTransparent); - } - DrawProgressBar(Current, Total); -} - -void cNopacityDisplayVolume::DrawProgressBar(int Current, int Total) { - pixmapProgressBar->Fill(clrTransparent); - if (geoManager->volumeProgressBarHeight < 5) - return; - double percent = ((double)Current) / (double)Total; - int barWidth = geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight; - if ((Current > 0) || (Total > 0)) { - pixmapProgressBar->DrawEllipse(cRect(0, 0, geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack)); - pixmapProgressBar->DrawEllipse(cRect(geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight, 0, geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack)); - pixmapProgressBar->DrawRectangle(cRect(geoManager->volumeProgressBarHeight/2, 0, geoManager->volumeProgressBarWidth - geoManager->volumeProgressBarHeight, geoManager->volumeProgressBarHeight), Theme.Color(clrProgressBarBack)); - - pixmapProgressBar->DrawEllipse(cRect(1, 1, geoManager->volumeProgressBarHeight-2, geoManager->volumeProgressBarHeight-2), Theme.Color(clrProgressBarBlend)); - if (Current > 0) { - tColor colAct = DrawProgressbarBackground(geoManager->volumeProgressBarHeight / 2 - 1, 1, barWidth * percent - 2, geoManager->volumeProgressBarHeight - 2); - pixmapProgressBar->DrawEllipse(cRect(barWidth * percent, 1, geoManager->volumeProgressBarHeight-2, geoManager->volumeProgressBarHeight-2), colAct); - } - } -} - -tColor cNopacityDisplayVolume::DrawProgressbarBackground(int left, int top, int width, int height) { - - tColor clr1 = Theme.Color(clrProgressBar); - tColor clr2 = Theme.Color(clrProgressBarBlend); - tColor clr = 0x00000000; - - int alpha = 0x0; // 0...255 - int alphaStep = 0x1; - int maximumsteps = 256; // alphaStep * maximumsteps <= 256 - int factor = 2; // max. 128 steps - - double step = width / maximumsteps; - if (width < 128) { // width < 128 - factor = 4 * factor; // 32 steps - } else if (width < 256) { // width < 256 - factor = 2 * factor; // 64 steps - } - - step = step * factor; - alphaStep = alphaStep * factor; - maximumsteps = maximumsteps / factor; - - int x = left + height / 2; - for (int i = 0; i < maximumsteps; i++) { - x = left + height / 2 + i * step; - clr = AlphaBlend(clr1, clr2, alpha); - pixmapProgressBar->DrawRectangle(cRect(x, top, step + 1, height), clr); - alpha += alphaStep; - } - return clr; + volumeBox->SetVolume(!Mute ? Current : 0, Total, Mute); } void cNopacityDisplayVolume::SetAlpha(int Alpha) { - pixmapBackground->SetAlpha(Alpha); - pixmapProgressBar->SetAlpha(Alpha); - pixmapLabel->SetAlpha(Alpha); + volumeBox->SetAlpha(Alpha); } void cNopacityDisplayVolume::Flush(void) { |