summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2012-11-28 19:42:38 +0100
committerlouis <louis.braun@gmx.de>2012-11-28 19:42:38 +0100
commitae248bc9e2350d9d17fe2df75b2fa25f0d2a7770 (patch)
tree7bcd7b9f4efe1fb864fbbf75f303879011eb7940
parentd4c74dc0b5a3dd62161a9b29ec2c98cc9f223783 (diff)
downloadskin-nopacity-ae248bc9e2350d9d17fe2df75b2fa25f0d2a7770.tar.gz
skin-nopacity-ae248bc9e2350d9d17fe2df75b2fa25f0d2a7770.tar.bz2
Added latest scaling patch from Zoolook and makefile patch
-rw-r--r--.dependencies168
-rw-r--r--Makefile3
-rw-r--r--displaymenuview.c24
-rw-r--r--displaymenuview.c.orig629
-rw-r--r--displaymenuview.h4
-rwxr-xr-xlibvdr-skinnopacity.sobin0 -> 503780 bytes
-rw-r--r--po/de_DE.mobin0 -> 5587 bytes
-rw-r--r--po/skinnopacity.pot207
-rw-r--r--skinnopacity.obin0 -> 615200 bytes
9 files changed, 1021 insertions, 14 deletions
diff --git a/.dependencies b/.dependencies
new file mode 100644
index 0000000..220a30c
--- /dev/null
+++ b/.dependencies
@@ -0,0 +1,168 @@
+skinnopacity.o: skinnopacity.c /usr/local/src/VDR/include/vdr/plugin.h \
+ /usr/local/src/VDR/include/vdr/i18n.h \
+ /usr/local/src/VDR/include/vdr/tools.h \
+ /usr/local/src/VDR/include/vdr/config.h \
+ /usr/local/src/VDR/include/vdr/font.h \
+ /usr/local/src/VDR/include/vdr/menuitems.h \
+ /usr/local/src/VDR/include/vdr/dvbdevice.h \
+ /usr/local/src/VDR/include/vdr/device.h \
+ /usr/local/src/VDR/include/vdr/channels.h \
+ /usr/local/src/VDR/include/vdr/sources.h \
+ /usr/local/src/VDR/include/vdr/thread.h \
+ /usr/local/src/VDR/include/vdr/ci.h \
+ /usr/local/src/VDR/include/vdr/dvbsubtitle.h \
+ /usr/local/src/VDR/include/vdr/osd.h \
+ /usr/local/src/VDR/include/vdr/eit.h \
+ /usr/local/src/VDR/include/vdr/filter.h \
+ /usr/local/src/VDR/include/vdr/nit.h \
+ /usr/local/src/VDR/include/vdr/pat.h \
+ /usr/local/src/VDR/include/vdr/remux.h \
+ /usr/local/src/VDR/include/vdr/ringbuffer.h \
+ /usr/local/src/VDR/include/vdr/sdt.h \
+ /usr/local/src/VDR/include/vdr/sections.h \
+ /usr/local/src/VDR/include/vdr/spu.h \
+ /usr/local/src/VDR/include/vdr/osdbase.h \
+ /usr/local/src/VDR/include/vdr/skins.h \
+ /usr/local/src/VDR/include/vdr/epg.h \
+ /usr/local/src/VDR/include/libsi/section.h \
+ /usr/local/src/VDR/include/libsi/si.h \
+ /usr/local/src/VDR/include/libsi/util.h \
+ /usr/local/src/VDR/include/libsi/headers.h \
+ /usr/local/src/VDR/include/vdr/keys.h \
+ /usr/local/src/VDR/include/vdr/recording.h \
+ /usr/local/src/VDR/include/vdr/timers.h \
+ /usr/local/src/VDR/include/vdr/themes.h nopacity.c \
+ /usr/local/src/VDR/include/vdr/osd.h \
+ /usr/local/src/VDR/include/vdr/menu.h \
+ /usr/local/src/VDR/include/vdr/dvbplayer.h \
+ /usr/local/src/VDR/include/vdr/player.h \
+ /usr/local/src/VDR/include/vdr/recorder.h \
+ /usr/local/src/VDR/include/vdr/receiver.h config.c config.h setup.c \
+ setup.h imageloader.c imageloader.h \
+ /usr/local/src/VDR/include/vdr/skins.h \
+ /usr/include/ImageMagick/Magick++.h \
+ /usr/include/ImageMagick/Magick++/Include.h \
+ /usr/include/ImageMagick/magick/magick-config.h \
+ /usr/include/ImageMagick/magick/MagickCore.h \
+ /usr/include/ImageMagick/magick/magick-type.h \
+ /usr/include/ImageMagick/magick/accelerate.h \
+ /usr/include/ImageMagick/magick/morphology.h \
+ /usr/include/ImageMagick/magick/geometry.h \
+ /usr/include/ImageMagick/magick/animate.h \
+ /usr/include/ImageMagick/magick/annotate.h \
+ /usr/include/ImageMagick/magick/draw.h \
+ /usr/include/ImageMagick/magick/image.h \
+ /usr/include/ImageMagick/magick/color.h \
+ /usr/include/ImageMagick/magick/pixel.h \
+ /usr/include/ImageMagick/magick/colorspace.h \
+ /usr/include/ImageMagick/magick/constitute.h \
+ /usr/include/ImageMagick/magick/exception.h \
+ /usr/include/ImageMagick/magick/semaphore.h \
+ /usr/include/ImageMagick/magick/blob.h \
+ /usr/include/ImageMagick/magick/stream.h \
+ /usr/include/ImageMagick/magick/cache-view.h \
+ /usr/include/ImageMagick/magick/composite.h \
+ /usr/include/ImageMagick/magick/compress.h \
+ /usr/include/ImageMagick/magick/effect.h \
+ /usr/include/ImageMagick/magick/layer.h \
+ /usr/include/ImageMagick/magick/locale_.h \
+ /usr/include/ImageMagick/magick/hashmap.h \
+ /usr/include/ImageMagick/magick/monitor.h \
+ /usr/include/ImageMagick/magick/profile.h \
+ /usr/include/ImageMagick/magick/string_.h \
+ /usr/include/ImageMagick/magick/quantum.h \
+ /usr/include/ImageMagick/magick/resample.h \
+ /usr/include/ImageMagick/magick/resize.h \
+ /usr/include/ImageMagick/magick/timer.h \
+ /usr/include/ImageMagick/magick/type.h \
+ /usr/include/ImageMagick/magick/artifact.h \
+ /usr/include/ImageMagick/magick/attribute.h \
+ /usr/include/ImageMagick/magick/cache.h \
+ /usr/include/ImageMagick/magick/cipher.h \
+ /usr/include/ImageMagick/magick/client.h \
+ /usr/include/ImageMagick/magick/coder.h \
+ /usr/include/ImageMagick/magick/colormap.h \
+ /usr/include/ImageMagick/magick/compare.h \
+ /usr/include/ImageMagick/magick/configure.h \
+ /usr/include/ImageMagick/magick/decorate.h \
+ /usr/include/ImageMagick/magick/delegate.h \
+ /usr/include/ImageMagick/magick/deprecate.h \
+ /usr/include/ImageMagick/magick/quantize.h \
+ /usr/include/ImageMagick/magick/registry.h \
+ /usr/include/ImageMagick/magick/display.h \
+ /usr/include/ImageMagick/magick/distort.h \
+ /usr/include/ImageMagick/magick/enhance.h \
+ /usr/include/ImageMagick/magick/feature.h \
+ /usr/include/ImageMagick/magick/fourier.h \
+ /usr/include/ImageMagick/magick/fx.h \
+ /usr/include/ImageMagick/magick/gem.h \
+ /usr/include/ImageMagick/magick/random_.h \
+ /usr/include/ImageMagick/magick/histogram.h \
+ /usr/include/ImageMagick/magick/identify.h \
+ /usr/include/ImageMagick/magick/image-view.h \
+ /usr/include/ImageMagick/magick/list.h \
+ /usr/include/ImageMagick/magick/log.h \
+ /usr/include/ImageMagick/magick/magic.h \
+ /usr/include/ImageMagick/magick/magick.h \
+ /usr/include/ImageMagick/magick/matrix.h \
+ /usr/include/ImageMagick/magick/memory_.h \
+ /usr/include/ImageMagick/magick/module.h \
+ /usr/include/ImageMagick/magick/version.h \
+ /usr/include/ImageMagick/magick/mime.h \
+ /usr/include/ImageMagick/magick/montage.h \
+ /usr/include/ImageMagick/magick/option.h \
+ /usr/include/ImageMagick/magick/paint.h \
+ /usr/include/ImageMagick/magick/policy.h \
+ /usr/include/ImageMagick/magick/prepress.h \
+ /usr/include/ImageMagick/magick/property.h \
+ /usr/include/ImageMagick/magick/resource_.h \
+ /usr/include/ImageMagick/magick/segment.h \
+ /usr/include/ImageMagick/magick/shear.h \
+ /usr/include/ImageMagick/magick/signature.h \
+ /usr/include/ImageMagick/magick/splay-tree.h \
+ /usr/include/ImageMagick/magick/statistic.h \
+ /usr/include/ImageMagick/magick/token.h \
+ /usr/include/ImageMagick/magick/transform.h \
+ /usr/include/ImageMagick/magick/threshold.h \
+ /usr/include/ImageMagick/magick/utility.h \
+ /usr/include/ImageMagick/magick/xml-tree.h \
+ /usr/include/ImageMagick/magick/xwindow.h \
+ /usr/include/ImageMagick/wand/MagickWand.h \
+ /usr/include/ImageMagick/wand/animate.h \
+ /usr/include/ImageMagick/wand/compare.h \
+ /usr/include/ImageMagick/wand/composite.h \
+ /usr/include/ImageMagick/wand/conjure.h \
+ /usr/include/ImageMagick/wand/convert.h \
+ /usr/include/ImageMagick/wand/deprecate.h \
+ /usr/include/ImageMagick/wand/drawing-wand.h \
+ /usr/include/ImageMagick/wand/pixel-wand.h \
+ /usr/include/ImageMagick/wand/magick-wand.h \
+ /usr/include/ImageMagick/wand/pixel-iterator.h \
+ /usr/include/ImageMagick/wand/display.h \
+ /usr/include/ImageMagick/wand/identify.h \
+ /usr/include/ImageMagick/wand/import.h \
+ /usr/include/ImageMagick/wand/magick-property.h \
+ /usr/include/ImageMagick/wand/magick-image.h \
+ /usr/include/ImageMagick/wand/mogrify.h \
+ /usr/include/ImageMagick/wand/montage.h \
+ /usr/include/ImageMagick/wand/stream.h \
+ /usr/include/ImageMagick/wand/wand-view.h \
+ /usr/include/ImageMagick/Magick++/Image.h \
+ /usr/include/ImageMagick/Magick++/Blob.h \
+ /usr/include/ImageMagick/Magick++/Color.h \
+ /usr/include/ImageMagick/Magick++/Drawable.h \
+ /usr/include/ImageMagick/Magick++/Geometry.h \
+ /usr/include/ImageMagick/Magick++/Exception.h \
+ /usr/include/ImageMagick/Magick++/TypeMetric.h \
+ /usr/include/ImageMagick/Magick++/Pixels.h \
+ /usr/include/ImageMagick/Magick++/STL.h \
+ /usr/include/ImageMagick/Magick++/CoderInfo.h \
+ /usr/include/ImageMagick/Magick++/Montage.h nopacity.h \
+ /usr/local/src/VDR/include/vdr/videodir.h helpers.c displaychannel.c \
+ symbols/audio.xpm symbols/dolbydigital.xpm symbols/encrypted.xpm \
+ symbols/radio.xpm symbols/recording.xpm symbols/teletext.xpm \
+ displaychannel.h menuitem.c menuitem.h menudetailview.c menudetailview.h \
+ displaymenuview.c displaymenuview.h displaymenu.c displaymenu.h \
+ displayreplay.c displayreplay.h displayvolume.c symbols/mute.xpm \
+ displayvolume.h displaytracks.c displaytracks.h displaymessage.c \
+ displaymessage.h
diff --git a/Makefile b/Makefile
index 2c4ea75..756cbfa 100644
--- a/Makefile
+++ b/Makefile
@@ -50,6 +50,9 @@ INCLUDES += -I/usr/include/ImageMagick
DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
+ifdef YAEPG
+DEFINES += -DUSE_YAEPG
+endif
### The object files (add further files here):
OBJS = $(PLUGIN).o
diff --git a/displaymenuview.c b/displaymenuview.c
index abd921c..53fe6b2 100644
--- a/displaymenuview.c
+++ b/displaymenuview.c
@@ -41,11 +41,11 @@ cNopacityDisplayMenuView::~cNopacityDisplayMenuView(void) {
#ifdef USE_YAEPG
if (config.scalePicture) {
tArea availableArea;
- availableArea.x1 = 0;
- availableArea.y1 = 0;
- availableArea.x2 = osdWidth;
- availableArea.y2 = osdHeight;
- ScalePreserveAspect(osd->vidWin, 4.0/3.0, availableArea);
+ availableArea.x1 = -osdLeft;
+ availableArea.y1 = -osdTop;
+ availableArea.x2 = osdWidth + osdLeft;
+ availableArea.y2 = osdHeight + osdTop;
+ ScalePreserveAspect(osd->vidWin, vidAspect, availableArea);
osd->vidWin.bpp = 12;
}
#endif
@@ -57,7 +57,7 @@ cOsd *cNopacityDisplayMenuView::createOsd(void) {
osdWidth = cOsd::OsdWidth();
osdHeight = cOsd::OsdHeight();
osd = CreateOsd(osdLeft, osdTop, osdWidth, osdHeight);
- cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect);
+ cDevice::PrimaryDevice()->GetVideoSize(vidWidth, vidHeight, vidAspect);
return osd;
}
@@ -298,7 +298,7 @@ void cNopacityDisplayMenuView::AdjustContentBackground(bool contentNarrow, bool
availableArea.y1 = osdTop + headerHeight;
availableArea.x2 = contentWidthFull;
availableArea.y2 = availableArea.y1 + contentHeight;
- ScalePreserveAspect(osd->vidWin, aspect, availableArea);
+ ScalePreserveAspect(osd->vidWin, vidAspect, availableArea);
osd->vidWin.bpp = 12;
}
#endif
@@ -307,11 +307,11 @@ void cNopacityDisplayMenuView::AdjustContentBackground(bool contentNarrow, bool
#ifdef USE_YAEPG
if (config.scalePicture) {
tArea availableArea;
- availableArea.x1 = 0;
- availableArea.y1 = 0;
- availableArea.x2 = osdWidth;
- availableArea.y2 = osdHeight;
- ScalePreserveAspect(osd->vidWin, aspect, availableArea);
+ availableArea.x1 = -osdLeft;
+ availableArea.y1 = -osdTop;
+ availableArea.x2 = osdWidth + osdLeft;
+ availableArea.y2 = osdHeight + osdTop;
+ ScalePreserveAspect(osd->vidWin, vidAspect, availableArea);
osd->vidWin.bpp = 12;
}
#endif
diff --git a/displaymenuview.c.orig b/displaymenuview.c.orig
new file mode 100644
index 0000000..abd921c
--- /dev/null
+++ b/displaymenuview.c.orig
@@ -0,0 +1,629 @@
+#include "displaymenuview.h"
+
+cNopacityTimer::cNopacityTimer(cOsd *osd) {
+ this->osd = osd;
+}
+
+cNopacityTimer::~cNopacityTimer(void) {
+ osd->DestroyPixmap(pixmap);
+}
+
+cNopacityDisplayMenuView::cNopacityDisplayMenuView() {
+ diskUsageAlert = 95;
+ pixmapStatus = NULL;
+ pixmapHeaderIcon = NULL;
+}
+
+cNopacityDisplayMenuView::~cNopacityDisplayMenuView(void) {
+ osd->DestroyPixmap(pixmapHeader);
+ osd->DestroyPixmap(pixmapHeaderLogo);
+ osd->DestroyPixmap(pixmapHeaderLabel);
+ osd->DestroyPixmap(pixmapDate);
+ osd->DestroyPixmap(pixmapFooter);
+ osd->DestroyPixmap(pixmapContent);
+ osd->DestroyPixmap(pixmapScrollbar);
+ osd->DestroyPixmap(pixmapDiskUsage);
+ osd->DestroyPixmap(pixmapDiskUsageIcon);
+ osd->DestroyPixmap(pixmapDiskUsageLabel);
+ if (pixmapHeaderIcon)
+ osd->DestroyPixmap(pixmapHeaderIcon);
+
+ delete fontHeader;
+ delete fontDate;
+ delete fontMenuitemLarge;
+ delete fontMenuitemSchedule;
+ delete fontMenuitemDefault;
+ delete fontDiskUsage;
+ delete fontTimers;
+ delete fontTimersHead;
+ delete fontButtons;
+ delete fontMessage;
+#ifdef USE_YAEPG
+ if (config.scalePicture) {
+ tArea availableArea;
+ availableArea.x1 = 0;
+ availableArea.y1 = 0;
+ availableArea.x2 = osdWidth;
+ availableArea.y2 = osdHeight;
+ ScalePreserveAspect(osd->vidWin, 4.0/3.0, availableArea);
+ osd->vidWin.bpp = 12;
+ }
+#endif
+}
+
+cOsd *cNopacityDisplayMenuView::createOsd(void) {
+ osdLeft = cOsd::OsdLeft();
+ osdTop = cOsd::OsdTop();
+ osdWidth = cOsd::OsdWidth();
+ osdHeight = cOsd::OsdHeight();
+ osd = CreateOsd(osdLeft, osdTop, osdWidth, osdHeight);
+ cDevice::PrimaryDevice()->GetVideoSize(screenWidth, screenHeight, aspect);
+ return osd;
+}
+
+void cNopacityDisplayMenuView::SetGeometry(void) {
+ spaceMenu = 5;
+ widthScrollbar = 20;
+ dateWidth = osdWidth * 0.3;
+ headerHeight = osdHeight * config.headerHeight / 100;
+ footerHeight = osdHeight * config.footerHeight / 100;
+ contentHeight = osdHeight - headerHeight - footerHeight;
+ contentWidthNarrow = osdWidth * config.menuWidthNarrow / 100;
+ contentWidthFull = osdWidth - widthScrollbar - spaceMenu;
+ menuItemWidthDefault = contentWidthFull - 4 * spaceMenu;
+ menuItemWidthMain = contentWidthNarrow - 4*spaceMenu;
+ menuItemHeightMain = config.iconHeight + 2;
+ menuItemHeightSchedule = config.menuItemLogoHeight + 2;
+ menuItemHeightDefault = contentHeight / config.numDefaultMenuItems - spaceMenu;
+ diskUsageWidth = diskUsageHeight = timersWidth = osdWidth * config.menuWidthRightItems / 100;
+ buttonsBorder = 10;
+ buttonWidth = (osdWidth / 4) - 2 * buttonsBorder;
+ buttonHeight = footerHeight - 3 * buttonsBorder;
+ messageWidth = 0.8 * osdWidth;
+ messageHeight = 0.1 * osdHeight;
+}
+
+void cNopacityDisplayMenuView::CreatePixmaps(void) {
+ pixmapHeader = osd->CreatePixmap(1, cRect(0, 0, osdWidth, headerHeight));
+ pixmapHeaderLogo = osd->CreatePixmap(-1, cRect(0, 0, config.menuHeaderLogoWidth, config.menuHeaderLogoHeight));
+ pixmapHeaderLabel = osd->CreatePixmap(2, cRect(0, 0, osdWidth - dateWidth, headerHeight));
+ pixmapDate = osd->CreatePixmap(2, cRect(osdWidth - dateWidth, 0, dateWidth, headerHeight));
+ pixmapFooter = osd->CreatePixmap(1, cRect(0, osdHeight-footerHeight, osdWidth, footerHeight));
+ pixmapContent = osd->CreatePixmap(1, cRect(0, headerHeight, osdWidth, contentHeight),
+ cRect(0, 0, osdWidth + contentWidthFull - contentWidthNarrow, contentHeight));
+ pixmapScrollbar = osd->CreatePixmap(2, cRect(contentWidthNarrow, headerHeight + spaceMenu, widthScrollbar, contentHeight - 2 * spaceMenu));
+ pixmapDiskUsage = osd->CreatePixmap(2, cRect(osdWidth - diskUsageWidth - 10, headerHeight + spaceMenu, diskUsageWidth, diskUsageHeight));
+ pixmapDiskUsageIcon = osd->CreatePixmap(3, cRect((osdWidth - diskUsageWidth - 10) + (diskUsageWidth)/8, headerHeight, diskUsageWidth*3/4, diskUsageWidth*3/4));
+ pixmapDiskUsageLabel = osd->CreatePixmap(3, cRect(osdWidth - diskUsageWidth - 10, headerHeight + spaceMenu, diskUsageWidth, diskUsageHeight));
+ pixmapHeaderLogo->Fill(clrTransparent);
+ pixmapHeaderLabel->Fill(clrTransparent);
+ pixmapDiskUsage->Fill(clrTransparent);
+ pixmapDiskUsageIcon->Fill(clrTransparent);
+ pixmapDiskUsageLabel->Fill(clrTransparent);
+ if (config.menuFadeTime) {
+ pixmapHeader->SetAlpha(0);
+ pixmapHeaderLogo->SetAlpha(0);
+ pixmapHeaderLabel->SetAlpha(0);
+ pixmapDate->SetAlpha(0);
+ pixmapFooter->SetAlpha(0);
+ pixmapContent->SetAlpha(0);
+ pixmapScrollbar->SetAlpha(0);
+ pixmapDiskUsage->SetAlpha(0);
+ pixmapDiskUsageIcon->SetAlpha(0);
+ pixmapDiskUsageLabel->SetAlpha(0);
+ }
+}
+
+void cNopacityDisplayMenuView::SetPixmapAlpha(int Alpha) {
+ pixmapHeader->SetAlpha(Alpha);
+ pixmapHeaderLogo->SetAlpha(Alpha);
+ pixmapHeaderLabel->SetAlpha(Alpha);
+ pixmapDate->SetAlpha(Alpha);
+ pixmapContent->SetAlpha(Alpha);
+ pixmapFooter->SetAlpha(Alpha);
+ pixmapScrollbar->SetAlpha(Alpha);
+ pixmapDiskUsage->SetAlpha(Alpha);
+ pixmapDiskUsageIcon->SetAlpha(Alpha);
+ pixmapDiskUsageLabel->SetAlpha(Alpha);
+}
+
+void cNopacityDisplayMenuView::CreateFonts(void) {
+ fontHeader = cFont::CreateFont(config.fontName, headerHeight / 2 + config.fontHeader);
+ fontDate = cFont::CreateFont(config.fontName, headerHeight / 2 + config.fontDate);
+ fontMenuitemLarge = cFont::CreateFont(config.fontName, menuItemHeightMain/3 + 4 + config.fontMenuitemLarge);
+ fontMenuitemSchedule = cFont::CreateFont(config.fontName, menuItemHeightSchedule / 4 + config.fontMenuitemSchedule);
+ fontMenuitemDefault = cFont::CreateFont(config.fontName, menuItemHeightDefault * 2 / 3 + config.fontMenuitemDefault);
+ fontDiskUsage = cFont::CreateFont(config.fontName, (diskUsageHeight/4)/2 - 2 + config.fontDiskUsage);
+ fontTimersHead = cFont::CreateFont(config.fontName, (contentHeight - 3*spaceMenu - diskUsageHeight) / 25 + config.fontTimersHead);
+ fontTimers = cFont::CreateFont(config.fontName, (contentHeight - 3*spaceMenu - diskUsageHeight) / 25 - 6 + config.fontTimers);
+ fontButtons = cFont::CreateFont(config.fontName, buttonHeight*0.8 + config.fontButtons);
+ fontMessage = cFont::CreateFont(config.fontName, messageHeight / 4 + config.fontMessageMenu);
+}
+
+cFont *cNopacityDisplayMenuView::GetMenuItemFont(eMenuCategory menuCat) {
+ switch (menuCat) {
+ case mcUnknown:
+ return fontMenuitemDefault;
+ case mcMain:
+ return fontMenuitemLarge;
+ case mcSchedule:
+ return fontMenuitemSchedule;
+ case mcChannel:
+ return fontMenuitemLarge;
+ default:
+ return fontMenuitemDefault;
+ }
+ return fontMenuitemDefault;
+}
+
+void cNopacityDisplayMenuView::GetMenuItemSize(eMenuCategory menuCat, cPoint *itemSize) {
+ int itemWidth = 0;
+ int itemHeight = 0;
+ switch (menuCat) {
+ case mcUnknown:
+ itemWidth = menuItemWidthDefault;
+ itemHeight = menuItemHeightDefault;
+ break;
+ case mcMain:
+ itemWidth = menuItemWidthMain;
+ itemHeight = menuItemHeightMain;
+ break;
+ case mcSchedule:
+ itemWidth = menuItemWidthMain;
+ itemHeight = menuItemHeightSchedule;
+ break;
+ case mcChannel:
+ itemWidth = menuItemWidthMain;
+ itemHeight = menuItemHeightSchedule;
+ break;
+ default:
+ itemWidth = menuItemWidthDefault;
+ itemHeight = menuItemHeightDefault;
+ break;
+ }
+ itemSize->Set(itemWidth, itemHeight);
+}
+
+int cNopacityDisplayMenuView::GetMaxItems(eMenuCategory menuCat) {
+ int maxItems = 0;
+ switch (menuCat) {
+ case mcUnknown:
+ maxItems = config.numDefaultMenuItems;
+ break;
+ case mcMain:
+ maxItems = contentHeight / (menuItemHeightMain + spaceMenu);
+ break;
+ case mcSchedule:
+ case mcChannel:
+ maxItems = contentHeight / (menuItemHeightSchedule + spaceMenu);
+ break;
+ default:
+ maxItems = config.numDefaultMenuItems;
+ }
+ return maxItems;
+}
+
+int cNopacityDisplayMenuView::GetMenuTop(int numItems, int itemHeight) {
+ return headerHeight + (contentHeight - numItems*(itemHeight + spaceMenu))/2;
+}
+
+void cNopacityDisplayMenuView::SetAvrgFontWidth(void) {
+ avrgFontWidth = fontMenuitemDefault->Width("x")+3;
+}
+
+void cNopacityDisplayMenuView::SetTabs(int Tab1, int Tab2, int Tab3, int Tab4, int Tab5) {
+ mytabs[0] = 1;
+ mytabs[1] = Tab1 ? mytabs[0] + Tab1 : 0;
+ mytabs[2] = Tab2 ? mytabs[1] + Tab2 : 0;
+ mytabs[3] = Tab3 ? mytabs[2] + Tab3 : 0;
+ mytabs[4] = Tab4 ? mytabs[3] + Tab4 : 0;
+ mytabs[5] = Tab5 ? mytabs[4] + Tab5 : 0;
+ if (Tab2) {
+ for (int i = 1; i < cSkinDisplayMenu::MaxTabs; i++)
+ mytabs[i] *= avrgFontWidth;
+ } else if (Tab1) {
+ mytabs[1] = GetEditableWidth();
+ }
+}
+
+int cNopacityDisplayMenuView::GetEditableWidth(void) {
+ return contentWidthFull*0.5;
+}
+
+int cNopacityDisplayMenuView::GetTextAreaWidth(void) {
+ return contentWidthFull - 2*spaceMenu;
+}
+
+const cFont *cNopacityDisplayMenuView::GetTextAreaFont(bool FixedFont) {
+ return cFont::CreateFont(config.fontName, contentHeight / 25 + config.fontDetailView);
+}
+
+void cNopacityDisplayMenuView::CreateBackgroundImages(int *handleBackgrounds, int *handleButtons) {
+ cImageLoader imgLoader;
+ imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidthDefault-2, menuItemHeightDefault-2);
+ handleBackgrounds[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidthDefault-2, menuItemHeightDefault-2);
+ handleBackgrounds[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidthMain-2, menuItemHeightMain-2);
+ handleBackgrounds[2] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidthMain-2, menuItemHeightMain-2);
+ handleBackgrounds[3] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuItem), Theme.Color(clrMenuItemBlend), menuItemWidthMain-2, menuItemHeightSchedule-2);
+ handleBackgrounds[4] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuItemHigh), Theme.Color(clrMenuItemHighBlend), menuItemWidthMain-2, menuItemHeightSchedule-2);
+ handleBackgrounds[5] = cOsdProvider::StoreImage(imgLoader.GetImage());
+
+ tColor lutBg[] = { Theme.Color(clrButtonRed), Theme.Color(clrButtonGreen), Theme.Color(clrButtonYellow), Theme.Color(clrButtonBlue) };
+
+ imgLoader.DrawBackground(Theme.Color(clrMenuBack), lutBg[Setup.ColorKey0], buttonWidth-4, buttonHeight-4);
+ handleButtons[0] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuBack), lutBg[Setup.ColorKey1], buttonWidth-4, buttonHeight-4);
+ handleButtons[1] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuBack), lutBg[Setup.ColorKey2], buttonWidth-4, buttonHeight-4);
+ handleButtons[2] = cOsdProvider::StoreImage(imgLoader.GetImage());
+ imgLoader.DrawBackground(Theme.Color(clrMenuBack), lutBg[Setup.ColorKey3], buttonWidth-4, buttonHeight-4);
+ handleButtons[3] = cOsdProvider::StoreImage(imgLoader.GetImage());
+}
+
+void cNopacityDisplayMenuView::DrawBorderDecoration() {
+ cImageLoader imgLoader;
+ imgLoader.DrawBackground(Theme.Color(clrMenuItemHighBlend), Theme.Color(clrMenuBack), osdWidth, headerHeight);
+ pixmapHeader->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ pixmapFooter->Fill(Theme.Color(clrMenuBack));
+
+ int borderWidth = 2;
+ int radius = 10;
+
+ pixmapContent->Fill(clrTransparent);
+ pixmapContent->DrawRectangle(cRect(0, 0, contentWidthFull-radius, contentHeight), Theme.Color(clrMenuBack));
+ pixmapContent->DrawRectangle(cRect(contentWidthFull, 0, osdWidth - contentWidthNarrow, borderWidth), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(contentWidthFull, contentHeight - borderWidth, osdWidth - contentWidthNarrow, borderWidth), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(contentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBack));
+ pixmapContent->DrawEllipse(cRect(contentWidthFull - radius, 0, radius, radius), Theme.Color(clrMenuBorder),2);
+ pixmapContent->DrawEllipse(cRect(contentWidthFull - radius + borderWidth, borderWidth, radius-borderWidth, radius-borderWidth), clrTransparent, 2);
+ pixmapContent->DrawRectangle(cRect(contentWidthFull-radius, radius, borderWidth, contentHeight - 2*radius), Theme.Color(clrMenuBorder));
+ pixmapContent->DrawRectangle(cRect(contentWidthFull - radius, contentHeight - radius, radius, radius), Theme.Color(clrMenuBack));
+ pixmapContent->DrawEllipse(cRect(contentWidthFull - radius, contentHeight - radius, radius, radius), Theme.Color(clrMenuBorder),3);
+ pixmapContent->DrawEllipse(cRect(contentWidthFull - radius + borderWidth, contentHeight - radius, radius-borderWidth, radius-borderWidth), clrTransparent, 3);
+
+}
+
+void cNopacityDisplayMenuView::AdjustContentBackground(bool contentNarrow, bool contentNarrowLast) {
+ if (contentNarrow) {
+ pixmapContent->SetDrawPortPoint(cPoint(contentWidthNarrow - contentWidthFull, 0));
+#ifdef USE_YAEPG
+ if (config.scalePicture) {
+ tArea availableArea;
+ availableArea.x1 = osdLeft + contentWidthNarrow;
+ availableArea.y1 = osdTop + headerHeight;
+ availableArea.x2 = contentWidthFull;
+ availableArea.y2 = availableArea.y1 + contentHeight;
+ ScalePreserveAspect(osd->vidWin, aspect, availableArea);
+ osd->vidWin.bpp = 12;
+ }
+#endif
+ } else {
+ pixmapContent->SetDrawPortPoint(cPoint(0, 0));
+#ifdef USE_YAEPG
+ if (config.scalePicture) {
+ tArea availableArea;
+ availableArea.x1 = 0;
+ availableArea.y1 = 0;
+ availableArea.x2 = osdWidth;
+ availableArea.y2 = osdHeight;
+ ScalePreserveAspect(osd->vidWin, aspect, availableArea);
+ osd->vidWin.bpp = 12;
+ }
+#endif
+ }
+ if (contentNarrow != contentNarrowLast) {
+ osd->DestroyPixmap(pixmapScrollbar);
+ int contentWidth = (contentNarrow)?contentWidthNarrow:contentWidthFull;
+ pixmapScrollbar = osd->CreatePixmap(2, cRect(contentWidth , headerHeight + spaceMenu, widthScrollbar, osdHeight - headerHeight - footerHeight - 2*spaceMenu));
+ }
+}
+
+void cNopacityDisplayMenuView::ScalePreserveAspect(tArea & videoWindowDest, const double & videoAspect, const tArea & availableArea) {
+ videoWindowDest.x1 = availableArea.x1;
+ videoWindowDest.x2 = availableArea.x2;
+ videoWindowDest.y1 = availableArea.y1;
+ videoWindowDest.y2 = availableArea.y2;
+ if (availableArea.Height() == 0) {
+ videoWindowDest.bpp = 0; // just for safety
+ return;
+ }
+ double availableAspect = double(availableArea.Width())/double(availableArea.Height());
+ if (videoAspect < availableAspect) {
+ int offset = floor(double(availableArea.Width() - availableArea.Height() * videoAspect)/2);
+ videoWindowDest.x1 += offset;
+ videoWindowDest.x2 -= offset;
+ } else {
+ int offset = floor(double(availableArea.Height() - availableArea.Width() / videoAspect)/2);
+ videoWindowDest.y1 += offset;
+ videoWindowDest.y2 -= offset;
+ }
+}
+
+void cNopacityDisplayMenuView::DrawHeaderLogo(void) {
+ cImageLoader imgLoader;
+ if (imgLoader.LoadIcon("vdrlogo", config.menuHeaderLogoWidth, config.menuHeaderLogoHeight)) {
+ pixmapHeaderLogo->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ }
+}
+
+int cNopacityDisplayMenuView::ShowHeaderLogo(bool show) {
+ if (show) {
+ pixmapHeaderLogo->SetLayer(2);
+ } else {
+ pixmapHeaderLogo->SetLayer(-1);
+ }
+ return config.menuHeaderLogoWidth + spaceMenu;
+}
+
+int cNopacityDisplayMenuView::DrawHeaderIcon(eMenuCategory menuCat) {
+ cString icon;
+ bool drawIcon = true;
+ switch (menuCat) {
+ case mcSchedule:
+ icon = "Schedule";
+ break;
+ case mcChannel:
+ icon = "Channels";
+ break;
+ case mcTimer:
+ icon = "Timers";
+ break;
+ case mcRecording:
+ icon = "Recordings";
+ break;
+ case mcSetup:
+ icon = "Setup";
+ break;
+ case mcCommand:
+ icon = "Commands";
+ break;
+ default:
+ drawIcon = false;
+ }
+
+ int left = 0;
+ if (drawIcon) {
+ pixmapHeaderIcon = osd->CreatePixmap(2, cRect(0, 0, config.headerIconHeight, config.headerIconHeight));
+ pixmapHeaderIcon->Fill(clrTransparent);
+ cImageLoader imgLoader;
+ if (imgLoader.LoadIcon(*icon, config.headerIconHeight)) {
+ pixmapHeaderIcon->DrawImage(cPoint(0,0), imgLoader.GetImage());
+ left = config.headerIconHeight + spaceMenu;
+ }
+ }
+ return left;
+}
+
+int cNopacityDisplayMenuView::ShowHeaderIconChannelLogo(const char *Title) {
+ pixmapHeaderIcon = osd->CreatePixmap(2, cRect(0, 0, config.menuItemLogoWidth, config.menuItemLogoHeight));
+ pixmapHeaderIcon->Fill(clrTransparent);
+ std::string channel = Title;
+ std::string remove = trVDR("Schedule");
+ remove.append(" - ");
+ channel.erase(0, remove.length());
+ cImageLoader imgLoader;
+ int left = 0;
+ if (imgLoader.LoadLogo(channel.c_str(), config.menuItemLogoWidth, config.menuItemLogoHeight)) {
+ pixmapHeaderIcon->DrawImage(cPoint(0, 0), imgLoader.GetImage());
+ left = config.menuItemLogoWidth + spaceMenu;
+ }
+ return left;
+}
+
+void cNopacityDisplayMenuView::DestroyHeaderIcon(void) {
+ if (pixmapHeaderIcon) {
+ osd->DestroyPixmap(pixmapHeaderIcon);
+ pixmapHeaderIcon = NULL;
+ }
+}
+
+void cNopacityDisplayMenuView::DrawHeaderLabel(int left, cString label) {
+ pixmapHeaderLabel->Fill(clrTransparent);
+ pixmapHeaderLabel->DrawText(cPoint(left, ((headerHeight - 10) - fontHeader->Height()) / 2), *label, Theme.Color(clrMenuFontHeader), clrTransparent, fontHeader);
+
+}
+
+void cNopacityDisplayMenuView::DrawDate(bool initial) {
+ cString date = DayDateTime();
+ if (initial || strcmp(date, lastDate)) {
+ pixmapDate->Fill(clrTransparent);
+ int dateW = fontDate->Width(date);
+ pixmapDate->DrawText(cPoint(dateWidth - dateW - 2*spaceMenu, (headerHeight - fontDate->Height()) / 2), date, Theme.Color(clrMenuFontDate), clrTransparent, fontDate);
+ lastDate = date;
+ }
+}
+
+void cNopacityDisplayMenuView::DrawDiskUsage(void) {
+ int iconWidth = diskUsageWidth * 3/4;
+ int DiskUsage = cVideoDiskUsage::UsedPercent();
+ bool DiskAlert = DiskUsage > diskUsageAlert;
+ tColor bgColor = DiskAlert ? Theme.Color(clrDiskAlert) : Theme.Color(clrMenuBack);
+ pixmapDiskUsage->Fill(Theme.Color(clrMenuBorder));
+ pixmapDiskUsage->DrawRectangle(cRect(2,2,diskUsageWidth-4, diskUsageHeight-4), bgColor);
+ cImageLoader imgLoader;
+ if (imgLoader.LoadIcon("DiskUsage", iconWidth)) {
+ cImage icon = imgLoader.GetImage();
+ pixmapDiskUsageIcon->DrawImage(cPoint(0,0), icon);
+ }
+ pixmapDiskUsageLabel->Fill(clrTransparent);
+ cString usage = cString::sprintf("%s: %d%%", tr("Disc"), DiskUsage);
+ cString rest = cString::sprintf("%02d:%02dh %s", cVideoDiskUsage::FreeMinutes() / 60, cVideoDiskUsage::FreeMinutes() % 60, tr("free"));
+ pixmapDiskUsageLabel->DrawText(cPoint((diskUsageWidth - fontDiskUsage->Width(*usage))/2, diskUsageHeight - 2*fontDiskUsage->Height() - spaceMenu), *usage, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontDiskUsage);
+ pixmapDiskUsageLabel->DrawText(cPoint((diskUsageWidth - fontDiskUsage->Width(*rest))/2, diskUsageHeight - fontDiskUsage->Height() - spaceMenu), *rest, Theme.Color(clrMenuFontDiscUsage), clrTransparent, fontDiskUsage);
+ pixmapDiskUsage->SetLayer(2);
+ pixmapDiskUsageIcon->SetLayer(3);
+ pixmapDiskUsageLabel->SetLayer(4);
+}
+
+void cNopacityDisplayMenuView::ShowDiskUsage(bool show) {
+ if (show) {
+ pixmapDiskUsage->SetLayer(2);
+ pixmapDiskUsageIcon->SetLayer(3);
+ pixmapDiskUsageLabel->SetLayer(4);
+ } else {
+ pixmapDiskUsage->SetLayer(-1);
+ pixmapDiskUsageIcon->SetLayer(-1);
+ pixmapDiskUsageLabel->SetLayer(-1);
+ }
+}
+
+void cNopacityDisplayMenuView::DrawButton(const char *text, int handleImage, tColor borderColor, int num) {
+ int top = 2*buttonsBorder;
+ int left = num * buttonWidth + (2*num + 1) * buttonsBorder;
+ pixmapFooter->DrawRectangle(cRect(left, top, buttonWidth, buttonHeight), borderColor);
+ pixmapFooter->DrawImage(cPoint(left+2, top+2), handleImage);
+ int textWidth = fontButtons->Width(text);
+ int textHeight = fontButtons->Height();
+ pixmapFooter->DrawText(cPoint(left + (buttonWidth-textWidth)/2, top + (buttonHeight-textHeight)/2), text, Theme.Color(clrMenuFontButton), clrTransparent, fontButtons);
+}
+
+void cNopacityDisplayMenuView::ClearButton(int num) {
+ int top = 2*buttonsBorder;
+ int left = num * buttonWidth + (2*num + 1) * buttonsBorder;
+ pixmapFooter->DrawRectangle(cRect(left, top, buttonWidth, buttonHeight), Theme.Color(clrMenuBack));
+}
+
+int cNopacityDisplayMenuView::GetTimersInitHeight(void) {
+ return headerHeight + diskUsageHeight + 2*spaceMenu;
+}
+
+int cNopacityDisplayMenuView::GetTimersMaxHeight(void) {
+ return headerHeight + contentHeight;
+}
+
+cNopacityTimer *cNopacityDisplayMenuView::DrawTimer(const cTimer *Timer, int y) {
+ const cChannel *Channel = Timer->Channel();
+ const cEvent *Event = Timer->Event();
+ cString channelName(""), title("");
+ if (Channel) {
+ channelName = Channel->Name();
+ }
+ if (Event) {
+ title = Event->Title();
+ }
+ cTextWrapper titleLines;
+ titleLines.Set(*title, fontTimers, timersWidth-10);
+
+ cString Date;
+ if (Timer->Recording()) {
+ Date = cString::sprintf("-%s", *TimeString(Timer->StopTime()));
+ } else {
+ time_t Now = time(NULL);
+ cString Today = WeekDayName(Now);
+ cString Time = TimeString(Timer->StartTime());
+ cString Day = WeekDayName(Timer->StartTime());
+ if (Timer->StartTime() > Now + 6 * SECSINDAY)
+ Date = DayDateTime(Timer->StartTime());
+ else if (strcmp(Day, Today) != 0)
+ Date = cString::sprintf("%s %s", *Day, *Time);
+ else
+ Date = Time;
+ if (Timer->Flags() & tfVps)
+ Date = cString::sprintf("VPS %s", *Date);
+ }
+
+ int numLines = titleLines.Lines();
+ int lineHeight = fontTimers->Height();
+ int timerHeight = (numLines + 2)*lineHeight + spaceMenu;
+
+ cNopacityTimer *t = new cNopacityTimer(osd);
+ t->pixmap = osd->CreatePixmap(2, cRect(osdWidth - timersWidth - 10, y, timersWidth, timerHeight));
+
+ cImageLoader imgLoader;
+ if(Timer->Recording()) {
+ t->pixmap->Fill(Theme.Color(clrDiskAlert));
+ imgLoader.DrawBackground(Theme.Color(clrDiskAlert), Theme.Color(clrMenuItemHigh), timersWidth-2, timerHeight-2);
+ t->pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
+ } else {
+ t->pixmap->Fill(Theme.Color(clrMenuBorder));
+ imgLoader.DrawBackground(Theme.Color(clrMenuItemHighBlend), Theme.Color(clrMenuItemHigh), timersWidth-2, timerHeight-2);
+ t->pixmap->DrawImage(cPoint(1,1), imgLoader.GetImage());
+ }
+ t->pixmap->DrawText(cPoint(5, 0), *Date, Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontTimersHead);
+ t->pixmap->DrawText(cPoint(5, lineHeight+2), *channelName, Theme.Color(clrMenuFontTimersHeader), clrTransparent, fontTimers);
+ int yStart = 2*lineHeight + 3;
+ for (int line=0; line<numLines; line++)
+ t->pixmap->DrawText(cPoint(5, yStart+line*(lineHeight-2)), titleLines.GetLine(line), Theme.Color(clrMenuFontTimers), clrTransparent, fontTimers);
+
+ return t;
+}
+
+void cNopacityDisplayMenuView::DrawScrollbar(double Height, double Offset) {
+ int totalHeight = pixmapScrollbar->ViewPort().Height() - 6;
+ int height = Height * totalHeight;
+ int offset = Offset * totalHeight;
+ pixmapScrollbar->Fill(Theme.Color(clrMenuScrollBar));
+ pixmapScrollbar->DrawRectangle(cRect(2,2,widthScrollbar-4,totalHeight+2), Theme.Color(clrMenuScrollBarBack));
+ pixmapScrollbar->DrawRectangle(cRect(3,3 + offset,widthScrollbar-6,height), Theme.Color(clrMenuScrollBar));
+}
+
+void cNopacityDisplayMenuView::ClearScrollbar(void) {
+ pixmapScrollbar->Fill(clrTransparent);
+}
+
+
+void cNopacityDisplayMenuView::DrawMessage(eMessageType Type, const char *Text) {
+ tColor col = Theme.Color(clrMessageStatus);
+ switch (Type) {
+ case mtStatus:
+ col = Theme.Color(clrMessageStatus);
+ break;
+ case mtInfo:
+ col = Theme.Color(clrMessageInfo);
+ break;
+ case mtWarning:
+ col = Theme.Color(clrMessageWarning);
+ break;
+ case mtError:
+ col = Theme.Color(clrMessageError);
+ break;
+ }
+ if (pixmapStatus) {
+ ClearMessage();
+ }
+ pixmapStatus = osd->CreatePixmap(5, cRect(0.1*osdWidth, 0.8*osdHeight, messageWidth, messageHeight));
+ pixmapStatus->Fill(col);
+ cImageLoader imgLoader;
+ imgLoader.DrawBackground2(Theme.Color(clrMenuBack), col, messageWidth-2, messageHeight-2);
+ pixmapStatus->DrawImage(cPoint(1, 1), imgLoader.GetImage());
+ int textWidth = fontMessage->Width(Text);
+ pixmapStatus->DrawText(cPoint((messageWidth - textWidth) / 2, (messageHeight - fontMessage->Height()) / 2), Text, Theme.Color(clrMenuFontMessages), clrTransparent, fontMessage);
+}
+
+void cNopacityDisplayMenuView::ClearMessage(void) {
+ if (pixmapStatus) {
+ osd->DestroyPixmap(pixmapStatus);
+ pixmapStatus = NULL;
+ }
+}
+
+void cNopacityDisplayMenuView::SetDetailViewSize(eDetailViewType detailViewType, cNopacityMenuDetailView *detailView) {
+ int width = 0;
+ int height = 0;
+ int top = 0;
+ int contentBorder = 20;
+ int detailHeaderHeight = 0;
+
+ switch (detailViewType) {
+ case dvEvent:
+ detailHeaderHeight = max(config.detailViewLogoHeight, config.epgImageHeight)+4;
+ break;
+ case dvRecording:
+ detailHeaderHeight = contentHeight/5;
+ break;
+ case dvText:
+ detailHeaderHeight = 0;
+ break;
+ default:
+ break;
+ }
+ width = contentWidthFull - 2*spaceMenu;
+ height = contentHeight;
+ top = headerHeight;
+ detailView->SetGeometry(width, height, top, contentBorder, detailHeaderHeight);
+} \ No newline at end of file
diff --git a/displaymenuview.h b/displaymenuview.h
index 28ec7ec..bd621ca 100644
--- a/displaymenuview.h
+++ b/displaymenuview.h
@@ -43,8 +43,8 @@ class cNopacityDisplayMenuView {
cFont *fontMessage;
int osdWidth, osdHeight;
int osdLeft, osdTop;
- int screenWidth, screenHeight;
- double aspect;
+ int vidWidth, vidHeight;
+ double vidAspect;
int widthScrollbar;
int dateWidth;
int headerHeight, footerHeight, contentHeight;
diff --git a/libvdr-skinnopacity.so b/libvdr-skinnopacity.so
new file mode 100755
index 0000000..799aceb
--- /dev/null
+++ b/libvdr-skinnopacity.so
Binary files differ
diff --git a/po/de_DE.mo b/po/de_DE.mo
new file mode 100644
index 0000000..db04d25
--- /dev/null
+++ b/po/de_DE.mo
Binary files differ
diff --git a/po/skinnopacity.pot b/po/skinnopacity.pot
new file mode 100644
index 0000000..dc32625
--- /dev/null
+++ b/po/skinnopacity.pot
@@ -0,0 +1,207 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: vdr-skinnopacity 0.0.3\n"
+"Report-Msgid-Bugs-To: <see README>\n"
+"POT-Creation-Date: 2012-11-28 19:40+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Font"
+msgstr ""
+
+msgid "VDR Menu"
+msgstr ""
+
+msgid "Channel Switching"
+msgstr ""
+
+msgid "Replay"
+msgstr ""
+
+msgid "Audio Tracks"
+msgstr ""
+
+msgid "Messages"
+msgstr ""
+
+msgid "Volume"
+msgstr ""
+
+msgid "Fade-In Time in ms (Zero for switching off fading)"
+msgstr ""
+
+msgid "Scale Video size to fit into menu window"
+msgstr ""
+
+msgid "Width of narrow Menu Bar (Percent of OSD Width)"
+msgstr ""
+
+msgid "Width of Disc Usage and Timers Display (Percent of OSD Width)"
+msgstr ""
+
+msgid "Header Height (Percent of OSD Height)"
+msgstr ""
+
+msgid "Footer Height (Percent of OSD Height)"
+msgstr ""
+
+msgid "Number of Default Menu Entries per Page"
+msgstr ""
+
+msgid "Icon Size (Square Main Menu Icons)"
+msgstr ""
+
+msgid "Header Icon Size (Square Header Menu Icons)"
+msgstr ""
+
+msgid "Channel Logo Width (on the Menu Buttons)"
+msgstr ""
+
+msgid "Channel Logo Height (on the Menu Buttons)"
+msgstr ""
+
+msgid "Main Menu Header Logo Width"
+msgstr ""
+
+msgid "Main Menu Header Logo Height"
+msgstr ""
+
+msgid "Detail EPG View Logo Width"
+msgstr ""
+
+msgid "Detail EPG View Logo Height"
+msgstr ""
+
+msgid "Detail EPG View EPG Image Width"
+msgstr ""
+
+msgid "Detail EPG View EPG Image Height"
+msgstr ""
+
+msgid "Adjust Font Size - Header"
+msgstr ""
+
+msgid "Adjust Font Size - Date"
+msgstr ""
+
+msgid "Adjust Font Size - Large Menu Item"
+msgstr ""
+
+msgid "Adjust Font Size - Schedule Menu Item"
+msgstr ""
+
+msgid "Adjust Font Size - Default Menu Item"
+msgstr ""
+
+msgid "Adjust Font Size - Disc Usage"
+msgstr ""
+
+msgid "Adjust Font Size - Timers Header"
+msgstr ""
+
+msgid "Adjust Font Size - Timers Title"
+msgstr ""
+
+msgid "Adjust Font Size - Color Buttons"
+msgstr ""
+
+msgid "Adjust Font Size - Messages"
+msgstr ""
+
+msgid "Adjust Font Size - Detail View Text"
+msgstr ""
+
+msgid "Adjust Font Size - Detail View Header"
+msgstr ""
+
+msgid "Adjust Font Size - Detail View Header Large"
+msgstr ""
+
+msgid "Hight of Channel Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Left & Right Border Width"
+msgstr ""
+
+msgid "Bottom Border Height"
+msgstr ""
+
+msgid "Channel Logo Width"
+msgstr ""
+
+msgid "Channel Logo Height"
+msgstr ""
+
+msgid "Channel Logo Border"
+msgstr ""
+
+msgid "Display Signal Strength & Quality"
+msgstr ""
+
+msgid "Screen Resolution Icon Size"
+msgstr ""
+
+msgid "Adjust Font Size - EPG Text"
+msgstr ""
+
+msgid "Adjust Font Size - EPG Infotext"
+msgstr ""
+
+msgid "Hight of Replay Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Adjust Font Size - Text"
+msgstr ""
+
+msgid "Width of Tracks Display (Percent of OSD Width)"
+msgstr ""
+
+msgid "Hight of Tracks Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Position (0: bot. center, 1: bot. left, ... , 7: bot. right)"
+msgstr ""
+
+msgid "Border Top / Bottom"
+msgstr ""
+
+msgid "Border Left / Right"
+msgstr ""
+
+msgid "Adjust Font Size - Buttons"
+msgstr ""
+
+msgid "Width of Message Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Hight of Message Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Adjust Font Size"
+msgstr ""
+
+msgid "Volume Display"
+msgstr ""
+
+msgid "Width of Volume Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Hight of Volume Display (Percent of OSD Height)"
+msgstr ""
+
+msgid "Disc"
+msgstr ""
+
+msgid "free"
+msgstr ""
diff --git a/skinnopacity.o b/skinnopacity.o
new file mode 100644
index 0000000..a10c1b2
--- /dev/null
+++ b/skinnopacity.o
Binary files differ