mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Added cOsdProvider::OsdSizeChanged()
This commit is contained in:
parent
be9a6de0ef
commit
66c65beea7
@ -3271,6 +3271,7 @@ Thomas Reufer <thomas@reufer.ch>
|
||||
for implementing cOsd::DrawScaledBitmap()
|
||||
for adding handling for DTS audio tracks to cPatPmtParser::ParsePmt()
|
||||
for adding support for PGS subtitles
|
||||
for adding cOsdProvider::OsdSizeChanged()
|
||||
|
||||
Eike Sauer <EikeSauer@t-online.de>
|
||||
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
|
||||
derived from cSkinDisplayMenu, to get informed about the currently used sort
|
||||
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
|
||||
* 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"
|
||||
@ -4033,6 +4033,7 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched)
|
||||
displayChannel = Skins.Current()->DisplayChannel(withInfo);
|
||||
number = 0;
|
||||
timeout = Switched || Setup.TimeoutRequChInfo;
|
||||
cOsdProvider::OsdSizeChanged(osdState); // just to get the current state
|
||||
positioner = NULL;
|
||||
channel = Channels.GetByNumber(Number);
|
||||
lastPresent = lastFollowing = NULL;
|
||||
@ -4118,6 +4119,10 @@ cChannel *cDisplayChannel::NextAvailableChannel(cChannel *Channel, int Direction
|
||||
|
||||
eOSState cDisplayChannel::ProcessKey(eKeys Key)
|
||||
{
|
||||
if (cOsdProvider::OsdSizeChanged(osdState)) {
|
||||
delete displayChannel;
|
||||
displayChannel = Skins.Current()->DisplayChannel(withInfo);
|
||||
}
|
||||
cChannel *NewChannel = NULL;
|
||||
if (Key != kNone)
|
||||
lastTime.Set();
|
||||
|
3
menu.h
3
menu.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* 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
|
||||
@ -121,6 +121,7 @@ private:
|
||||
cTimeMs lastTime;
|
||||
int number;
|
||||
bool timeout;
|
||||
int osdState;
|
||||
const cPositioner *positioner;
|
||||
cChannel *channel;
|
||||
const cEvent *lastPresent;
|
||||
|
13
osd.c
13
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 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"
|
||||
@ -1978,6 +1978,7 @@ int cOsdProvider::oldWidth = 0;
|
||||
int cOsdProvider::oldHeight = 0;
|
||||
double cOsdProvider::oldAspect = 1.0;
|
||||
cImage *cOsdProvider::images[MAXOSDIMAGES] = { NULL };
|
||||
int cOsdProvider::osdState = 0;
|
||||
|
||||
cOsdProvider::cOsdProvider(void)
|
||||
{
|
||||
@ -2015,6 +2016,7 @@ void cOsdProvider::UpdateOsdSize(bool Force)
|
||||
int Width;
|
||||
int Height;
|
||||
double Aspect;
|
||||
cMutexLock MutexLock(&cOsd::mutex);
|
||||
cDevice::PrimaryDevice()->GetOsdSize(Width, Height, Aspect);
|
||||
if (Width != oldWidth || Height != oldHeight || !DoubleEqual(Aspect, oldAspect) || Force) {
|
||||
Setup.OSDLeft = int(round(Width * Setup.OSDLeftP));
|
||||
@ -2032,9 +2034,18 @@ void cOsdProvider::UpdateOsdSize(bool Force)
|
||||
oldHeight = Height;
|
||||
oldAspect = 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)
|
||||
{
|
||||
if (osdProvider) {
|
||||
|
9
osd.h
9
osd.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* 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
|
||||
@ -949,6 +949,7 @@ private:
|
||||
static int oldHeight;
|
||||
static double oldAspect;
|
||||
static cImage *images[MAXOSDIMAGES];
|
||||
static int osdState;
|
||||
protected:
|
||||
virtual cOsd *CreateOsd(int Left, int Top, uint Level) = 0;
|
||||
///< 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,
|
||||
///< even if the video resolution hasn't changed since the last call to
|
||||
///< 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);
|
||||
///< Returns true if the current OSD provider is able to handle a true color OSD.
|
||||
static int StoreImage(const cImage &Image);
|
||||
|
Loading…
Reference in New Issue
Block a user