Show
Ignore:
Timestamp:
02/16/10 10:24:27 (2 years ago)
Author:
gbooker
Message:

Slightly better overlay system now doesn't close overlays just to re-open them.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/PlayerFramework/CommonMediaPlayer/Media Players/DVD Framework/CMPDVDPlayerController.m

    r1104 r1140  
    141141        [windowCreation release]; 
    142142        [overlayDismiss invalidate]; 
     143        [statusOverlay release]; 
    143144        [subtitlesOverlay release]; 
    144145        [audioOverlay release]; 
    145146        [chapterOverlay release]; 
     147        [playheadOverlay release]; 
    146148        [blurredMenu release]; 
    147149        [super dealloc]; 
     
    187189        } 
    188190        else 
    189                 [windowCreation closeOverlay:shield]; 
     191                [windowCreation closeOverlay:shield withFade:[NSNumber numberWithFloat:0]]; 
    190192} 
    191193 
     
    320322} 
    321323 
    322 - (void)releaseAllOverlaysWithFadeTime:(float)fadeTime 
    323 { 
    324         [windowCreation closeAllOverlaysWithFadeTime:fadeTime]; 
    325         [subtitlesOverlay release]; 
    326         subtitlesOverlay = nil; 
    327         [audioOverlay release]; 
    328         audioOverlay = nil; 
    329         [chapterOverlay release]; 
    330         chapterOverlay = nil; 
    331         overlayMode = CMPDVDPlayerControllerOverlayModeNormal; 
    332 } 
    333  
    334 - (void)dismissOverlaysWithFadeTime:(float)fadeTime 
    335 { 
    336         [self releaseAllOverlaysWithFadeTime:fadeTime]; 
    337         [overlayDismiss invalidate]; 
     324static void closeAndNilOverlay(CMPDVDWindowCreationAction *windowCreation, CMPDVDOverlayWindow * *overlay, NSNumber *fadeTime) 
     325{ 
     326        CMPDVDOverlayWindow *actualOverlay = *overlay; 
     327        [windowCreation closeOverlay:actualOverlay withFade:fadeTime]; 
     328        [actualOverlay release]; 
     329        *overlay = nil; 
     330} 
     331 
     332- (void)overlayModeChangedWithFade:(float)fade 
     333{ 
     334        NSNumber *fadeTime = [NSNumber numberWithFloat:fade]; 
     335        BOOL closeStatus = (statusOverlay != nil); 
     336        BOOL closeSubtitles = (subtitlesOverlay != nil); 
     337        BOOL closeAudio = (audioOverlay != nil); 
     338        BOOL closeChapter = (chapterOverlay != nil); 
     339        BOOL closePlayhead = (playheadOverlay != nil); 
     340         
     341        switch (overlayMode) { 
     342                case CMPDVDPlayerControllerOverlayModeStatus: 
     343                        closeStatus = NO; 
     344                        closePlayhead = NO; 
     345                        break; 
     346                case CMPDVDPlayerControllerOverlayModeSubAndAudio: 
     347                        closeSubtitles = NO; 
     348                        closeAudio = NO; 
     349                        break; 
     350                case CMPDVDPlayerControllerOverlayModeChapters: 
     351                        closeChapter = NO; 
     352                        closePlayhead = NO; 
     353                        break; 
     354                default: 
     355                        break; 
     356        } 
     357         
     358        if(closeStatus) 
     359                closeAndNilOverlay(windowCreation, &statusOverlay, fadeTime); 
     360        if(closeSubtitles) 
     361                closeAndNilOverlay(windowCreation, &subtitlesOverlay, fadeTime); 
     362        if(closeAudio) 
     363                closeAndNilOverlay(windowCreation, &audioOverlay, fadeTime); 
     364        if(closeChapter) 
     365                closeAndNilOverlay(windowCreation, &chapterOverlay, fadeTime); 
     366        if(closePlayhead) 
     367                closeAndNilOverlay(windowCreation, &playheadOverlay, fadeTime); 
     368} 
     369 
     370- (void)fadeOverlays 
     371{ 
    338372        overlayDismiss = nil; 
    339 } 
    340  
    341 - (void)fadeOverlays 
    342 { 
    343         [self dismissOverlaysWithFadeTime:0.5]; 
     373        overlayMode = CMPDVDPlayerControllerOverlayModeNone; 
     374        [self overlayModeChangedWithFade:0.5]; 
    344375} 
    345376 
     
    352383- (void)showPlayheadOverlay 
    353384{ 
    354         CMPDVDPlayerPlayHead *playhead = [windowCreation addPlayheadOverlay]; 
    355         [playhead setPlayer:player]; 
    356         [playhead displayWithFadeTime:0.1]; 
    357 } 
    358  
    359 - (void)showSubAndAudioOverlays 
    360 { 
    361         [self releaseAllOverlaysWithFadeTime:0]; 
    362          
    363         subtitlesOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperLeft] retain]; 
     385        if(playheadOverlay) 
     386                return; 
     387        playheadOverlay = [[windowCreation addPlayheadOverlay] retain]; 
     388        [playheadOverlay setPlayer:player]; 
     389        [playheadOverlay displayWithFadeTime:0.1]; 
     390} 
     391 
     392- (void)showSubAndAudioMode 
     393{ 
     394        overlayMode = CMPDVDPlayerControllerOverlayModeSubAndAudio; 
     395        [self overlayModeChangedWithFade:0]; 
     396         
     397        if(!subtitlesOverlay) 
     398                subtitlesOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperLeft] retain]; 
    364399        [subtitlesOverlay setText:[player currentSubFormat]]; 
    365400        [subtitlesOverlay displayWithFadeTime:0.25]; 
    366         audioOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperRight] retain]; 
     401        if(!audioOverlay) 
     402                audioOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperRight] retain]; 
    367403        [audioOverlay setText:[player currentAudioFormat]]; 
    368404        [audioOverlay displayWithFadeTime:0.25]; 
    369         overlayMode = CMPDVDPlayerControllerOverlayModeSubAndAudio; 
     405         
    370406        [self resetOverlayTimerTo:10]; 
    371407} 
    372408 
    373 - (void)showChapterOverlay 
    374 { 
    375         [self releaseAllOverlaysWithFadeTime:0]; 
    376         chapterOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperLeft] retain]; 
     409- (void)showChapterMode 
     410{ 
     411        overlayMode = CMPDVDPlayerControllerOverlayModeChapters; 
     412        [self overlayModeChangedWithFade:0]; 
     413         
     414        if(!chapterOverlay) 
     415                chapterOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperLeft] retain]; 
    377416        [chapterOverlay setText:[NSString stringWithFormat:@"Chapter %d/%d", [player currentChapter], [player chapters]]]; 
    378417        [chapterOverlay displayWithFadeTime:0.25]; 
    379418        [self showPlayheadOverlay]; 
    380         overlayMode = CMPDVDPlayerControllerOverlayModeChapters; 
     419         
    381420        [self resetOverlayTimerTo:10]; 
    382 } 
    383  
    384 - (void)setOverlayText:(NSString *)text inPosition:(CMPDVDOverlayPosition)position dismissingOthers:(BOOL)dismiss 
    385 { 
    386         if(overlayMode != CMPDVDPlayerControllerOverlayModeNormal) 
    387                 return; 
    388         if(dismiss) 
    389                 [self releaseAllOverlaysWithFadeTime:0]; 
    390         CMPDVDTextView *overlay = [windowCreation addTextOverlayInPosition:position]; 
    391         [overlay setText:text]; 
    392         [overlay displayWithFadeTime:0.25]; 
    393         [self resetOverlayTimerTo:3]; 
    394 } 
    395  
    396 - (void)showResumeOverlayWithDismiss:(BOOL)dismiss 
    397 { 
    398         if(dismiss) 
    399                 [self dismissOverlaysWithFadeTime:0]; 
    400         blurredMenu = [[windowCreation addBlurredMenuOverlayWithItems:[NSArray arrayWithObjects:@"Resume Playback", @"Start From Beginning", @"Main Menu", nil]] retain]; 
    401         [blurredMenu displayWithFadeTime:0.5]; 
    402421} 
    403422 
     
    423442} 
    424443 
    425 - (void)showStateOverlay 
    426 { 
    427         [self setOverlayText:[self stringForPlayerState] inPosition:CMPDVDOverlayUpperLeft dismissingOthers:YES]; 
     444- (void)showStateMode 
     445{ 
     446        overlayMode = CMPDVDPlayerControllerOverlayModeStatus; 
     447        [self overlayModeChangedWithFade:0]; 
     448         
     449        if(!statusOverlay) 
     450                statusOverlay = [[windowCreation addTextOverlayInPosition:CMPDVDOverlayUpperLeft] retain]; 
     451        [statusOverlay setText:[self stringForPlayerState]]; 
     452        [statusOverlay displayWithFadeTime:0.25]; 
    428453        [self showPlayheadOverlay]; 
     454         
     455        [self resetOverlayTimerTo:3]; 
     456} 
     457 
     458- (void)dismissOverlaysWithFadeTime:(float)fadeTime 
     459{ 
     460        overlayMode = CMPDVDPlayerControllerOverlayModeNone; 
     461        [self overlayModeChangedWithFade:fadeTime]; 
     462         
     463        //Catch any others 
     464        [windowCreation closeAllOverlaysWithFadeTime:fadeTime]; 
     465         
     466        [overlayDismiss invalidate]; 
     467        overlayDismiss = nil; 
     468} 
     469 
     470- (void)showResumeOverlayWithDismiss:(BOOL)dismiss 
     471{ 
     472        if(dismiss) 
     473                [self dismissOverlaysWithFadeTime:0]; 
     474        blurredMenu = [[windowCreation addBlurredMenuOverlayWithItems:[NSArray arrayWithObjects:@"Resume Playback", @"Start From Beginning", @"Main Menu", nil]] retain]; 
     475        [blurredMenu displayWithFadeTime:0.5]; 
    429476} 
    430477 
     
    499546                        else if(inMenu) 
    500547                                [player doUserNavigation:CMPDVDPlayerNavigationUp]; 
    501                         else if(overlayMode == CMPDVDPlayerControllerOverlayModeNormal) 
    502                                 [self showSubAndAudioOverlays]; 
     548                        else if(overlayMode <= CMPDVDPlayerControllerOverlayModeStatus) 
     549                                [self showSubAndAudioMode]; 
    503550                        else if(overlayMode == CMPDVDPlayerControllerOverlayModeSubAndAudio) 
    504                                 overlayMode = CMPDVDPlayerControllerOverlayModeNormal; 
     551                                overlayMode = CMPDVDPlayerControllerOverlayModeStatus; 
    505552                        else if(overlayMode == CMPDVDPlayerControllerOverlayModeChapters) 
    506                                 overlayMode = CMPDVDPlayerControllerOverlayModeNormal; 
     553                                overlayMode = CMPDVDPlayerControllerOverlayModeStatus; 
    507554                        else 
    508555                                ;//Something else 
     
    514561                        else if(inMenu) 
    515562                                [player doUserNavigation:CMPDVDPlayerNavigationDown]; 
    516                         else if(overlayMode == CMPDVDPlayerControllerOverlayModeNormal) 
    517                                 [self showChapterOverlay]; 
     563                        else if(overlayMode <= CMPDVDPlayerControllerOverlayModeStatus) 
     564                                [self showChapterMode]; 
    518565                        else if(overlayMode == CMPDVDPlayerControllerOverlayModeSubAndAudio) 
    519                                 overlayMode = CMPDVDPlayerControllerOverlayModeNormal; 
     566                                overlayMode = CMPDVDPlayerControllerOverlayModeStatus; 
    520567                        else if(overlayMode == CMPDVDPlayerControllerOverlayModeChapters) 
    521                                 overlayMode = CMPDVDPlayerControllerOverlayModeNormal; 
     568                                overlayMode = CMPDVDPlayerControllerOverlayModeStatus; 
    522569                        else 
    523570                                ;//Something else 
     
    569616        } 
    570617         
    571         if(!supressStateDisplay && overlayMode == CMPDVDPlayerControllerOverlayModeNormal) 
    572                 [self showStateOverlay]; 
     618        if(!supressStateDisplay && overlayMode <= CMPDVDPlayerControllerOverlayModeStatus) 
     619                [self showStateMode]; 
    573620         
    574621        return YES;