Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
940b79b4
Commit
940b79b4
authored
Dec 08, 2002
by
Jon Lech Johansen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* ALL: Under Jaguar, vout no longer depends on any specific MacOS X
intf. wxWindows should work (not tested). Closes #33.
parent
270e1cb5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
258 additions
and
200 deletions
+258
-200
modules/gui/macosx/intf.m
modules/gui/macosx/intf.m
+14
-106
modules/gui/macosx/vout.h
modules/gui/macosx/vout.h
+15
-21
modules/gui/macosx/vout.m
modules/gui/macosx/vout.m
+229
-73
No files found.
modules/gui/macosx/intf.m
View file @
940b79b4
...
...
@@ -2,7 +2,7 @@
* intf.m: MacOS X interface plugin
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: intf.m,v 1.
7 2002/12/07 23:50:30 massiot
Exp $
* $Id: intf.m,v 1.
8 2002/12/08 05:30:47 jlj
Exp $
*
* Authors: Jon Lech Johansen <jon-vl@nanocrew.net>
* Christophe Massiot <massiot@via.ecp.fr>
...
...
@@ -986,111 +986,19 @@ static void Run( intf_thread_t *p_intf )
-
(
void
)
handlePortMessage
:(
NSPortMessage
*
)
o_msg
{
NSData
*
o_req
;
vout_req_t
*
p_req
;
o_req
=
[[
o_msg
components
]
lastObject
];
p_req
=
*
((
vout_req_t
**
)[
o_req
bytes
]);
[
p_req
->
o_lock
lock
];
if
(
p_req
->
i_type
==
VOUT_REQ_CREATE_WINDOW
)
{
VLCView
*
o_view
;
NSScreen
*
p_screen
;
NSMenu
*
o_menu
=
[
o_mi_screen
submenu
];
int
i
,
i_nb_items
=
[
o_menu
numberOfItems
];
for
(
i
=
0
;
i
<
i_nb_items
;
i
++
)
{
if
(
[[
o_menu
itemAtIndex
:
i
]
state
]
)
break
;
}
NSArray
*
p_screens
=
[
NSScreen
screens
];
if
(
i
==
i_nb_items
||
[
p_screens
count
]
<
i
)
{
/* This shouldn't happen. */
p_screen
=
[
NSScreen
mainScreen
];
}
else
{
p_screen
=
[
p_screens
objectAtIndex
:
i
];
}
p_req
->
p_vout
->
p_sys
->
o_window
=
[
VLCWindow
alloc
];
[
p_req
->
p_vout
->
p_sys
->
o_window
setVout
:
p_req
->
p_vout
];
[
p_req
->
p_vout
->
p_sys
->
o_window
setReleasedWhenClosed
:
YES
];
if
(
p_req
->
p_vout
->
b_fullscreen
)
{
[
p_req
->
p_vout
->
p_sys
->
o_window
initWithContentRect:
[
p_screen
frame
]
styleMask:
NSBorderlessWindowMask
backing:
NSBackingStoreBuffered
defer:
NO
screen
:
p_screen
];
[
p_req
->
p_vout
->
p_sys
->
o_window
setLevel:
NSModalPanelWindowLevel
];
}
else
{
unsigned
int
i_stylemask
=
NSTitledWindowMask
|
NSMiniaturizableWindowMask
|
NSResizableWindowMask
;
[
p_req
->
p_vout
->
p_sys
->
o_window
initWithContentRect:
p_req
->
p_vout
->
p_sys
->
s_rect
styleMask:
i_stylemask
backing:
NSBackingStoreBuffered
defer:
NO
screen
:
p_screen
];
if
(
!
p_req
->
p_vout
->
p_sys
->
b_pos_saved
)
{
[
p_req
->
p_vout
->
p_sys
->
o_window
center
];
}
}
o_view
=
[[
VLCView
alloc
]
init
];
[
o_view
setVout
:
p_req
->
p_vout
];
[
o_view
setMenu
:
o_mu_controls
];
[
p_req
->
p_vout
->
p_sys
->
o_window
setContentView
:
o_view
];
[
o_view
autorelease
];
[
o_view
lockFocus
];
p_req
->
p_vout
->
p_sys
->
p_qdport
=
[
o_view
qdPort
];
[
o_view
unlockFocus
];
[
p_req
->
p_vout
->
p_sys
->
o_window
setTitle
:
[
NSString
stringWithCString:
VOUT_TITLE
" (QuickTime)"
]];
[
p_req
->
p_vout
->
p_sys
->
o_window
makeKeyAndOrderFront
:
nil
];
p_req
->
i_result
=
1
;
}
else
if
(
p_req
->
i_type
==
VOUT_REQ_DESTROY_WINDOW
)
{
if
(
!
p_req
->
p_vout
->
b_fullscreen
)
{
NSRect
s_rect
;
s_rect
=
[[
p_req
->
p_vout
->
p_sys
->
o_window
contentView
]
frame
];
p_req
->
p_vout
->
p_sys
->
s_rect
.
size
=
s_rect
.
size
;
s_rect
=
[
p_req
->
p_vout
->
p_sys
->
o_window
frame
];
p_req
->
p_vout
->
p_sys
->
s_rect
.
origin
=
s_rect
.
origin
;
p_req
->
p_vout
->
p_sys
->
b_pos_saved
=
1
;
}
p_req
->
p_vout
->
p_sys
->
p_qdport
=
nil
;
[
p_req
->
p_vout
->
p_sys
->
o_window
close
];
p_req
->
p_vout
->
p_sys
->
o_window
=
nil
;
p_req
->
i_result
=
1
;
}
[
p_req
->
o_lock
unlockWithCondition
:
1
];
NSData
*
o_data
;
NSValue
*
o_value
;
NSInvocation
*
o_inv
;
vout_thread_t
*
p_vout
;
o_data
=
[[
o_msg
components
]
lastObject
];
o_inv
=
*
((
NSInvocation
**
)[
o_data
bytes
]);
[
o_inv
getArgument
:
&
o_value
atIndex
:
2
];
p_vout
=
(
vout_thread_t
*
)[
o_value
pointerValue
];
[
p_vout
->
p_sys
->
o_lock
lock
];
[
o_inv
invoke
];
[
p_vout
->
p_sys
->
o_lock
unlockWithCondition
:
1
];
}
@end
modules/gui/macosx/vout.h
View file @
940b79b4
...
...
@@ -2,7 +2,7 @@
* vout.h: MacOS X interface plugin
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: vout.h,v 1.
1 2002/08/04 17:23:43 sam
Exp $
* $Id: vout.h,v 1.
2 2002/12/08 05:30:47 jlj
Exp $
*
* Authors: Colin Delacroix <colin@zoy.org>
* Florian G. Pflug <fgp@phlo.org>
...
...
@@ -32,6 +32,7 @@
}
-
(
void
)
setVout
:(
vout_thread_t
*
)
_p_vout
;
-
(
vout_thread_t
*
)
getVout
;
-
(
void
)
toggleFullscreen
;
-
(
BOOL
)
isFullscreen
;
...
...
@@ -43,10 +44,19 @@
*****************************************************************************/
@interface
VLCView
:
NSQuickDrawView
{
vout_thread_t
*
p_vout
;
}
-
(
void
)
setVout
:(
vout_thread_t
*
)
_p_vout
;
@end
/*****************************************************************************
* VLCVout interface
*****************************************************************************/
@interface
VLCVout
:
NSObject
{
}
-
(
void
)
createWindow
:(
NSValue
*
)
o_value
;
-
(
void
)
destroyWindow
:(
NSValue
*
)
o_value
;
@end
...
...
@@ -55,11 +65,11 @@
*****************************************************************************/
struct
vout_sys_t
{
intf_thread_t
*
p_intf
;
VLCWindow
*
o_window
;
NSConditionLock
*
o_lock
;
NSRect
s_rect
;
int
b_pos_saved
;
VLCWindow
*
o_window
;
vlc_bool_t
b_mouse_moved
;
vlc_bool_t
b_mouse_pointer_visible
;
...
...
@@ -74,19 +84,3 @@ struct vout_sys_t
ImageDescriptionHandle
h_img_descr
;
#endif
};
/*****************************************************************************
* vout_req_t: MacOS X video output request
*****************************************************************************/
#define VOUT_REQ_CREATE_WINDOW 0x00000001
#define VOUT_REQ_DESTROY_WINDOW 0x00000002
typedef
struct
vout_req_t
{
int
i_type
;
int
i_result
;
NSConditionLock
*
o_lock
;
vout_thread_t
*
p_vout
;
}
vout_req_t
;
modules/gui/macosx/vout.m
View file @
940b79b4
...
...
@@ -2,7 +2,7 @@
* vout.m: MacOS X video output plugin
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: vout.m,v 1.
6 2002/12/07 23:50:30 massiot
Exp $
* $Id: vout.m,v 1.
7 2002/12/08 05:30:47 jlj
Exp $
*
* Authors: Colin Delacroix <colin@zoy.org>
* Florian G. Pflug <fgp@phlo.org>
...
...
@@ -60,7 +60,7 @@ static void vout_End ( vout_thread_t * );
static
int
vout_Manage
(
vout_thread_t
*
);
static
void
vout_Display
(
vout_thread_t
*
,
picture_t
*
);
static
int
CoSendRequest
(
vout_thread_t
*
,
long
);
static
int
CoSendRequest
(
vout_thread_t
*
,
SEL
);
static
int
CoCreateWindow
(
vout_thread_t
*
);
static
int
CoDestroyWindow
(
vout_thread_t
*
);
static
int
CoToggleFullscreen
(
vout_thread_t
*
);
...
...
@@ -94,36 +94,39 @@ int E_(OpenVideo) ( vlc_object_t *p_this )
/* Wait for a MacOS X interface to appear. Timeout is 2 seconds. */
for
(
i_timeout
=
20
;
i_timeout
--
;
)
{
vlc_list_t
*
p_list
=
vlc_list_find
(
p_vout
,
VLC_OBJECT_INTF
,
FIND_ANYWHERE
);
intf_thread_t
**
pp_intf
=
(
intf_thread_t
**
)
p_list
->
pp_objects
;
/* Parse the list of interfaces to see if one suits us */
for
(
;
*
pp_intf
;
pp_intf
++
)
{
if
(
(
*
pp_intf
)
->
p_module
&&
!
strcmp
(
(
*
pp_intf
)
->
p_module
->
psz_object_name
,
MODULE_STRING
)
)
{
vlc_object_yield
(
*
pp_intf
);
p_vout
->
p_sys
->
p_intf
=
*
pp_intf
;
break
;
}
}
vlc_list_release
(
p_list
);
if
(
p_vout
->
p_sys
->
p_intf
==
NULL
)
if
(
NSApp
==
NULL
)
{
msleep
(
INTF_IDLE_SLEEP
);
}
}
if
(
p_vout
->
p_sys
->
p_intf
==
NULL
)
if
(
NSApp
==
NULL
)
{
msg_Err
(
p_vout
,
"no MacOS X interface present"
);
free
(
p_vout
->
p_sys
);
return
(
1
);
}
if
(
[
NSApp
respondsToSelector
:
@selector
(
getIntf
)]
)
{
intf_thread_t
*
p_intf
;
for
(
i_timeout
=
10
;
i_timeout
--
;
)
{
if
(
(
p_intf
=
[
NSApp
getIntf
]
)
==
NULL
)
{
msleep
(
INTF_IDLE_SLEEP
);
}
}
if
(
p_intf
==
NULL
)
{
msg_Err
(
p_vout
,
"MacOS X intf has getIntf, but is NULL"
);
free
(
p_vout
->
p_sys
);
return
(
1
);
}
}
p_vout
->
p_sys
->
h_img_descr
=
(
ImageDescriptionHandle
)
NewHandleClear
(
sizeof
(
ImageDescription
)
);
p_vout
->
p_sys
->
p_matrix
=
(
MatrixRecordPtr
)
malloc
(
sizeof
(
MatrixRecord
)
);
...
...
@@ -139,7 +142,6 @@ int E_(OpenVideo) ( vlc_object_t *p_this )
msg_Err
(
p_vout
,
"EnterMovies failed: %d"
,
err
);
free
(
p_vout
->
p_sys
->
p_matrix
);
DisposeHandle
(
(
Handle
)
p_vout
->
p_sys
->
h_img_descr
);
vlc_object_release
(
p_vout
->
p_sys
->
p_intf
);
free
(
p_vout
->
p_sys
);
return
(
1
);
}
...
...
@@ -168,44 +170,52 @@ int E_(OpenVideo) ( vlc_object_t *p_this )
{
free
(
p_vout
->
p_sys
->
p_matrix
);
DisposeHandle
(
(
Handle
)
p_vout
->
p_sys
->
h_img_descr
);
vlc_object_release
(
p_vout
->
p_sys
->
p_intf
);
free
(
p_vout
->
p_sys
);
return
(
1
);
}
NSArray
*
p_screens
=
[
NSScreen
screens
];
if
(
[
p_screens
count
]
>
0
)
NSAutoreleasePool
*
o_pool
=
[[
NSAutoreleasePool
alloc
]
init
];
NSArray
*
o_screens
=
[
NSScreen
screens
];
if
(
[
o_screens
count
]
>
0
)
{
int
i
=
1
;
vlc_value_t
val
;
NSScreen
*
o_screen
;
var_Destroy
(
p_vout
,
"video-device"
);
var_Create
(
p_vout
,
"video-device"
,
VLC_VAR_STRING
|
VLC_VAR_HASCHOICE
);
NSEnumerator
*
p_enumerator
=
[
p_screens
objectEnumerator
];
NSScreen
*
p_screen
;
int
i
=
1
;
while
(
(
p_screen
=
[
p_enumerator
nextObject
])
!=
NULL
)
var_Create
(
p_vout
,
"video-device"
,
VLC_VAR_STRING
|
VLC_VAR_HASCHOICE
);
NSEnumerator
*
o_enumerator
=
[
o_screens
objectEnumerator
];
while
(
(
o_screen
=
[
o_enumerator
nextObject
])
!=
NULL
)
{
NSRect
p_rect
=
[
p_screen
frame
];
char
psz_temp
[
255
];
snprintf
(
psz_temp
,
sizeof
(
psz_temp
),
"%s %d (%dx%d)"
,
_
(
"Screen"
),
i
,
(
int
)
p_rect
.
size
.
width
,
(
int
)
p_rect
.
size
.
height
);
NSRect
s_rect
=
[
o_screen
frame
];
snprintf
(
psz_temp
,
sizeof
(
psz_temp
)
/
sizeof
(
psz_temp
[
0
])
-
1
,
"%s %d (%dx%d)"
,
_
(
"Screen"
),
i
,
(
int
)
s_rect
.
size
.
width
,
(
int
)
s_rect
.
size
.
height
);
val
.
psz_string
=
psz_temp
;
var_Change
(
p_vout
,
"video-device"
,
VLC_VAR_ADDCHOICE
,
&
val
);
i
++
;
}
var_AddCallback
(
p_vout
,
"video-device"
,
vout_VarCallback
,
NULL
);
val
.
b_bool
=
VLC_TRUE
;
var_Set
(
p_vout
,
"intf-change"
,
val
);
}
[
o_pool
release
];
if
(
CoCreateWindow
(
p_vout
)
)
{
msg_Err
(
p_vout
,
"unable to create window"
);
free
(
p_vout
->
p_sys
->
p_matrix
);
DisposeHandle
(
(
Handle
)
p_vout
->
p_sys
->
h_img_descr
);
vlc_object_release
(
p_vout
->
p_sys
->
p_intf
);
free
(
p_vout
->
p_sys
);
return
(
1
);
}
...
...
@@ -311,8 +321,6 @@ void E_(CloseVideo) ( vlc_object_t *p_this )
free
(
p_vout
->
p_sys
->
p_matrix
);
DisposeHandle
(
(
Handle
)
p_vout
->
p_sys
->
h_img_descr
);
vlc_object_release
(
p_vout
->
p_sys
->
p_intf
);
free
(
p_vout
->
p_sys
);
}
...
...
@@ -405,39 +413,67 @@ static void vout_Display( vout_thread_t *p_vout, picture_t *p_pic )
*****************************************************************************
* Returns 0 on success, 1 otherwise
*****************************************************************************/
static
int
CoSendRequest
(
vout_thread_t
*
p_vout
,
long
i_request
)
static
int
CoSendRequest
(
vout_thread_t
*
p_vout
,
SEL
sel
)
{
NSArray
*
o_array
;
NSPortMessage
*
o_msg
;
struct
vout_req_t
req
;
struct
vout_req_t
*
p_req
=
&
req
;
NSAutoreleasePool
*
o_pool
=
[[
NSAutoreleasePool
alloc
]
init
];
NSPort
*
recvPort
=
[[
NSPort
port
]
retain
];
memset
(
&
req
,
0
,
sizeof
(
req
)
);
req
.
i_type
=
i_request
;
req
.
p_vout
=
p_vout
;
req
.
o_lock
=
[[
NSConditionLock
alloc
]
initWithCondition
:
0
];
o_array
=
[
NSArray
arrayWithObject
:
[
NSData
dataWithBytes
:
&
p_req
length
:
sizeof
(
void
*
)]];
o_msg
=
[[
NSPortMessage
alloc
]
initWithSendPort:
p_vout
->
p_sys
->
p_intf
->
p_sys
->
o_sendport
receivePort:
recvPort
components
:
o_array
];
int
i_ret
=
0
;
[
o_msg
sendBeforeDate
:
[
NSDate
distantPast
]];
NSAutoreleasePool
*
o_pool
=
[[
NSAutoreleasePool
alloc
]
init
];
VLCVout
*
o_vlv
=
[[[
VLCVout
alloc
]
init
]
autorelease
];
[
req
.
o_lock
lockWhenCondition
:
1
];
[
req
.
o_lock
unlock
];
[
o_msg
release
];
[
req
.
o_lock
release
];
if
(
[
o_vlv
respondsToSelector
:
@selector
(
performSelectorOnMainThread
:
withObject:waitUntilDone:
)]
)
{
[
o_vlv
performSelectorOnMainThread
:
sel
withObject:
[
NSValue
valueWithPointer
:
p_vout
]
waitUntilDone:
YES
];
}
else
if
(
[
NSApp
respondsToSelector
:
@selector
(
getIntf
)]
)
{
NSArray
*
o_array
;
NSValue
*
o_value
;
NSPort
*
o_recv_port
;
NSInvocation
*
o_inv
;
NSPortMessage
*
o_msg
;
intf_thread_t
*
p_intf
;
NSMethodSignature
*
o_sig
;
p_intf
=
(
intf_thread_t
*
)[
NSApp
getIntf
];
o_recv_port
=
[[
NSPort
port
]
retain
];
o_value
=
[
NSValue
valueWithPointer
:
p_vout
];
o_sig
=
[
VLCVout
instanceMethodSignatureForSelector
:
sel
];
o_inv
=
[
NSInvocation
invocationWithMethodSignature
:
o_sig
];
[
o_inv
setArgument
:
&
o_value
atIndex
:
2
];
[
o_inv
setTarget
:
o_vlv
];
[
o_inv
setSelector
:
sel
];
o_array
=
[
NSArray
arrayWithObject
:
[
NSData
dataWithBytes
:
&
o_inv
length
:
sizeof
(
o_inv
)]];
o_msg
=
[[
NSPortMessage
alloc
]
initWithSendPort:
p_intf
->
p_sys
->
o_sendport
receivePort:
o_recv_port
components
:
o_array
];
p_vout
->
p_sys
->
o_lock
=
[[
NSConditionLock
alloc
]
initWithCondition
:
0
];
[
o_msg
sendBeforeDate
:
[
NSDate
distantPast
]];
[
p_vout
->
p_sys
->
o_lock
lockWhenCondition
:
1
];
[
p_vout
->
p_sys
->
o_lock
unlock
];
[
p_vout
->
p_sys
->
o_lock
release
];
p_vout
->
p_sys
->
o_lock
=
nil
;
[
o_msg
release
];
[
o_recv_port
release
];
}
else
{
msg_Err
(
p_vout
,
"SendRequest: no way to communicate with mt"
);
i_ret
=
1
;
}
[
recvPort
release
];
[
o_pool
release
];
return
(
!
req
.
i_resul
t
);
return
(
i_re
t
);
}
/*****************************************************************************
...
...
@@ -447,9 +483,9 @@ static int CoSendRequest( vout_thread_t *p_vout, long i_request )
*****************************************************************************/
static
int
CoCreateWindow
(
vout_thread_t
*
p_vout
)
{
if
(
CoSendRequest
(
p_vout
,
VOUT_REQ_CREATE_WINDOW
)
)
if
(
CoSendRequest
(
p_vout
,
@selector
(
createWindow
:
)
)
)
{
msg_Err
(
p_vout
,
"CoSendRequest (
CREATE_WINDOW
) failed"
);
msg_Err
(
p_vout
,
"CoSendRequest (
createWindow
) failed"
);
return
(
1
);
}
...
...
@@ -469,9 +505,9 @@ static int CoDestroyWindow( vout_thread_t *p_vout )
p_vout
->
p_sys
->
b_mouse_pointer_visible
=
1
;
}
if
(
CoSendRequest
(
p_vout
,
VOUT_REQ_DESTROY_WINDOW
)
)
if
(
CoSendRequest
(
p_vout
,
@selector
(
destroyWindow
:
)
)
)
{
msg_Err
(
p_vout
,
"CoSendRequest (
DESTROY_WINDOW
) failed"
);
msg_Err
(
p_vout
,
"CoSendRequest (
destroyWindow
) failed"
);
return
(
1
);
}
...
...
@@ -737,6 +773,11 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic )
p_vout
=
_p_vout
;
}
-
(
vout_thread_t
*
)
getVout
{
return
(
p_vout
);
}
-
(
void
)
toggleFullscreen
{
p_vout
->
i_changes
|=
VOUT_FULLSCREEN_CHANGE
;
...
...
@@ -819,13 +860,12 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic )
*****************************************************************************/
@implementation
VLCView
-
(
void
)
setVout
:(
vout_thread_t
*
)
_p_vout
{
p_vout
=
_p_vout
;
}
-
(
void
)
drawRect
:(
NSRect
)
rect
{
vout_thread_t
*
p_vout
;
id
o_window
=
[
self
window
];
p_vout
=
(
vout_thread_t
*
)[
o_window
getVout
];
[[
NSColor
blackColor
]
set
];
NSRectFill
(
rect
);
[
super
drawRect
:
rect
];
...
...
@@ -852,6 +892,10 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic )
-
(
void
)
mouseUp
:(
NSEvent
*
)
o_event
{
vout_thread_t
*
p_vout
;
id
o_window
=
[
self
window
];
p_vout
=
(
vout_thread_t
*
)[
o_window
getVout
];
switch
(
[
o_event
type
]
)
{
case
NSLeftMouseUp
:
...
...
@@ -874,6 +918,10 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic )
NSRect
s_rect
;
BOOL
b_inside
;
vout_thread_t
*
p_vout
;
id
o_window
=
[
self
window
];
p_vout
=
(
vout_thread_t
*
)[
o_window
getVout
];
s_rect
=
[
self
bounds
];
ml
=
[
self
convertPoint
:
[
o_event
locationInWindow
]
fromView
:
nil
];
b_inside
=
[
self
mouse
:
ml
inRect
:
s_rect
];
...
...
@@ -905,3 +953,111 @@ static void QTFreePicture( vout_thread_t *p_vout, picture_t *p_pic )
}
@end
/*****************************************************************************
* VLCVout implementation
*****************************************************************************/
@implementation
VLCVout
-
(
void
)
createWindow
:(
NSValue
*
)
o_value
{
vlc_value_t
val
;
VLCView
*
o_view
;
NSScreen
*
o_screen
;
vout_thread_t
*
p_vout
;
p_vout
=
(
vout_thread_t
*
)[
o_value
pointerValue
];
p_vout
->
p_sys
->
o_window
=
[
VLCWindow
alloc
];
[
p_vout
->
p_sys
->
o_window
setVout
:
p_vout
];
[
p_vout
->
p_sys
->
o_window
setReleasedWhenClosed
:
YES
];
if
(
var_Get
(
p_vout
,
"video-device"
,
&
val
)
<
0
)
{
o_screen
=
[
NSScreen
mainScreen
];
}
else
{
int
i_index
=
0
;
NSArray
*
o_screens
=
[
NSScreen
screens
];
if
(
!
sscanf
(
val
.
psz_string
,
"Screen %d"
,
&
i_index
)
||
[
o_screens
count
]
<
i_index
)
{
o_screen
=
[
NSScreen
mainScreen
];
}
else
{
o_screen
=
[
o_screens
objectAtIndex
:
i_index
-
1
];
}
free
(
val
.
psz_string
);
}
if
(
p_vout
->
b_fullscreen
)
{
[
p_vout
->
p_sys
->
o_window
initWithContentRect:
[
o_screen
frame
]
styleMask:
NSBorderlessWindowMask
backing:
NSBackingStoreBuffered
defer:
NO
screen
:
o_screen
];
[
p_vout
->
p_sys
->
o_window
setLevel
:
NSModalPanelWindowLevel
];
}
else
{
unsigned
int
i_stylemask
=
NSTitledWindowMask
|
NSMiniaturizableWindowMask
|
NSResizableWindowMask
;
[
p_vout
->
p_sys
->
o_window
initWithContentRect:
p_vout
->
p_sys
->
s_rect
styleMask:
i_stylemask
backing:
NSBackingStoreBuffered
defer:
NO
screen
:
o_screen
];
if
(
!
p_vout
->
p_sys
->
b_pos_saved
)
{
[
p_vout
->
p_sys
->
o_window
center
];
}
}
o_view
=
[[
VLCView
alloc
]
init
];
/* FIXME: [o_view setMenu:] */
[
p_vout
->
p_sys
->
o_window
setContentView
:
o_view
];
[
o_view
autorelease
];
[
o_view
lockFocus
];
p_vout
->
p_sys
->
p_qdport
=
[
o_view
qdPort
];
[
o_view
unlockFocus
];
[
p_vout
->
p_sys
->
o_window
setTitle
:
[
NSString
stringWithCString
:
VOUT_TITLE
" (QuickTime)"
]];
[
p_vout
->
p_sys
->
o_window
makeKeyAndOrderFront
:
nil
];
}
-
(
void
)
destroyWindow
:(
NSValue
*
)
o_value
{
vout_thread_t
*
p_vout
;
p_vout
=
(
vout_thread_t
*
)[
o_value
pointerValue
];
if
(
!
p_vout
->
b_fullscreen
)
{
NSRect
s_rect
;
s_rect
=
[[
p_vout
->
p_sys
->
o_window
contentView
]
frame
];
p_vout
->
p_sys
->
s_rect
.
size
=
s_rect
.
size
;
s_rect
=
[
p_vout
->
p_sys
->
o_window
frame
];
p_vout
->
p_sys
->
s_rect
.
origin
=
s_rect
.
origin
;
p_vout
->
p_sys
->
b_pos_saved
=
1
;
}
p_vout
->
p_sys
->
p_qdport
=
nil
;
[
p_vout
->
p_sys
->
o_window
close
];
p_vout
->
p_sys
->
o_window
=
nil
;
}
@end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment