/* $Id: PictureController.mm,v 1.11 2005/08/01 15:10:44 titer Exp $
This file is part of the HandBrake source code.
- Homepage: <http://handbrake.m0k.org/>.
+ Homepage: <http://handbrake.fr/>.
It may be used under the terms of the GNU General Public License. */
#include "PictureController.h"
- (id)initWithDelegate:(id)del
{
- if (self = [super init])
+ if (self = [super initWithWindowNibName:@"PictureSettings"])
{
+ // NSWindowController likes to lazily load its window. However since
+ // this controller tries to set all sorts of outlets before the window
+ // is displayed, we need it to load immediately. The correct way to do
+ // this, according to the documentation, is simply to invoke the window
+ // getter once.
+ //
+ // If/when we switch a lot of this stuff to bindings, this can probably
+ // go away.
+ [self window];
+
delegate = del;
- [self loadMyNibFile];
fPicturePreviews = [[NSMutableDictionary dictionaryWithCapacity: HB_NUM_HBLIB_PICTURES] retain];
}
return self;
[fDeinterlacePopUp addItemWithTitle: @"Fast"];
[fDeinterlacePopUp addItemWithTitle: @"Slow"];
[fDeinterlacePopUp addItemWithTitle: @"Slower"];
- [fDeinterlacePopUp addItemWithTitle: @"Slowest"];
/* Set deinterlaces level according to the integer in the main window */
[fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
[fDenoisePopUp addItemWithTitle: @"Strong"];
/* Set denoises level according to the integer in the main window */
[fDenoisePopUp selectItemAtIndex: fPictureFilterSettings.denoise];
+
+ /* we use a popup to show the decomb settings */
+ [fDecombPopUp removeAllItems];
+ [fDecombPopUp addItemWithTitle: @"None"];
+ [fDecombPopUp addItemWithTitle: @"Default"];
+ [fDecombPopUp addItemWithTitle: @"Custom"];
+ /* Set denoises level according to the integer in the main window */
+ [fDecombPopUp selectItemAtIndex: fPictureFilterSettings.decomb];
}
}
fPictureFilterSettings.detelecine = [fDetelecineCheck state];
fPictureFilterSettings.deblock = [fDeblockCheck state];
- //job->pixel_ratio = ( [fPARCheck state] == NSOnState );
+ fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem];
+
autoCrop = ( [fCropMatrix selectedRow] == 0 );
[fCropTopStepper setEnabled: !autoCrop];
[fCropBottomStepper setEnabled: !autoCrop];
{
if ([delegate respondsToSelector:@selector(pictureSettingsDidChange)])
[delegate pictureSettingsDidChange];
-
- [NSApp endSheet: fPicturePanel];
- [fPicturePanel orderOut: self];
+
+ [NSApp endSheet:[self window]];
+ [[self window] orderOut:self];
}
- (BOOL) autoCrop
- (void) setDeinterlace: (int) setting {
fPictureFilterSettings.deinterlace = setting;
}
+- (int) decomb
+{
+ return fPictureFilterSettings.decomb;
+}
+- (void) setDecomb: (int) setting {
+ fPictureFilterSettings.decomb = setting;
+}
- (int) denoise
{
return fPictureFilterSettings.denoise;
- (void)showPanelInWindow: (NSWindow *)fWindow forTitle: (hb_title_t *)title
{
[self SetTitle:title];
-
- [NSApp beginSheet:fPicturePanel
+
+ [NSApp beginSheet:[self window]
modalForWindow:fWindow
modalDelegate:nil
didEndSelector:nil
for (int r = 0; r < dstHeight; r++)
{
for (int c = 0; c < dstWidth; c++)
+#if TARGET_RT_LITTLE_ENDIAN
*dst++ = Endian32_Swap(*src++);
+#else
+ *dst++ = *src++;
+#endif
src += (srcWidth - dstWidth); // skip to next row in src
}
UInt32 * src = (UInt32 *)buffer;
UInt32 * dst = (UInt32 *)[imgrep bitmapData];
for (int i = 0; i < numPixels; i++)
+#if TARGET_RT_LITTLE_ENDIAN
*dst++ = Endian32_Swap(*src++);
+#else
+ *dst++ = *src++;
+#endif
NSImage * img = [[[NSImage alloc] initWithSize: NSMakeSize(width, height)] autorelease];
[img addRepresentation:imgrep];
[fPicturePreviews removeAllObjects];
}
-- (BOOL) loadMyNibFile
-{
- if(![NSBundle loadNibNamed:@"PictureSettings" owner:self])
- {
- NSLog(@"Warning! Could not load myNib file.\n");
- return NO;
- }
-
- return YES;
-}
-
@end
@implementation PictureController (Private)
// -[PictureController(Private) optimalViewSizeForImageSize:]
//
// Given the size of the preview image to be shown, returns the best possible
-// size for the OpenGL view.
+// size for the view.
//
- (NSSize)optimalViewSizeForImageSize: (NSSize)imageSize
{
// The min size is 320x240
float minWidth = 320.0;
float minHeight = 240.0;
-
+
// The max size of the view is when the sheet is taking up 85% of the screen.
NSSize screenSize = [[NSScreen mainScreen] frame].size;
- NSSize sheetSize = [fPicturePanel frame].size;
+ NSSize sheetSize = [[self window] frame].size;
NSSize viewAreaSize = [fPictureViewArea frame].size;
float paddingX = sheetSize.width - viewAreaSize.width;
float paddingY = sheetSize.height - viewAreaSize.height;
//
// -[PictureController(Private) resizePanelForViewSize:animate:]
//
-// Resizes the entire sheet to accomodate an OpenGL view of a particular size.
+// Resizes the entire sheet to accomodate a view of a particular size.
//
- (void)resizeSheetForViewSize: (NSSize)viewSize
{
NSSize currentSize = [fPictureViewArea frame].size;
float deltaX = viewSize.width - currentSize.width;
float deltaY = viewSize.height - currentSize.height;
-
+
// Now resize the whole panel by those same deltas, but don't exceed the min
- NSRect frame = [fPicturePanel frame];
- NSSize maxSize = [fPicturePanel maxSize];
- NSSize minSize = [fPicturePanel minSize];
+ NSRect frame = [[self window] frame];
+ NSSize maxSize = [[self window] maxSize];
+ NSSize minSize = [[self window] minSize];
frame.size.width += deltaX;
frame.size.height += deltaY;
if( frame.size.width < minSize.width )
// But now the sheet is off-center, so also shift the origin to center it and
// keep the top aligned.
- frame.origin.x -= (deltaX / 2.0);
- frame.origin.y -= deltaY;
+ if( frame.size.width != [[self window] frame].size.width )
+ frame.origin.x -= (deltaX / 2.0);
+
+ if( frame.size.height != [[self window] frame].size.height )
+ frame.origin.y -= deltaY;
- [fPicturePanel setFrame:frame display:YES animate:YES];
+ [[self window] setFrame:frame display:YES animate:YES];
}
//
// -[PictureController(Private) setViewSize:]
//
-// Changes the OpenGL view's size and centers it vertially inside of its area.
+// Changes the view's size and centers it vertically inside of its area.
// Assumes resizeSheetForViewSize: has already been called.
//
- (void)setViewSize: (NSSize)viewSize