mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Added cOsdProvider::OsdSizeChanged()
This commit is contained in:
		@@ -3271,6 +3271,7 @@ Thomas Reufer <thomas@reufer.ch>
 | 
				
			|||||||
 for implementing cOsd::DrawScaledBitmap()
 | 
					 for implementing cOsd::DrawScaledBitmap()
 | 
				
			||||||
 for adding handling for DTS audio tracks to cPatPmtParser::ParsePmt()
 | 
					 for adding handling for DTS audio tracks to cPatPmtParser::ParsePmt()
 | 
				
			||||||
 for adding support for PGS subtitles
 | 
					 for adding support for PGS subtitles
 | 
				
			||||||
 | 
					 for adding cOsdProvider::OsdSizeChanged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Eike Sauer <EikeSauer@t-online.de>
 | 
					Eike Sauer <EikeSauer@t-online.de>
 | 
				
			||||||
 for reporting a problem with channels that need more than 5 TS packets for detecting
 | 
					 for reporting a problem with channels that need more than 5 TS packets for detecting
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							@@ -8376,3 +8376,6 @@ Video Disk Recorder Revision History
 | 
				
			|||||||
- Plugins can now implement the function SetMenuSortMode() in their skin objects
 | 
					- Plugins can now implement the function SetMenuSortMode() in their skin objects
 | 
				
			||||||
  derived from cSkinDisplayMenu, to get informed about the currently used sort
 | 
					  derived from cSkinDisplayMenu, to get informed about the currently used sort
 | 
				
			||||||
  mode, if applicable (suggested by Martin Schirrmacher).
 | 
					  mode, if applicable (suggested by Martin Schirrmacher).
 | 
				
			||||||
 | 
					- Added cOsdProvider::OsdSizeChanged(), which plugins that implement an output device
 | 
				
			||||||
 | 
					  can call to signal a change in the OSD that requires a redraw of the currently
 | 
				
			||||||
 | 
					  displayed object (thanks to Thomas Reufer).
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								menu.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								menu.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
 * See the main source file 'vdr.c' for copyright information and
 | 
					 * See the main source file 'vdr.c' for copyright information and
 | 
				
			||||||
 * how to reach the author.
 | 
					 * how to reach the author.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * $Id: menu.c 3.27 2015/01/15 10:31:41 kls Exp $
 | 
					 * $Id: menu.c 3.28 2015/01/15 11:14:21 kls Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "menu.h"
 | 
					#include "menu.h"
 | 
				
			||||||
@@ -4033,6 +4033,7 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched)
 | 
				
			|||||||
  displayChannel = Skins.Current()->DisplayChannel(withInfo);
 | 
					  displayChannel = Skins.Current()->DisplayChannel(withInfo);
 | 
				
			||||||
  number = 0;
 | 
					  number = 0;
 | 
				
			||||||
  timeout = Switched || Setup.TimeoutRequChInfo;
 | 
					  timeout = Switched || Setup.TimeoutRequChInfo;
 | 
				
			||||||
 | 
					  cOsdProvider::OsdSizeChanged(osdState); // just to get the current state
 | 
				
			||||||
  positioner = NULL;
 | 
					  positioner = NULL;
 | 
				
			||||||
  channel = Channels.GetByNumber(Number);
 | 
					  channel = Channels.GetByNumber(Number);
 | 
				
			||||||
  lastPresent = lastFollowing = NULL;
 | 
					  lastPresent = lastFollowing = NULL;
 | 
				
			||||||
@@ -4118,6 +4119,10 @@ cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
eOSState cDisplayChannel::ProcessKey(eKeys Key)
 | 
					eOSState cDisplayChannel::ProcessKey(eKeys Key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  if (cOsdProvider::OsdSizeChanged(osdState)) {
 | 
				
			||||||
 | 
					     delete displayChannel;
 | 
				
			||||||
 | 
					     displayChannel = Skins.Current()->DisplayChannel(withInfo);
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
  cChannel *NewChannel = NULL;
 | 
					  cChannel *NewChannel = NULL;
 | 
				
			||||||
  if (Key != kNone)
 | 
					  if (Key != kNone)
 | 
				
			||||||
     lastTime.Set();
 | 
					     lastTime.Set();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								menu.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								menu.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
 * See the main source file 'vdr.c' for copyright information and
 | 
					 * See the main source file 'vdr.c' for copyright information and
 | 
				
			||||||
 * how to reach the author.
 | 
					 * how to reach the author.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * $Id: menu.h 3.5 2013/12/25 12:06:03 kls Exp $
 | 
					 * $Id: menu.h 3.6 2015/01/15 11:12:57 kls Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __MENU_H
 | 
					#ifndef __MENU_H
 | 
				
			||||||
@@ -121,6 +121,7 @@ private:
 | 
				
			|||||||
  cTimeMs lastTime;
 | 
					  cTimeMs lastTime;
 | 
				
			||||||
  int number;
 | 
					  int number;
 | 
				
			||||||
  bool timeout;
 | 
					  bool timeout;
 | 
				
			||||||
 | 
					  int osdState;
 | 
				
			||||||
  const cPositioner *positioner;
 | 
					  const cPositioner *positioner;
 | 
				
			||||||
  cChannel *channel;
 | 
					  cChannel *channel;
 | 
				
			||||||
  const cEvent *lastPresent;
 | 
					  const cEvent *lastPresent;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								osd.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								osd.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
 * See the main source file 'vdr.c' for copyright information and
 | 
					 * See the main source file 'vdr.c' for copyright information and
 | 
				
			||||||
 * how to reach the author.
 | 
					 * how to reach the author.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * $Id: osd.c 3.3 2015/01/04 15:46:39 kls Exp $
 | 
					 * $Id: osd.c 3.4 2015/01/15 11:20:56 kls Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "osd.h"
 | 
					#include "osd.h"
 | 
				
			||||||
@@ -1978,6 +1978,7 @@ int cOsdProvider::oldWidth = 0;
 | 
				
			|||||||
int cOsdProvider::oldHeight = 0;
 | 
					int cOsdProvider::oldHeight = 0;
 | 
				
			||||||
double cOsdProvider::oldAspect = 1.0;
 | 
					double cOsdProvider::oldAspect = 1.0;
 | 
				
			||||||
cImage *cOsdProvider::images[MAXOSDIMAGES] = { NULL };
 | 
					cImage *cOsdProvider::images[MAXOSDIMAGES] = { NULL };
 | 
				
			||||||
 | 
					int cOsdProvider::osdState = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cOsdProvider::cOsdProvider(void)
 | 
					cOsdProvider::cOsdProvider(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -2015,6 +2016,7 @@ void cOsdProvider::UpdateOsdSize(bool Force)
 | 
				
			|||||||
  int Width;
 | 
					  int Width;
 | 
				
			||||||
  int Height;
 | 
					  int Height;
 | 
				
			||||||
  double Aspect;
 | 
					  double Aspect;
 | 
				
			||||||
 | 
					  cMutexLock MutexLock(&cOsd::mutex);
 | 
				
			||||||
  cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
 | 
					  cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
 | 
				
			||||||
  if (Width != oldWidth || Height != oldHeight || !DoubleEqual(Aspect, oldAspect) || Force) {
 | 
					  if (Width != oldWidth || Height != oldHeight || !DoubleEqual(Aspect, oldAspect) || Force) {
 | 
				
			||||||
     Setup.OSDLeft = int(round(Width * Setup.OSDLeftP));
 | 
					     Setup.OSDLeft = int(round(Width * Setup.OSDLeftP));
 | 
				
			||||||
@@ -2032,9 +2034,18 @@ void cOsdProvider::UpdateOsdSize(bool Force)
 | 
				
			|||||||
     oldHeight = Height;
 | 
					     oldHeight = Height;
 | 
				
			||||||
     oldAspect = Aspect;
 | 
					     oldAspect = Aspect;
 | 
				
			||||||
     dsyslog("OSD size changed to %dx%d @ %g", Width, Height, Aspect);
 | 
					     dsyslog("OSD size changed to %dx%d @ %g", Width, Height, Aspect);
 | 
				
			||||||
 | 
					     osdState++;
 | 
				
			||||||
     }
 | 
					     }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool cOsdProvider::OsdSizeChanged(int &State)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  cMutexLock MutexLock(&cOsd::mutex);
 | 
				
			||||||
 | 
					  bool Result = osdState != State;
 | 
				
			||||||
 | 
					  State = osdState;
 | 
				
			||||||
 | 
					  return Result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool cOsdProvider::SupportsTrueColor(void)
 | 
					bool cOsdProvider::SupportsTrueColor(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (osdProvider) {
 | 
					  if (osdProvider) {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								osd.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								osd.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
 * See the main source file 'vdr.c' for copyright information and
 | 
					 * See the main source file 'vdr.c' for copyright information and
 | 
				
			||||||
 * how to reach the author.
 | 
					 * how to reach the author.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * $Id: osd.h 3.4 2015/01/14 10:50:55 kls Exp $
 | 
					 * $Id: osd.h 3.5 2015/01/15 11:23:52 kls Exp $
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef __OSD_H
 | 
					#ifndef __OSD_H
 | 
				
			||||||
@@ -949,6 +949,7 @@ private:
 | 
				
			|||||||
  static int oldHeight;
 | 
					  static int oldHeight;
 | 
				
			||||||
  static double oldAspect;
 | 
					  static double oldAspect;
 | 
				
			||||||
  static cImage *images[MAXOSDIMAGES];
 | 
					  static cImage *images[MAXOSDIMAGES];
 | 
				
			||||||
 | 
					  static int osdState;
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  virtual cOsd *CreateOsd(int Left, int Top, uint Level) = 0;
 | 
					  virtual cOsd *CreateOsd(int Left, int Top, uint Level) = 0;
 | 
				
			||||||
      ///< Returns a pointer to a newly created cOsd object, which will be located
 | 
					      ///< Returns a pointer to a newly created cOsd object, which will be located
 | 
				
			||||||
@@ -985,6 +986,12 @@ public:
 | 
				
			|||||||
      ///< font sizes accordingly. If Force is true, all settings are recalculated,
 | 
					      ///< font sizes accordingly. If Force is true, all settings are recalculated,
 | 
				
			||||||
      ///< even if the video resolution hasn't changed since the last call to
 | 
					      ///< even if the video resolution hasn't changed since the last call to
 | 
				
			||||||
      ///< this function.
 | 
					      ///< this function.
 | 
				
			||||||
 | 
					  static bool OsdSizeChanged(int &State);
 | 
				
			||||||
 | 
					      ///< Checks if the OSD size has changed and a currently displayed OSD needs to
 | 
				
			||||||
 | 
					      ///< be redrawn. An internal reference value is incremented on every size change
 | 
				
			||||||
 | 
					      ///< and is compared against State when calling the method.
 | 
				
			||||||
 | 
					      ///< OsdSizeChanged() can be called with an uninitialized State to just get
 | 
				
			||||||
 | 
					      ///< the current value of State.
 | 
				
			||||||
  static bool SupportsTrueColor(void);
 | 
					  static bool SupportsTrueColor(void);
 | 
				
			||||||
      ///< Returns true if the current OSD provider is able to handle a true color OSD.
 | 
					      ///< Returns true if the current OSD provider is able to handle a true color OSD.
 | 
				
			||||||
  static int StoreImage(const cImage &Image);
 | 
					  static int StoreImage(const cImage &Image);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user