From cebcf96de307c91a8247719e2baeff460e3116e8 Mon Sep 17 00:00:00 2001 From: phintuka Date: Mon, 16 Mar 2009 09:30:37 +0000 Subject: Show multiple OSD layers when OSD mixer enabled in config (subtitles + pause indicator, ...) --- osd.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/osd.c b/osd.c index 422f3872..cc880f42 100644 --- a/osd.c +++ b/osd.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: osd.c,v 1.33 2009-03-15 19:02:10 phintuka Exp $ + * $Id: osd.c,v 1.34 2009-03-16 09:30:37 phintuka Exp $ * */ @@ -336,7 +336,7 @@ cXinelibOsd::~cXinelibOsd() CloseWindows(); FreeWindowHandles(); - m_OsdStack.Del(this,false); + m_OsdStack.Del(this, false); if(m_OsdStack.First()) m_OsdStack.First()->Show(); @@ -549,17 +549,29 @@ cOsd *cXinelibOsdProvider::CreateOsd(int Left, int Top, uint Level) if(!it) cXinelibOsd::m_OsdStack.Add(m_OsdInstance); - LOGOSD("New OSD: index %d, layer %d [now %d OSDs]", m_OsdInstance->Index(), Level, cXinelibOsd::m_OsdStack.Count()); - if(xc.osd_mixer == OSD_MIXER_NONE) + LOGOSD("New OSD: index %d, layer %d [now %d OSDs]", + m_OsdInstance->Index(), Level, cXinelibOsd::m_OsdStack.Count()); + + if(xc.osd_mixer == OSD_MIXER_NONE) { + // hide all but top-most OSD LOGOSD(" OSD mixer off"); + it = cXinelibOsd::m_OsdStack.Last(); + while(cXinelibOsd::m_OsdStack.Prev(it)) { + LOGOSD(" -> hide OSD %d", it->Index()); + it->Hide(); + it = cXinelibOsd::m_OsdStack.Prev(it); + } - // hide all but top-most OSD - it = cXinelibOsd::m_OsdStack.Last(); - while(cXinelibOsd::m_OsdStack.Prev(it)) { - LOGOSD(" -> hide OSD %d", it->Index()); - it->Hide(); - it = cXinelibOsd::m_OsdStack.Prev(it); + } else /*if(xc.osd_mixer > OSD_MIXER_NONE)*/ { + LOGOSD("OSD mixer on (%d)", xc.osd_mixer); + it = cXinelibOsd::m_OsdStack.Last(); + while (cXinelibOsd::m_OsdStack.Prev(it)) { + LOGOSD(" -> show OSD %d", it->Index()); + it->Show(); + it = cXinelibOsd::m_OsdStack.Prev(it); + } } + it->Show(); return m_OsdInstance; -- cgit v1.2.3