Commit 2570019d authored by Felix Paul Kühne's avatar Felix Paul Kühne
Browse files

macosx: basic UI to have something as a start

minor functional changes only
parent dfa953d4
......@@ -182,18 +182,18 @@
/* three little ugly helpers */
- (void)repeatOne
{
[o_btn_repeat setImage: [NSImage imageNamed:@"repeat_single_embedded_graphite"]];
[o_btn_repeat setAlternateImage: [NSImage imageNamed:@"repeat_embedded_graphite"]];
[o_btn_repeat setImage: [NSImage imageNamed:@"repeat-one"]];
[o_btn_repeat setAlternateImage: [NSImage imageNamed:@"repeat-one-pressed"]];
}
- (void)repeatAll
{
[o_btn_repeat setImage: [NSImage imageNamed:@"repeat_embedded_graphite"]];
[o_btn_repeat setAlternateImage: [NSImage imageNamed:@"repeat_embedded"]];
[o_btn_repeat setImage: [NSImage imageNamed:@"repeat-all"]];
[o_btn_repeat setAlternateImage: [NSImage imageNamed:@"repeat-all-pressed"]];
}
- (void)repeatOff
{
[o_btn_repeat setImage: [NSImage imageNamed:@"repeat_embedded"]];
[o_btn_repeat setAlternateImage: [NSImage imageNamed:@"repeat_embedded_graphite"]];
[o_btn_repeat setImage: [NSImage imageNamed:@"repeat"]];
[o_btn_repeat setAlternateImage: [NSImage imageNamed:@"repeat-pressed"]];
}
- (void)shuffle
{
......@@ -201,10 +201,16 @@
playlist_t *p_playlist = pl_Get( VLCIntf );
var_Get( p_playlist, "random", &val );
[o_btn_shuffle setState: val.b_bool];
if(val.b_bool)
[o_btn_shuffle_embed setImage: [NSImage imageNamed:@"shuffle_embedded_graphite"]];
else
[o_btn_shuffle_embed setImage: [NSImage imageNamed:@"shuffle_embedded"]];
if(val.b_bool) {
[o_btn_shuffle_embed setImage: [NSImage imageNamed:@"shuffle-on"]];
[o_btn_shuffle_embed setAlternativeImage: [NSImage imageNamed:@"shuffle-blue-pressed"]];
}
else
{
[o_btn_shuffle_embed setImage: [NSImage imageNamed:@"shuffle"]];
[o_btn_shuffle_embed setImage: [NSImage imageNamed:@"shuffle-pressed"]];
}
}
- (IBAction)repeatButtonAction:(id)sender
......
......@@ -136,8 +136,6 @@ struct intf_sys_t
float f_slider_old; /* old slider val */
IBOutlet NSSlider * o_volumeslider; /* volume slider */
IBOutlet NSView * toolbarMediaControl; /* view with the controls */
IBOutlet NSProgressIndicator * o_main_pgbar; /* playlist window progress bar */
IBOutlet NSButton * o_btn_prev; /* btn previous */
IBOutlet NSButton * o_btn_rewind; /* btn rewind */
......@@ -320,15 +318,8 @@ struct intf_sys_t
IBOutlet NSMenuItem * o_vmi_fullscreen;
IBOutlet NSMenuItem * o_vmi_snapshot;
bool b_small_window;
bool b_restore_size;
NSRect o_restore_rect;
mtime_t i_end_scroll;
NSSize o_size_with_playlist;
int i_lastShownVolume;
input_state_e cachedInputState;
......
......@@ -388,15 +388,6 @@ static VLCMain *_o_sharedMainInstance = nil;
[o_msgs_panel setExcludedFromWindowsMenu: YES];
[o_msgs_panel setDelegate: self];
/* In code and not in Nib for 10.4 compat */
NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier:@"mainControllerToolbar"] autorelease];
[toolbar setDelegate:self];
[toolbar setShowsBaselineSeparator:NO];
[toolbar setAllowsUserCustomization:NO];
[toolbar setDisplayMode:NSToolbarDisplayModeIconOnly];
[toolbar setAutosavesConfiguration:YES];
[o_window setToolbar:toolbar];
o_key = [NSString stringWithFormat:@"%s", config_GetPsz( p_intf, "key-quit" )];
[o_mi_quit setKeyEquivalent: [self VLCKeyToString: o_key]];
[o_mi_quit setKeyEquivalentModifierMask: [self VLCModifiersToCocoa:o_key]];
......@@ -466,7 +457,7 @@ static VLCMain *_o_sharedMainInstance = nil;
o_key = [NSString stringWithFormat:@"%s", config_GetPsz( p_intf, "key-zoom-double" )];
[o_mi_double_window setKeyEquivalent: [self VLCKeyToString: o_key]];
[o_mi_double_window setKeyEquivalentModifierMask: [self VLCModifiersToCocoa:o_key]];
var_Create( p_intf, "intf-change", VLC_VAR_BOOL );
[self setSubmenusEnabled: FALSE];
......@@ -474,32 +465,8 @@ static VLCMain *_o_sharedMainInstance = nil;
[self manageVolumeSlider];
[o_window setDelegate: self];
b_restore_size = false;
// Set that here as IB seems to be buggy
[o_window setContentMinSize:NSMakeSize(338., 30.)];
if( [o_window contentRectForFrameRect:[o_window frame]].size.height <= 169. )
{
b_small_window = YES;
[o_window setFrame: NSMakeRect( [o_window frame].origin.x,
[o_window frame].origin.y, [o_window frame].size.width,
[o_window minSize].height ) display: YES animate:YES];
[o_playlist_view setAutoresizesSubviews: NO];
}
else
{
b_small_window = NO;
NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
[o_playlist_view setFrame: NSMakeRect( 0, 0, contentRect.size.width, contentRect.size.height - [o_window contentMinSize].height )];
[o_playlist_view setNeedsDisplay:YES];
[o_playlist_view setAutoresizesSubviews: YES];
[[o_window contentView] addSubview: o_playlist_view];
}
[self updateTogglePlaylistState];
o_size_with_playlist = [o_window contentRectForFrameRect:[o_window frame]].size;
[o_window setContentMinSize:NSMakeSize(500., 200.)];
p_playlist = pl_Get( p_intf );
......@@ -906,66 +873,6 @@ static VLCMain *_o_sharedMainInstance = nil;
[[[o_controls voutView] window] orderOut:self];
}
#pragma mark -
#pragma mark Toolbar delegate
/* Our item identifiers */
static NSString * VLCToolbarMediaControl = @"VLCToolbarMediaControl";
- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
{
return [NSArray arrayWithObjects:
// NSToolbarCustomizeToolbarItemIdentifier,
// NSToolbarFlexibleSpaceItemIdentifier,
// NSToolbarSpaceItemIdentifier,
// NSToolbarSeparatorItemIdentifier,
VLCToolbarMediaControl,
nil ];
}
- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
{
return [NSArray arrayWithObjects:
VLCToolbarMediaControl,
nil ];
}
- (NSToolbarItem *) toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
{
NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease];
if( [itemIdentifier isEqual: VLCToolbarMediaControl] )
{
[toolbarItem setLabel:@"Media Controls"];
[toolbarItem setPaletteLabel:@"Media Controls"];
NSSize size = toolbarMediaControl.frame.size;
[toolbarItem setView:toolbarMediaControl];
[toolbarItem setMinSize:size];
size.width += 1000.;
[toolbarItem setMaxSize:size];
// Hack: For some reason we need to make sure
// that the those element are on top
// Add them again will put them frontmost
[toolbarMediaControl addSubview:o_scrollfield];
[toolbarMediaControl addSubview:o_timeslider];
[toolbarMediaControl addSubview:o_timefield];
[toolbarMediaControl addSubview:o_main_pgbar];
/* TODO: setup a menu */
}
else
{
/* itemIdentifier referred to a toolbar item that is not
* provided or supported by us or Cocoa
* Returning nil will inform the toolbar
* that this kind of item is not supported */
toolbarItem = nil;
}
return toolbarItem;
}
#pragma mark -
#pragma mark Media Key support
......@@ -1353,7 +1260,7 @@ unsigned int CocoaKeyToVLC( unichar i_key )
int i;
NSMutableString *tempString = [[[NSMutableString alloc] init] autorelease];
NSMutableString *tempStringPlus = [[[NSMutableString alloc] init] autorelease];
val.i_int = 0;
p_hotkeys = p_intf->p_libvlc->p_hotkeys;
......@@ -1379,10 +1286,10 @@ unsigned int CocoaKeyToVLC( unichar i_key )
[tempString appendString:@"Command-"];
[tempStringPlus appendString:@"Command+"];
}
[tempString appendString:[[o_event charactersIgnoringModifiers] lowercaseString]];
[tempStringPlus appendString:[[o_event charactersIgnoringModifiers] lowercaseString]];
key = [[o_event charactersIgnoringModifiers] characterAtIndex: 0];
switch( key )
......@@ -1419,13 +1326,13 @@ unsigned int CocoaKeyToVLC( unichar i_key )
assert( p_main );
unsigned confsize;
module_config_t *p_config;
p_config = module_config_get (p_main, &confsize);
for (size_t i = 0; i < confsize; i++)
{
module_config_t *p_item = p_config + i;
if( (p_item->i_type & CONFIG_ITEM) && p_item->psz_name != NULL
&& !strncmp( p_item->psz_name , "key-", 4 )
&& !EMPTY_STR( p_item->psz_text ) )
......@@ -1436,7 +1343,7 @@ unsigned int CocoaKeyToVLC( unichar i_key )
}
module_config_free (p_config);
module_release (p_main);
o_usedHotkeys = [[NSArray alloc] initWithArray: o_usedHotkeys copyItems: YES];
o_usedHotkeys = [[NSArray alloc] initWithArray: o_usedHotkeys copyItems: YES];
}
......@@ -2676,130 +2583,14 @@ end:
- (IBAction)togglePlaylist:(id)sender
{
NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
NSRect o_rect = [o_window contentRectForFrameRect:[o_window frame]];
/*First, check if the playlist is visible*/
if( contentRect.size.height <= 169. )
{
o_restore_rect = contentRect;
b_restore_size = true;
b_small_window = YES; /* we know we are small, make sure this is actually set (see case below) */
/* make large */
if( o_size_with_playlist.height > 169. )
o_rect.size.height = o_size_with_playlist.height;
else
o_rect.size.height = 500.;
if( o_size_with_playlist.width >= [o_window contentMinSize].width )
o_rect.size.width = o_size_with_playlist.width;
else
o_rect.size.width = [o_window contentMinSize].width;
o_rect.origin.x = contentRect.origin.x;
o_rect.origin.y = contentRect.origin.y - o_rect.size.height +
[o_window contentMinSize].height;
o_rect = [o_window frameRectForContentRect:o_rect];
NSRect screenRect = [[o_window screen] visibleFrame];
if( !NSContainsRect( screenRect, o_rect ) ) {
if( NSMaxX(o_rect) > NSMaxX(screenRect) )
o_rect.origin.x = ( NSMaxX(screenRect) - o_rect.size.width );
if( NSMinY(o_rect) < NSMinY(screenRect) )
o_rect.origin.y = ( NSMinY(screenRect) );
}
[o_btn_playlist setState: YES];
}
else
{
NSSize curSize = o_rect.size;
if( b_restore_size )
{
o_rect = o_restore_rect;
if( o_rect.size.height < [o_window contentMinSize].height )
o_rect.size.height = [o_window contentMinSize].height;
if( o_rect.size.width < [o_window contentMinSize].width )
o_rect.size.width = [o_window contentMinSize].width;
}
else
{
NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
/* make small */
o_rect.size.height = [o_window contentMinSize].height;
o_rect.size.width = [o_window contentMinSize].width;
o_rect.origin.x = contentRect.origin.x;
/* Calculate the position of the lower right corner after resize */
o_rect.origin.y = contentRect.origin.y +
contentRect.size.height - [o_window contentMinSize].height;
}
[o_playlist_view setAutoresizesSubviews: NO];
[o_playlist_view removeFromSuperview];
[o_btn_playlist setState: NO];
b_small_window = NO; /* we aren't small here just yet. we are doing an animated resize after this */
o_rect = [o_window frameRectForContentRect:o_rect];
}
[o_window setFrame: o_rect display:YES animate: YES];
NSLog( @"needs to be re-implemented" );
}
- (void)updateTogglePlaylistState
{
if( [o_window contentRectForFrameRect:[o_window frame]].size.height <= 169. )
[o_btn_playlist setState: NO];
else
[o_btn_playlist setState: YES];
[[self playlist] outlineViewSelectionDidChange: NULL];
}
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)proposedFrameSize
{
/* Not triggered on a window resize or maxification of the window. only by window mouse dragging resize */
/*Stores the size the controller one resize, to be able to restore it when
toggling the playlist*/
o_size_with_playlist = proposedFrameSize;
NSRect rect;
rect.size = proposedFrameSize;
if( [o_window contentRectForFrameRect:rect].size.height <= 169. )
{
if( b_small_window == NO )
{
/* if large and going to small then hide */
b_small_window = YES;
[o_playlist_view setAutoresizesSubviews: NO];
[o_playlist_view removeFromSuperview];
}
return NSMakeSize( proposedFrameSize.width, [o_window minSize].height);
}
return proposedFrameSize;
}
- (void)windowDidMove:(NSNotification *)notif
{
b_restore_size = false;
}
- (void)windowDidResize:(NSNotification *)notif
{
if( [o_window contentRectForFrameRect:[o_window frame]].size.height > 169. && b_small_window )
{
/* If large and coming from small then show */
[o_playlist_view setAutoresizesSubviews: YES];
NSRect contentRect = [o_window contentRectForFrameRect:[o_window frame]];
[o_playlist_view setFrame: NSMakeRect( 0, 0, contentRect.size.width, contentRect.size.height - [o_window contentMinSize].height )];
[o_playlist_view setNeedsDisplay:YES];
[[o_window contentView] addSubview: o_playlist_view];
b_small_window = NO;
}
[self updateTogglePlaylistState];
}
#pragma mark -
@end
......@@ -2912,7 +2703,7 @@ end:
// but we need to send a stop: to properly exits libvlc.
// However, we are not able to change the action-method sent by this standard menu item.
// thus we override terminat: to send a stop:
// see [af97f24d528acab89969d6541d83f17ce1ecd580] that introduced the removal of setjmp() and longjmp()
// see [af97f24d528acab89969d6541d83f17ce1ecd580] that introduced the removal of setjmp() and longjmp()
- (void)terminate:(id)sender
{
[self activateIgnoringOtherApps:YES];
......
......@@ -138,17 +138,7 @@
{
}
@end
/*****************************************************************************
* ITSliderCell
*****************************************************************************/
@interface ITSliderCell : NSSliderCell
{
NSImage *_knobOff;
NSImage *_knobOn;
BOOL b_mouse_down;
}
- (void)drawRect:(NSRect)rect;
- (void)drawKnobInRect:(NSRect)knobRect;
@end
......@@ -136,7 +136,7 @@ static NSMutableArray *blackoutWindows = NULL;
+ (NSScreen *)screenWithDisplayID: (CGDirectDisplayID)displayID
{
int i;
for( i = 0; i < [[NSScreen screens] count]; i++ )
{
NSScreen *screen = [[NSScreen screens] objectAtIndex: i];
......@@ -174,7 +174,7 @@ static NSMutableArray *blackoutWindows = NULL;
NSScreen *screen = [[NSScreen screens] objectAtIndex: i];
VLCWindow *blackoutWindow;
NSRect screen_rect;
if([self isScreen: screen])
continue;
......@@ -189,13 +189,13 @@ static NSMutableArray *blackoutWindows = NULL;
backing: NSBackingStoreBuffered defer: NO screen: screen];
[blackoutWindow setBackgroundColor:[NSColor blackColor]];
[blackoutWindow setLevel: NSFloatingWindowLevel]; /* Disappear when Expose is triggered */
[blackoutWindow displayIfNeeded];
[blackoutWindow orderFront: self animate: YES];
[blackoutWindows addObject: blackoutWindow];
[blackoutWindow release];
if( [screen isMainScreen ] )
SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
}
......@@ -210,7 +210,7 @@ static NSMutableArray *blackoutWindows = NULL;
VLCWindow *blackoutWindow = [blackoutWindows objectAtIndex: i];
[blackoutWindow closeAndAnimate: YES];
}
SetSystemUIMode( kUIModeNormal, 0);
}
......@@ -253,7 +253,7 @@ static NSMutableArray *blackoutWindows = NULL;
- (void)closeAndAnimate: (BOOL)animate
{
NSInvocation *invoc;
if (!animate)
{
[super close];
......@@ -334,7 +334,7 @@ static NSMutableArray *blackoutWindows = NULL;
NSViewAnimation *anim;
NSViewAnimation *current_anim;
NSMutableDictionary *dict;
if (!animate)
{
[super orderFront: sender];
......@@ -356,11 +356,11 @@ static NSMutableArray *blackoutWindows = NULL;
dict = [[NSMutableDictionary alloc] initWithCapacity:2];
[dict setObject:self forKey:NSViewAnimationTargetKey];
[dict setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict, nil]];
[dict release];
[anim setAnimationBlockingMode:NSAnimationNonblocking];
[anim setDuration:0.5];
[anim setFrameRate:30];
......@@ -634,7 +634,7 @@ void _drawKnobInRect(NSRect knobRect)
// Center knob in given rect
knobRect.origin.x += (int)((float)(knobRect.size.width - 7)/2.0);
knobRect.origin.y += (int)((float)(knobRect.size.height - 7)/2.0);
// Draw diamond
NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 3, knobRect.origin.y + 6, 1, 1), NSCompositeSourceOver);
NSRectFillUsingOperation(NSMakeRect(knobRect.origin.x + 2, knobRect.origin.y + 5, 3, 1), NSCompositeSourceOver);
......@@ -661,7 +661,7 @@ void _drawFrameInRect(NSRect frameRect)
NSRectClip(NSZeroRect);
[super drawRect:rect];
[[NSGraphicsContext currentContext] restoreGraphicsState];
// Full size
rect = [self bounds];
int diff = (int)(([[self cell] knobThickness] - 7.0)/2.0) - 1;
......@@ -669,13 +669,13 @@ void _drawFrameInRect(NSRect frameRect)
rect.origin.y += diff;
rect.size.width -= 2*diff-2;
rect.size.height -= 2*diff;
// Draw dark
NSRect knobRect = [[self cell] knobRectFlipped:NO];
[[[NSColor blackColor] colorWithAlphaComponent:0.6] set];
_drawFrameInRect(rect);
_drawKnobInRect(knobRect);
// Draw shadow
[[[NSColor blackColor] colorWithAlphaComponent:0.1] set];
rect.origin.x++;
......@@ -695,90 +695,31 @@ void _drawFrameInRect(NSRect frameRect)
@implementation ITSlider
- (void)awakeFromNib
{
if ([[self cell] class] != [ITSliderCell class]) {
// replace cell
NSSliderCell *oldCell = [self cell];
NSSliderCell *newCell = [[[ITSliderCell alloc] init] autorelease];
[newCell setTag:[oldCell tag]];
[newCell setTarget:[oldCell target]];
[newCell setAction:[oldCell action]];
[newCell setControlSize:[oldCell controlSize]];
[newCell setType:[oldCell type]];
[newCell setState:[oldCell state]];
[newCell setAllowsTickMarkValuesOnly:[oldCell allowsTickMarkValuesOnly]];
[newCell setAltIncrementValue:[oldCell altIncrementValue]];
[newCell setControlTint:[oldCell controlTint]];
[newCell setKnobThickness:[oldCell knobThickness]];
[newCell setMaxValue:[oldCell maxValue]];
[newCell setMinValue:[oldCell minValue]];
[newCell setDoubleValue:[oldCell doubleValue]];
[newCell setNumberOfTickMarks:[oldCell numberOfTickMarks]];
[newCell setEditable:[oldCell isEditable]];
[newCell setEnabled:[oldCell isEnabled]];
[newCell setFormatter:[oldCell formatter]];
[newCell setHighlighted:[oldCell isHighlighted]];
[newCell setTickMarkPosition:[oldCell tickMarkPosition]];
[self setCell:newCell];
}
}
@end
/*************************************************************************** **
* ITSliderCell
*****************************************************************************/
@implementation ITSliderCell
- (id)init
- (void)drawKnobInRect:(NSRect)knobRect
{
self = [super init];
_knobOff = [NSImage imageNamed:@"volumeslider_normal"];
_knobOn = [NSImage imageNamed:@"volumeslider_graphite"];
b_mouse_down = FALSE;
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
[_knobOff release];
[_knobOn release];
[super dealloc];
}
- (void)drawKnob:(NSRect)knob_rect
{
NSImage *knob;
if( b_mouse_down )
knob = _knobOn;
else
knob = _knobOff;
[[self controlView] lockFocus];
[knob compositeToPoint:NSMakePoint( knob_rect.origin.x + 1,
knob_rect.origin.y + knob_rect.size.height -2 )
operation:NSCompositeSourceOver];
[[self controlView] unlockFocus];
NSRect image_rect;
NSImage *img = [NSImage imageNamed:@"volume-slider-knob"];
image_rect.size = [img size];
image_rect.origin.x = 0;
image_rect.origin.y = 0;
knobRect.origin.x += (knobRect.size.width - image_rect.size.width) / 2;
knobRect.size.width = image_rect.size.width;
knobRect.size.height = image_rect.size.height;
[img drawInRect:knobRect fromRect:image_rect operation:NSCompositeSourceOver fraction:1];
}
- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:
(NSView *)controlView mouseIsUp:(BOOL)flag
- (void)drawRect:(NSRect)rect
{
b_mouse_down = NO;
[self drawKnob];