From 4e46d2bb3bbcaa72bc106170d9a7dd0ec77ddd0d Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Thu, 10 Sep 2015 14:18:38 +0200 Subject: [PATCH] The width and height of the OSD are now limited to the actual maximum dimensions of the output device --- HISTORY | 2 ++ osd.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/HISTORY b/HISTORY index 85bd1709..bb2919f0 100644 --- a/HISTORY +++ b/HISTORY @@ -8818,3 +8818,5 @@ Video Disk Recorder Revision History - Fixed a possible stack overflow in cListBase::Sort() (thanks to Oliver Endriss). - Changed the description of the --chartab option in the INSTALL file to refer to "DVB SI table strings" instead of "EPG data". +- The width and height of the OSD are now limited to the actual maximum dimensions + of the output device, taking into account the top and left offset. diff --git a/osd.c b/osd.c index 579c54db..524700ae 100644 --- a/osd.c +++ b/osd.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.c 4.2 2015/03/25 08:57:05 kls Exp $ + * $Id: osd.c 4.3 2015/09/10 14:12:06 kls Exp $ */ #include "osd.h" @@ -2042,8 +2042,8 @@ void cOsdProvider::UpdateOsdSize(bool Force) if (Width != oldWidth || Height != oldHeight || !DoubleEqual(Aspect, oldAspect) || Force) { Setup.OSDLeft = int(round(Width * Setup.OSDLeftP)); Setup.OSDTop = int(round(Height * Setup.OSDTopP)); - Setup.OSDWidth = int(round(Width * Setup.OSDWidthP)) & ~0x07; // OSD width must be a multiple of 8 - Setup.OSDHeight = int(round(Height * Setup.OSDHeightP)); + Setup.OSDWidth = min(Width - Setup.OSDLeft, int(round(Width * Setup.OSDWidthP))) & ~0x07; // OSD width must be a multiple of 8 + Setup.OSDHeight = min(Height - Setup.OSDTop, int(round(Height * Setup.OSDHeightP))); Setup.OSDAspect = Aspect; Setup.FontOsdSize = int(round(Height * Setup.FontOsdSizeP)); Setup.FontFixSize = int(round(Height * Setup.FontFixSizeP));