-
Notifications
You must be signed in to change notification settings - Fork 54
/
Copy pathMMovieView_OSD.m
124 lines (107 loc) · 3.33 KB
/
MMovieView_OSD.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// Movist
//
// Copyright 2006 ~ 2008 Yong-Hoe Kim. All rights reserved.
// Yong-Hoe Kim <[email protected]>
//
// This file is part of Movist.
//
// Movist is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// Movist is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#import "MMovieView.h"
#import "MMovie.h"
#import "MMovieOSD.h"
#import "AppController.h" // for NSApp's delegate
#import "MMovieViewLayer.h"
#import "MMovieOSDLayer.h"
@implementation MMovieView (OSD)
- (BOOL)initOSD
{
NSRect bounds = [self bounds];
_subtitleOSD = [[MMovieOSD alloc] init];
[_subtitleOSD initTextRendering];
[_subtitleOSD setViewBounds:bounds movieRect:bounds autoSizeWidth:0];
// h/v-position will be updated later
_rootLayer.subtitle.hidden = NO;
_subtitleVisible = TRUE;
_subtitleInLBOX = FALSE;
_autoLetterBoxHeightMaxLines = 3;
_messageOSD = [[MMovieOSD alloc] init];
[_messageOSD initTextRendering];
[_messageOSD setViewBounds:bounds movieRect:bounds autoSizeWidth:0];
[_messageOSD setHPosition:OSD_HPOSITION_LEFT];
[_messageOSD setVPosition:OSD_VPOSITION_TOP];
[_messageOSD setTextAlignment:NSLeftTextAlignment];
_messageHideInterval = 2.0;
_errorOSD = [[MMovieOSD alloc] init];
[_errorOSD initTextRendering];
[_errorOSD setViewBounds:bounds movieRect:bounds autoSizeWidth:0];
[_errorOSD setHPosition:OSD_HPOSITION_CENTER];
[_errorOSD setVPosition:OSD_VPOSITION_CENTER];
[_errorOSD setTextAlignment:NSCenterTextAlignment];
_iconOSD = [[MMovieOSD alloc] init];
[_iconOSD setViewBounds:bounds movieRect:bounds autoSizeWidth:0];
[_iconOSD setImage:[NSImage imageNamed:@"Movist"]];
[_iconOSD setHPosition:OSD_HPOSITION_CENTER];
[_iconOSD setVPosition:OSD_VPOSITION_CENTER];
return TRUE;
}
- (void)cleanupOSD
{
//TRACE(@"%s", __PRETTY_FUNCTION__);
[_iconOSD release];
[_errorOSD release];
[_messageOSD release];
[_subtitleOSD release];
}
////////////////////////////////////////////////////////////////////////////////
#pragma mark -
- (void)drawOSD
{
//TRACE(@"%s", __PRETTY_FUNCTION__);
if ([_iconOSD hasContent]) {
[_iconOSD drawOnScreen];
}
if (_subtitleVisible) {
if ([_subtitleOSD hasContent]) {
[_subtitleOSD drawOnScreen];
}
}
if ([_messageOSD hasContent]) {
[_messageOSD drawOnScreen];
}
if ([_errorOSD hasContent]) {
[_errorOSD drawOnScreen];
}
}
- (void)clearOSD
{
[_subtitleOSD setSubtitleSync:0], [_subtitleOSD clearContent];
[_messageOSD clearContent];
[_errorOSD clearContent];
}
- (void)updateOSDImageBaseWidth
{
float width = (self.movie) ? [self.movie adjustedSizeByAspectRatio].width : 0;
[_subtitleOSD setImageBaseWidth:width];
}
- (void)showLogo
{
_rootLayer.icon.hidden = NO;
}
- (void)hideLogo
{
_rootLayer.icon.hidden = YES;
}
@end