From 198c0b4601453d4debf96a0b6809d0ffb497ecdc Mon Sep 17 00:00:00 2001 From: dynaflash Date: Fri, 1 May 2009 19:54:18 +0000 Subject: [PATCH] MacGui: Custom Anamorphic initial implementation (experimental) and pic settings and preview changes. - Custom Anamorphic mode allows more customization of pixel and display dimensions. -- NOTE: The layout and even functionality are considered very experimental and not ready for prime time yet. -- Change to hb_get_preview allowing a preview size > title->width and height courtesy of jbjake. -- Allows setting the modulus to 16 (default), 8, 4, 2, or 1. -- Adds display height, pixel width and pixel height fields. - Picture Inspector: -- Changes shape and size according to the size/filter tab and anamorphic and filter settings. - Picture Preview: -- Now crops the gray borders from around the image returned from hb_get_preview and recreates cropping and resizing itself. -- Add size and scale information to the preview window title bar so you can see it without activating the hud controls. -- Attempt to fix the intermittent aliasing problem with the hud control overlay by making sure the hud origin is a whole int (fix courtesy of KonaB1end). - Known Issues: -- Scale to Screen mode is currently borked. The actual image does not scale yet. -- Depending on how far you upscale the display dimensions in custom anamorphic, the preview image can get a bit wonky. Returning to one of the standard modes clears it up. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2362 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- libhb/hb.c | 47 +- macosx/Controller.mm | 34 +- macosx/English.lproj/PicturePreview.xib | 56 +- macosx/English.lproj/PictureSettings.xib | 3192 +++++++++++++--------- macosx/HBPreviewController.mm | 190 +- macosx/PictureController.h | 59 +- macosx/PictureController.mm | 906 +++++- 7 files changed, 2996 insertions(+), 1488 deletions(-) diff --git a/libhb/hb.c b/libhb/hb.c index d688eed23..ff8524956 100644 --- a/libhb/hb.c +++ b/libhb/hb.c @@ -465,31 +465,34 @@ void hb_get_preview( hb_handle_t * h, hb_title_t * title, int picture, // Free context sws_freeContext( context ); - /* Gray background */ - p32 = (uint32_t *) buffer; - for( i = 0; i < ( title->width + 2 ) * ( title->height + 2 ); i++ ) + if( job->height < title->height || job->width < title->width ) { - p32[i] = 0xFF808080; - } + /* Gray background */ + p32 = (uint32_t *) buffer; + for( i = 0; i < ( title->width + 2 ) * ( title->height + 2 ); i++ ) + { + p32[i] = 0xFF808080; + } - /* Draw the picture, centered, and draw the cropping zone */ - preview_size = pic_preview.linesize[0]; - pen = buffer + ( title->height - job->height ) * - ( title->width + 2 ) * 2 + ( title->width - job->width ) * 2; - memset( pen, 0xFF, 4 * ( job->width + 2 ) ); - pen += 4 * ( title->width + 2 ); - for( i = 0; i < job->height; i++ ) - { - uint8_t * nextLine; - nextLine = pen + 4 * ( title->width + 2 ); - memset( pen, 0xFF, 4 ); - pen += 4; - memcpy( pen, buf4 + preview_size * i, 4 * job->width ); - pen += 4 * job->width; - memset( pen, 0xFF, 4 ); - pen = nextLine; + /* Draw the picture, centered, and draw the cropping zone */ + preview_size = pic_preview.linesize[0]; + pen = buffer + ( title->height - job->height ) * + ( title->width + 2 ) * 2 + ( title->width - job->width ) * 2; + memset( pen, 0xFF, 4 * ( job->width + 2 ) ); + pen += 4 * ( title->width + 2 ); + for( i = 0; i < job->height; i++ ) + { + uint8_t * nextLine; + nextLine = pen + 4 * ( title->width + 2 ); + memset( pen, 0xFF, 4 ); + pen += 4; + memcpy( pen, buf4 + preview_size * i, 4 * job->width ); + pen += 4 * job->width; + memset( pen, 0xFF, 4 ); + pen = nextLine; + } + memset( pen, 0xFF, 4 * ( job->width + 2 ) ); } - memset( pen, 0xFF, 4 * ( job->width + 2 ) ); // Clean up avpicture_free( &pic_preview ); diff --git a/macosx/Controller.mm b/macosx/Controller.mm index b83636849..6d929a010 100644 --- a/macosx/Controller.mm +++ b/macosx/Controller.mm @@ -651,8 +651,6 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It NSLocalizedString( @"Scanning title %d of %d...", @"" ), p.title_cur, p.title_count]]; [fScanIndicator setHidden: NO]; - double scanProgress = ( p.title_cur - 1 ) / p.title_count; - //[fScanIndicator setDoubleValue: 100.0 * scanProgress]; [fScanIndicator setDoubleValue: 100.0 * ((double)( p.title_cur - 1 ) / p.title_count)]; break; } @@ -1974,6 +1972,19 @@ fWorkingCount = 0; [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->height] forKey:@"PictureHeight"]; [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->keep_ratio] forKey:@"PictureKeepRatio"]; [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->anamorphic.mode] forKey:@"PicturePAR"]; + /* if we are custom anamorphic, store the exact storage, par and display dims */ + if (fTitle->job->anamorphic.mode == 3) + { + [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->width] forKey:@"PicturePARStorageWidth"]; + [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->height] forKey:@"PicturePARStorageHeight"]; + + [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->anamorphic.par_width] forKey:@"PicturePARPixelWidth"]; + [queueFileJob setObject:[NSNumber numberWithInt:fTitle->job->anamorphic.par_height] forKey:@"PicturePARPixelHeight"]; + + [queueFileJob setObject:[NSNumber numberWithFloat:fTitle->job->anamorphic.dar_width] forKey:@"PicturePARDisplayWidth"]; + [queueFileJob setObject:[NSNumber numberWithFloat:fTitle->job->anamorphic.dar_height] forKey:@"PicturePARDisplayHeight"]; + + } NSString * pictureSummary; pictureSummary = [fPictureSizeField stringValue]; [queueFileJob setObject:pictureSummary forKey:@"PictureSizingSummary"]; @@ -3090,7 +3101,18 @@ fWorkingCount = 0; job->keep_ratio = [[queueToApply objectForKey:@"PictureKeepRatio"] intValue]; job->anamorphic.mode = [[queueToApply objectForKey:@"PicturePAR"] intValue]; - + if ([[queueToApply objectForKey:@"PicturePAR"] intValue] == 3) + { + /* insert our custom values here for capuj */ + job->width = [[queueToApply objectForKey:@"PicturePARStorageWidth"] intValue]; + job->height = [[queueToApply objectForKey:@"PicturePARStorageHeight"] intValue]; + + job->anamorphic.par_width = [[queueToApply objectForKey:@"PicturePARPixelWidth"] intValue]; + job->anamorphic.par_height = [[queueToApply objectForKey:@"PicturePARPixelHeight"] intValue]; + + job->anamorphic.dar_width = [[queueToApply objectForKey:@"PicturePARDisplayWidth"] floatValue]; + job->anamorphic.dar_height = [[queueToApply objectForKey:@"PicturePARDisplayHeight"] floatValue]; + } /* Here we use the crop values saved at the time the preset was saved */ job->crop[0] = [[queueToApply objectForKey:@"PictureTopCrop"] intValue]; @@ -3740,7 +3762,7 @@ fWorkingCount = 0; /* Reset the new title in fPictureController && fPreviewController*/ [fPictureController SetTitle:title]; - //[fPictureController SetTitle:title]; + /* Update subtitle popups */ hb_subtitle_t * subtitle; [fSubPopUp removeAllItems]; @@ -3796,7 +3818,7 @@ fWorkingCount = 0; [self calculatePictureSizing:nil]; /* lets call tableViewSelected to make sure that any preset we have selected is enforced after a title change */ - [self selectPreset:nil]; + [self selectPreset:nil]; } - (IBAction) chapterPopUpChanged: (id) sender @@ -4429,7 +4451,7 @@ the user is using "Custom" settings by determining the sender*/ } [fVideoFiltersField setStringValue: [NSString stringWithFormat:@"Video Filters: %@", videoFilters]]; - [fPictureController reloadStillPreview]; + //[fPictureController reloadStillPreview]; } diff --git a/macosx/English.lproj/PicturePreview.xib b/macosx/English.lproj/PicturePreview.xib index 95df9d203..359a7ca8b 100644 --- a/macosx/English.lproj/PicturePreview.xib +++ b/macosx/English.lproj/PicturePreview.xib @@ -8,7 +8,7 @@ 353.00 YES - + YES @@ -38,7 +38,7 @@ 7 2 - {{482, 423}, {475, 433}} + {{482, 422}, {573, 434}} 1886913536 HandBrake Preview NSPanel @@ -76,16 +76,16 @@ NeXT TIFF v4.0 pasteboard type - {{-1, -2}, {475, 450}} + {{6, 29}, {535, 315}} YES 130560 33554432 0 - 1 + 0 0 - NO + YES YES @@ -102,7 +102,7 @@ QTMoviePasteboardType - {{-10, -2}, {484, 450}} + {{-10, -1}, {460, 450}} 1 @@ -451,7 +451,7 @@ - {{30, 114}, {420, 100}} + {{14, 114}, {420, 100}} {0, 0} @@ -575,7 +575,7 @@ - {{29, 266}, {420, 100}} + {{13, 266}, {420, 100}} {0, 0} @@ -602,11 +602,11 @@ - {{1, 1}, {473, 431}} + {{1, 1}, {571, 432}} - {475, 433} + {573, 434} {0, 0} @@ -627,7 +627,7 @@ NO - {475, 433} + {573, 434} {{0, 0}, {1440, 878}} @@ -891,27 +891,13 @@ YES - + - - 179 - - - YES - - - - - - 180 - - - 207 @@ -1134,6 +1120,20 @@ + + 179 + + + YES + + + + + + 180 + + + @@ -1295,9 +1295,9 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{34, 423}, {475, 433}} + {{33, 422}, {573, 434}} - {{34, 423}, {475, 433}} + {{33, 422}, {573, 434}} {{221, 276}, {533, 580}} diff --git a/macosx/English.lproj/PictureSettings.xib b/macosx/English.lproj/PictureSettings.xib index 90a8a15d9..2630cee4c 100644 --- a/macosx/English.lproj/PictureSettings.xib +++ b/macosx/English.lproj/PictureSettings.xib @@ -8,7 +8,7 @@ 353.00 YES - + YES @@ -37,7 +37,7 @@ 8215 2 - {{1211, 290}, {311, 447}} + {{63, 414}, {849, 399}} -260570112 Picture Settings NSPanel @@ -53,7 +53,7 @@ 256 - {{19, 522}, {55, 17}} + {{19, 474}, {55, 17}} YES @@ -84,7 +84,7 @@ 268 - {{19, 421}, {57, 25}} + {{19, 373}, {57, 25}} YES @@ -122,7 +122,7 @@ 292 - {{19, 20}, {275, 19}} + {{18, 6}, {425, 19}} YES @@ -143,8 +143,8 @@ - 12 - {{15, 40}, {283, 373}} + 18 + {{15, 19}, {821, 362}} YES @@ -168,21 +168,129 @@ 256 YES - + - 265 + 268 YES - - + + 256 YES - - + + + 256 + {{203, 93}, {82, 16}} + + YES + + 67239424 + 71434240 + Display Width: + + + + + + + + 292 - {{146, 62}, {19, 28}} - + {{289, 93}, {61, 16}} + + YES + + -1804468671 + 4457472 + + + + YES + + 1 + MC4yIDAuMiAwLjIAA + + + + + + + 292 + {{446, 94}, {37, 16}} + + YES + + -1804468671 + 4457472 + + + + YES + + 1 + MC4yIDAuMiAwLjIAA + + + + + + + 292 + {{446, 52}, {37, 16}} + + YES + + -1804468671 + 4457472 + + + + YES + + 1 + MC4yIDAuMiAwLjIAA + + + + + + + 256 + {{375, 94}, {67, 16}} + + YES + + 67239424 + 71434240 + PAR Width: + + + + + + + + + 256 + {{370, 52}, {71, 16}} + + YES + + 67239424 + 71434240 + PAR Height: + + + + + + + + + 292 + {{155, 90}, {15, 22}} + YES YES @@ -197,34 +305,24 @@ YES - - YES - - - 6.000000e-01 - 4.500000e-01 - 3.000000e-01 - 1.000000e+00 - - - YES - - YES - - 917024 - 0 - + + 68025888 + 131072 + + + 6.400000e+01 + 6.400000e+01 5.900000e+01 - 2.000000e+00 + 1.600000e+01 YES - - + + 292 - {{189, 32}, {19, 28}} - + {{91, 9}, {46, 15}} + YES YES @@ -235,26 +333,151 @@ 7.019608e-01 1.000000e+00 - + YES YES - - 917024 - 0 - + + -2076049856 + 264192 + + + 109199615 + 1 + + + 400 + 75 + + + 16 + + 1048576 + 2147483647 + 1 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + 8 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 4 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + 1 + YES + YES + 2 + + + + + 292 + {{91, 95}, {62, 16}} + + YES + + -2075001280 + 4457472 + + + + YES + + 1 + MC4yIDAuMiAwLjIAA + + + + + + + 292 + {{155, 49}, {15, 22}} + + YES + + 68025888 + 131072 + + + 5.900000e+01 + 6.400000e+01 5.900000e+01 - 2.000000e+00 + 1.600000e+01 YES - - - 256 - {{52, 93}, {20, 40}} - - YES + + + 292 + {{10, 31}, {73, 14}} + + YES + + 67239488 + 71435264 + Anamorphic: + + + + + + + + + 292 + {{28, 55}, {55, 14}} + + YES + + 67239424 + 71434240 + Height: + + + + + + + + + 292 + {{90, 30}, {80, 15}} + YES @@ -269,221 +492,119 @@ YES - 2 - 1 - - YES - - -2080244224 - 131072 - Automatic - - - 1211912703 - 0 - - NSRadioButton - - - - - - 200 - 25 - - - 67239424 - 131072 - Custom: - - - 1211912703 - 0 - - - - 400 - 75 + + -2076049856 + 264192 + + + 109199615 + 1 + + + 400 + 75 + + + Item 1 + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + - - {20, 18} - {4, 4} - 1143480320 - NSActionCell - - 67239424 - 0 - Radio - - LucidaGrande - 1.300000e+01 - 1044 - - 1211912703 - 0 - - 549453824 - {18, 18} - + YES + + OtherViews + YES - - YES - - - - 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 -AAAAAGB8AAA5DAAABbxYWVogAAAAAAAAb3IAALBfAAAciVhZWiAAAAAAAAAm6AAAFq8AALDfWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAgAAAB4AaQDaAV8B/ALQA9sFIAbTCNMLPA4EEJ8THxVuF6EZnxt9HT8e4CBzIf8jfCT7JnUn5ilV -KsIsKS2QLvkwYjHTM0g0wTY3N544/TpWO6Y88D41P3ZAt0H6Qz1Eg0XERvhIIklLSmpLhUycTbBOxE/Z -UPBSC1MpVFJVfFasV9tZClo1W1lcc12AXoVfgGBzYZJivGPrZR1mVGeIaMJp+msvbGJtj26qb5NwZ3FE -citzGnQRdRF2F3cfeCh5L3o0ezx8Q31HfkZ/QoA4gSqCG4MMg/yE7oXihtaHyYi5iaaKkIt5jGGNS444 -jyiQG5EQkgWS9JPflMiVrJaPl22YS5krmgya8JvXnL6dnp52n0ugHqDuobuihqNSpB+k7qXAppKndKhb -qUWqMasdrAes7q3RrquvfLBFsROx77Lcs860wbW6tq+3pbiauYu6e7tkvD+9Bb25vnO/NL/8wMvBo8KA -w2DEQcUixgPG48fGyKPJfMpRyyPL8sy8zYbOTs8Wz97QpdFn0ifS59Oj1F7VGtXV1pTXVNgX2N3Zo9pj -2yHb3tyV3U3eBN6733TgMODv4bLic+My4+/kpuVa5gzmuudo6BboxOl16ifq3euc7FTtA+2a7iXuoe8Y -74bv+fCc8WLyRfMM84/0EfSM9Qr1lfYq9tb3qfiu+f78YP//AAAAFwBQAKcBGQGsAmkDWQR+BdsHiQl9 -C7gOGxCeExsVbReKGX8bQxzZHjsfkSDjIjwjmST8JlknvCkmKo0r8y1aLsEwJTGEMuA0PjWRNuM4NDl4 -Ors79D0sPls/i0C3Qd5DBEQgRUBGVkdqSHpJhkqPS5hMn02kTqhPqVCrUbJSxVPdVPJWBlcYWChZM1o+ -W0dcT11WXl5fY2BuYXZigWOQZJ9lr2bDZ85ox2m0ap9riWx0bWJuUG8+cC1xHnIQcwNz93TudeZ233fa -eNh513rUe818u32dfnp/WoA9gSOCC4L0g9+EzIW5hqWHj4h6iWeKT4s3jByM/43gjsCPnpCKkW6SVpM7 -lB+VAJXflr2XmJhxmUiaHprzm8WclZ1mnjWfAp/PoJ+hcaJVoz2kJaUOpfam3afDqKipjKpwq1SsOK0b -rfyu3q+/sKKxgrJks0W0I7T6tcu2mbdsuD+5E7npusG7nbx6vVm+Or8ewAPA6cHNwrjDnsSIxXPGWsc5 -yA/I48m3ypPLb8xNzSzODc7uz9DQr9GN0mfTPtQS1OTVr9Z31zvX/NjC2a3amtuH3HHdV9473xrf9ODP -4aPic+M/5Ank0uWW5lnnHOfd6J3pXOoh6vTryeyS7VfuGu7X75TwT/EH8cTygfNB9AT00vWq9o/3hviV -+cn7Tv1t//8AAAAOADAAYwCnAPkBYwHcAoUDXgR4BdEHjQlsCzoM7g6KEA0RbBK7E/0VKRZMF2sYexmC -GoYbjRyWHaIerR+5IMMhyyLPI9EkyiW8JqonlSh8KWEqRSsqLBEs+y3nLtQvvjCfMXkyUTMiM+40tzV/ -NkY3CzfUOJ85bjpFOyE8AjzlPcg+qj+HQGBBMEH3QrhDe0RSRTdGHkcIR/NI30nMSrhLoEyGTWdORE7p -T41QM1DhUZZSUFMUU9tUpFVuVjdXAFfMWJpZZlowWvZbulx7XT1d/l7BX4VgTGETYdlinWNeZBxk2WWW -ZlJnEmfUaJdpXWogat9rnGxXbQ9txm5+bzdv8nCwcXFyNnL4c7Z0cHUkddd2hncyd914iHk0eeJ6kntF -fAZ8z32bfmp/O4ALgNmBo4JmgyGD14SJhVmGMIcNh+yIzomxipSLeIxXjTWOD47Yj42QJJC9kV6SB5K0 -k2qUJJThlaCWX5cfl+SYrJlzmjea+Zu5nHedNZ30nrSfdaA5oP6hxaKLo1GkFqTbpaGmaac2qAao2qmy -qo6raqxErR6t967Tr7CwkLF4smSzV7RPtUi2PrcxuCC5CrnwutS7trycvYC+Z79SwEHBOMI0wzTENsU5 -xjrHOMgyySbKFMr6y+DNLc6p0EjSDtQN1mPZFtxo4Ijlxuzn933//wAAbmRpbgAAAAAAAAY2AACX6QAA -W1AAAFSbAACOVgAAJ6QAABVgAABQDQAAVDkAAlwoAAIhRwABRR4AAwEAAAIAAAAaADgAUgBpAH8AkQCj -ALQAxADTAOIA8AD+AQwBGwEsATwBTgFgAXQBiAGeAbQBzAHmAgICHwI+Al8CggKoAs8C+AMiA08DfAOr -A9sEDQRBBHYErATkBR4FWQWUBdEGDwZNBosGygcJB0oHjAfRCBkIYwivCP4JTwmjCfkKUQqrCwULYQu+ -DBsMegzdDUYNsg4gDpMPCQ+CD/8QfRD9EX4SABKBEwMTgRQBFIAVABWCFgUWjBcYF6kYQhjiGYoaPRrV -G2kb/ByOHSEdsx5IHtsfcCAHIKEhPSHdIoAjTiQ4JRol9CbHJ5UoXikmKe4qtyuFLFUtJC32Ls0vqTCL -MXQyYjNTNEY1OzYuNyQ4GzkYOho7IjwtPTs+ST9UQF5BZ0JuQ31ElUWxRtZIAEkxSmVLmEzKTfpPKVBl -Ua9TAFRaVbxXJliQWfpbYFzGXhVfXmClYexjNmSHZd9nS2jIalxr1G0sbn5v0HEccm5zwHUWdnR31nlF -ett8uX6LgEWB7oOGhRaGoogwicCLVIzljoOQK5Hfk5+VbJc+mRWa8JzPnsGgt6K7pMOmz6jSqtOsyq7E -sNSy7bUXt0O5drugvcG/2cH4xCfGaMi8yyPNjM/60l/Uutb22V/cOt/A47bmauhQ6mLtyfFy9LX3XPlz -+xH8Yf0t/fj+iv8G/4P//wAAACIAQgBdAHYAjQCjALcAygDdAO4BAAERASIBNAFFAVcBaQF8AY8BpAG5 -AdAB6QIDAh8CPQJeAoICqQLXAwYDOANrA54D0gQHBDwEdASsBOUFHgVZBZQF0gYQBk8GkAbSBxYHXAej -B+sINgiDCNEJIQl1CcoKIgp+CtsLPAueDAIMagzUDUANsg4jDpoPEw+QEBAQlBEaEaISLhK7E00T4BR1 -FQQVkBYfFrEXRRfbGHUZExmyGlUa+huhHEkc9R2fHk0e+h+nIFUhBSGzImMjIiPyJMYlniZ3J08oKSkG -KeMqwCufLH4tXi49Lx4v/zDfMb8yojOINHk1fjaMN5c4ojmpOrM7vDzDPc0+2j/rQP1CDkMqREVFaEaQ -R7xI70oQSz1MZ02YTs1QClFJUpFT3VUwVoZX5FlIWq5cGl2NXv1gaWG1YwVkVGWnZvxoVmm0axVsd23d -b0RwsXIfc5F1A3Z6d/B5a3rzfI9+Mn/OgWyDCYSjhjmHzIleiu2Meo4Hj5mRIZK0lEKVzpdomR2a3Zyf -nlGgBaG3o2qlGqbNqIaqRawQreSvwrGys621v7fGuXK7Jrzbvp3AY8I3xBnF/sf0yfnMC84k0E7Se9Sw -1u3ZLNs63UXfduGy5AXmXOjF6yTtfu/S8gT0F/YK99H5b/rf/Bb9Bv3d/p3/Tv//AAAAOQBtAJQAtADQ -AOoBAAEWASwBQwFcAXcBkwGxAdIB9QIcAkYCcwKjAtgDEANKA4kDzQQVBF4EqQT1BUMFkwXlBjoGkgbt -B0sHsAgZCIcI+QlvCekKZQriC2AL3wxgDOcNeA4ODqwPUQ/9EK0RYRIVEsoTeRQmFNEVfhYtFuIXnhhl -GTkaHBrnG6ccZx0nHegeqx9vIDkhByHcIrgj5yUVJjQnSChRKVgqXitqLHgtgi6RL6cwxjHtMxg0RTVz -Np43zTkAOj47gzzOPh0/aECyQfpDSESmRgpHd0joSlpLx00wTpRQAVGCUw9UqlZTWAJZslteXQNegl/6 -YW5i4WRbZdxnc2kfauVsa23gb1FwvnIsc5p1CnaDeAF5jHtmfaV/wIG+g6SFfYdRiSeK+oy/jouQYZJB -lCqWFpgAmeqbz52wn5WhfaNspVmnQqkgqvesxK6MsFSyJLP3tci3l7lhux280L55wBzBwsNwxSbG6Mi0 -yorMZM460BTR59O21XnXL9jg2o/cO93p35/hW+Mk5Pnm4ujf6kPrfOyh7bnuwu+/8Kjxi/JV8xjzzvR2 -9R/1r/Y59sT3QPev+B/4jvjz+Ur5ovn5+lD6pPrk+yT7Zful++b8Jvxm/JH8vfzo/RP9P/1q/ZX9wf3s -/hj+SP5//rb+7P8j/1r/kf/I//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AABtbHVjAAAAAAAAAAIAAAAMZW5VUwAAABIAAAAoaXRJVAAAABQAAAA6AEMAbwBsAG8AcgAgAEwAQwBE -AEwAQwBEACAAYwBvAGwAbwByAGkAAG1tb2QAAAAAAAAGEAAAnGgAAAAAwhEOAAAAAAAAAAAAAAAAAAAA -AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - - + + + + Item 2 + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Item 3 + + 1048576 + 2147483647 + + + _popUpItemAction: + - - - 3 - MCAwAA - - 400 - 75 + 1 + YES + YES + 2 - - - - 3 - MQA + + + + 292 + {{10, 10}, {73, 14}} + + YES + + 67239488 + 71435264 + Modulus: + + + + - - - + + 292 - {{88, 66}, {56, 19}} - + {{0, 95}, {82, 14}} + YES - - -2075001280 - 4195328 - + + 67239424 + 71434240 + Width: - - YES - - 1 - MC4yIDAuMiAwLjIAA - + + - - + + 292 - {{88, 7}, {56, 19}} - + {{91, 52}, {62, 16}} + YES - + -2075001280 - 4195328 + 4457472 - - + + YES - - + + 292 - {{110, 32}, {19, 28}} - + {{153, 71}, {18, 18}} + YES YES @@ -499,210 +620,146 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - - 917024 - 0 - - 5.900000e+01 - 2.000000e+00 - YES + + 67239424 + 67239936 + Keep aspect ratio: + + + 1210864127 + 2 + + NSSwitch + + + + 200 + 25 - - + + 292 - {{131, 37}, {56, 19}} - + {{32, 73}, {123, 14}} + YES - - -2075001280 - 4195328 - + + 67239424 + 71434240 + Keep Aspect Ratio: - - YES - + + - - + + 292 - {{52, 37}, {56, 19}} - + {{173, 53}, {112, 14}} + YES - - -2075001280 - 4195328 - + + 67239424 + 71434240 + Keep Aspect Ratio: - - YES - - - - - - - 292 - {{147, 2}, {19, 28}} - - YES - - YES - - - 7.019608e-01 - 7.019608e-01 - 7.019608e-01 - 1.000000e+00 - - - YES - - - YES - - 917024 - 0 - - 5.900000e+01 - 2.000000e+00 - YES - - - - - 256 - {{77, 116}, {68, 17}} - - YES - - 67239424 - 4194304 - Automatic - - - - - - - - - 256 - {{77, 93}, {68, 17}} - - YES - - 67239424 - 4194304 - Custom - - - + + - {{2, 15}, {228, 144}} - + {{1, 1}, {511, 124}} + - {{14, 12}, {232, 161}} + {{0, 202}, {513, 126}} {0, 0} 67239424 0 - + Box 6 System textBackgroundColor - + + 3 + MQA + 3 MCAwLjgwMDAwMDAxAA - - 3 + + 1 0 - 5 + 0 NO - + 268 YES - - + + 256 YES - - - 256 - {{30, 60}, {55, 14}} - - YES - - 67239424 - 71303168 - Height: - - - - - 1 - MC44MDAwMDAwMSAwLjgwMDAwMDAxIDAuODAwMDAwMDEAA + + + 268 + {{165, 53}, {15, 22}} + + YES + + YES + + + 7.019608e-01 + 7.019608e-01 + 7.019608e-01 + 1.000000e+00 + + + YES - - - - 256 - {{32, 31}, {123, 17}} - - YES - - 67239424 - 71303168 - Keep Aspect Ratio: - - - - - 1 - MC44MDAwMDAwMSAwLjgwMDAwMDAxIDAuODAwMDAwMDEAA + + YES + + + 6.000000e-01 + 4.500000e-01 + 3.000000e-01 + 1.000000e+00 + + + YES - - - - 292 - {{93, 58}, {62, 19}} - YES - - -2075001280 - 4195328 - + + 68025888 + 131072 - - YES - - + + 5.900000e+01 + 2.000000e+00 + YES - - - 256 - {{157, 32}, {18, 18}} - + + + 268 + {{251, 41}, {15, 22}} + YES YES @@ -718,78 +775,244 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - - 67239424 - 67239936 - Keep aspect ratio: + + 68025888 + 131072 - - 1210864127 - 2 - - NSSwitch - - - - 200 - 25 - - - - - 292 - {{157, 53}, {19, 28}} - - YES - - 917024 - 0 - - 5.900000e+01 - 6.400000e+01 + 5.900000e+01 - 1.600000e+01 + 2.000000e+00 YES - - - 256 - {{30, 87}, {55, 14}} - + + + 268 + {{76, 88}, {20, 24}} + + + YES + + + 7.019608e-01 + 7.019608e-01 + 7.019608e-01 + 1.000000e+00 + + + YES + + YES - + 2 + 1 + + YES + + -2080244224 + 262144 + Automatic + + + 1211912703 + 0 + + NSRadioButton + + + + + + 200 + 25 + + + 67239424 + 262144 + Custom: + + + 1211912703 + 0 + + + + 400 + 75 + + + {20, 11} + {4, 2} + 1143480320 + NSActionCell + 67239424 - 71303168 - Width: - - - - + 262144 + Radio + + 1211912703 + 0 + + 549453824 + {18, 18} + + YES + + YES + + + + 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 +AAAAAGB8AAA5DAAABbxYWVogAAAAAAAAb3IAALBfAAAciVhZWiAAAAAAAAAm6AAAFq8AALDfWFlaIAAA +AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 +cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD +AQAAAgAAAB4AaQDaAV8B/ALQA9sFIAbTCNMLPA4EEJ8THxVuF6EZnxt9HT8e4CBzIf8jfCT7JnUn5ilV +KsIsKS2QLvkwYjHTM0g0wTY3N544/TpWO6Y88D41P3ZAt0H6Qz1Eg0XERvhIIklLSmpLhUycTbBOxE/Z +UPBSC1MpVFJVfFasV9tZClo1W1lcc12AXoVfgGBzYZJivGPrZR1mVGeIaMJp+msvbGJtj26qb5NwZ3FE +citzGnQRdRF2F3cfeCh5L3o0ezx8Q31HfkZ/QoA4gSqCG4MMg/yE7oXihtaHyYi5iaaKkIt5jGGNS444 +jyiQG5EQkgWS9JPflMiVrJaPl22YS5krmgya8JvXnL6dnp52n0ugHqDuobuihqNSpB+k7qXAppKndKhb +qUWqMasdrAes7q3RrquvfLBFsROx77Lcs860wbW6tq+3pbiauYu6e7tkvD+9Bb25vnO/NL/8wMvBo8KA +w2DEQcUixgPG48fGyKPJfMpRyyPL8sy8zYbOTs8Wz97QpdFn0ifS59Oj1F7VGtXV1pTXVNgX2N3Zo9pj +2yHb3tyV3U3eBN6733TgMODv4bLic+My4+/kpuVa5gzmuudo6BboxOl16ifq3euc7FTtA+2a7iXuoe8Y +74bv+fCc8WLyRfMM84/0EfSM9Qr1lfYq9tb3qfiu+f78YP//AAAAFwBQAKcBGQGsAmkDWQR+BdsHiQl9 +C7gOGxCeExsVbReKGX8bQxzZHjsfkSDjIjwjmST8JlknvCkmKo0r8y1aLsEwJTGEMuA0PjWRNuM4NDl4 +Ors79D0sPls/i0C3Qd5DBEQgRUBGVkdqSHpJhkqPS5hMn02kTqhPqVCrUbJSxVPdVPJWBlcYWChZM1o+ +W0dcT11WXl5fY2BuYXZigWOQZJ9lr2bDZ85ox2m0ap9riWx0bWJuUG8+cC1xHnIQcwNz93TudeZ233fa +eNh513rUe818u32dfnp/WoA9gSOCC4L0g9+EzIW5hqWHj4h6iWeKT4s3jByM/43gjsCPnpCKkW6SVpM7 +lB+VAJXflr2XmJhxmUiaHprzm8WclZ1mnjWfAp/PoJ+hcaJVoz2kJaUOpfam3afDqKipjKpwq1SsOK0b +rfyu3q+/sKKxgrJks0W0I7T6tcu2mbdsuD+5E7npusG7nbx6vVm+Or8ewAPA6cHNwrjDnsSIxXPGWsc5 +yA/I48m3ypPLb8xNzSzODc7uz9DQr9GN0mfTPtQS1OTVr9Z31zvX/NjC2a3amtuH3HHdV9473xrf9ODP +4aPic+M/5Ank0uWW5lnnHOfd6J3pXOoh6vTryeyS7VfuGu7X75TwT/EH8cTygfNB9AT00vWq9o/3hviV ++cn7Tv1t//8AAAAOADAAYwCnAPkBYwHcAoUDXgR4BdEHjQlsCzoM7g6KEA0RbBK7E/0VKRZMF2sYexmC +GoYbjRyWHaIerR+5IMMhyyLPI9EkyiW8JqonlSh8KWEqRSsqLBEs+y3nLtQvvjCfMXkyUTMiM+40tzV/ +NkY3CzfUOJ85bjpFOyE8AjzlPcg+qj+HQGBBMEH3QrhDe0RSRTdGHkcIR/NI30nMSrhLoEyGTWdORE7p +T41QM1DhUZZSUFMUU9tUpFVuVjdXAFfMWJpZZlowWvZbulx7XT1d/l7BX4VgTGETYdlinWNeZBxk2WWW +ZlJnEmfUaJdpXWogat9rnGxXbQ9txm5+bzdv8nCwcXFyNnL4c7Z0cHUkddd2hncyd914iHk0eeJ6kntF +fAZ8z32bfmp/O4ALgNmBo4JmgyGD14SJhVmGMIcNh+yIzomxipSLeIxXjTWOD47Yj42QJJC9kV6SB5K0 +k2qUJJThlaCWX5cfl+SYrJlzmjea+Zu5nHedNZ30nrSfdaA5oP6hxaKLo1GkFqTbpaGmaac2qAao2qmy +qo6raqxErR6t967Tr7CwkLF4smSzV7RPtUi2PrcxuCC5CrnwutS7trycvYC+Z79SwEHBOMI0wzTENsU5 +xjrHOMgyySbKFMr6y+DNLc6p0EjSDtQN1mPZFtxo4Ijlxuzn933//wAAbmRpbgAAAAAAAAY2AACX6QAA +W1AAAFSbAACOVgAAJ6QAABVgAABQDQAAVDkAAlwoAAIhRwABRR4AAwEAAAIAAAAaADgAUgBpAH8AkQCj +ALQAxADTAOIA8AD+AQwBGwEsATwBTgFgAXQBiAGeAbQBzAHmAgICHwI+Al8CggKoAs8C+AMiA08DfAOr +A9sEDQRBBHYErATkBR4FWQWUBdEGDwZNBosGygcJB0oHjAfRCBkIYwivCP4JTwmjCfkKUQqrCwULYQu+ +DBsMegzdDUYNsg4gDpMPCQ+CD/8QfRD9EX4SABKBEwMTgRQBFIAVABWCFgUWjBcYF6kYQhjiGYoaPRrV +G2kb/ByOHSEdsx5IHtsfcCAHIKEhPSHdIoAjTiQ4JRol9CbHJ5UoXikmKe4qtyuFLFUtJC32Ls0vqTCL +MXQyYjNTNEY1OzYuNyQ4GzkYOho7IjwtPTs+ST9UQF5BZ0JuQ31ElUWxRtZIAEkxSmVLmEzKTfpPKVBl +Ua9TAFRaVbxXJliQWfpbYFzGXhVfXmClYexjNmSHZd9nS2jIalxr1G0sbn5v0HEccm5zwHUWdnR31nlF +ett8uX6LgEWB7oOGhRaGoogwicCLVIzljoOQK5Hfk5+VbJc+mRWa8JzPnsGgt6K7pMOmz6jSqtOsyq7E +sNSy7bUXt0O5drugvcG/2cH4xCfGaMi8yyPNjM/60l/Uutb22V/cOt/A47bmauhQ6mLtyfFy9LX3XPlz ++xH8Yf0t/fj+iv8G/4P//wAAACIAQgBdAHYAjQCjALcAygDdAO4BAAERASIBNAFFAVcBaQF8AY8BpAG5 +AdAB6QIDAh8CPQJeAoICqQLXAwYDOANrA54D0gQHBDwEdASsBOUFHgVZBZQF0gYQBk8GkAbSBxYHXAej +B+sINgiDCNEJIQl1CcoKIgp+CtsLPAueDAIMagzUDUANsg4jDpoPEw+QEBAQlBEaEaISLhK7E00T4BR1 +FQQVkBYfFrEXRRfbGHUZExmyGlUa+huhHEkc9R2fHk0e+h+nIFUhBSGzImMjIiPyJMYlniZ3J08oKSkG +KeMqwCufLH4tXi49Lx4v/zDfMb8yojOINHk1fjaMN5c4ojmpOrM7vDzDPc0+2j/rQP1CDkMqREVFaEaQ +R7xI70oQSz1MZ02YTs1QClFJUpFT3VUwVoZX5FlIWq5cGl2NXv1gaWG1YwVkVGWnZvxoVmm0axVsd23d +b0RwsXIfc5F1A3Z6d/B5a3rzfI9+Mn/OgWyDCYSjhjmHzIleiu2Meo4Hj5mRIZK0lEKVzpdomR2a3Zyf +nlGgBaG3o2qlGqbNqIaqRawQreSvwrGys621v7fGuXK7Jrzbvp3AY8I3xBnF/sf0yfnMC84k0E7Se9Sw +1u3ZLNs63UXfduGy5AXmXOjF6yTtfu/S8gT0F/YK99H5b/rf/Bb9Bv3d/p3/Tv//AAAAOQBtAJQAtADQ +AOoBAAEWASwBQwFcAXcBkwGxAdIB9QIcAkYCcwKjAtgDEANKA4kDzQQVBF4EqQT1BUMFkwXlBjoGkgbt +B0sHsAgZCIcI+QlvCekKZQriC2AL3wxgDOcNeA4ODqwPUQ/9EK0RYRIVEsoTeRQmFNEVfhYtFuIXnhhl +GTkaHBrnG6ccZx0nHegeqx9vIDkhByHcIrgj5yUVJjQnSChRKVgqXitqLHgtgi6RL6cwxjHtMxg0RTVz +Np43zTkAOj47gzzOPh0/aECyQfpDSESmRgpHd0joSlpLx00wTpRQAVGCUw9UqlZTWAJZslteXQNegl/6 +YW5i4WRbZdxnc2kfauVsa23gb1FwvnIsc5p1CnaDeAF5jHtmfaV/wIG+g6SFfYdRiSeK+oy/jouQYZJB +lCqWFpgAmeqbz52wn5WhfaNspVmnQqkgqvesxK6MsFSyJLP3tci3l7lhux280L55wBzBwsNwxSbG6Mi0 +yorMZM460BTR59O21XnXL9jg2o/cO93p35/hW+Mk5Pnm4ujf6kPrfOyh7bnuwu+/8Kjxi/JV8xjzzvR2 +9R/1r/Y59sT3QPev+B/4jvjz+Ur5ovn5+lD6pPrk+yT7Zful++b8Jvxm/JH8vfzo/RP9P/1q/ZX9wf3s +/hj+SP5//rb+7P8j/1r/kf/I//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AABtbHVjAAAAAAAAAAIAAAAMZW5VUwAAABIAAAAoaXRJVAAAABQAAAA6AEMAbwBsAG8AcgAgAEwAQwBE +AEwAQwBEACAAYwBvAGwAbwByAGkAAG1tb2QAAAAAAAAGEAAAnGgAAAAAwhEOAAAAAAAAAAAAAAAAAAAA +AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA + + + + + + 3 + MCAwAA + + + + 400 + 75 + + + + + + LucidaGrande + 1.300000e+01 + 1044 - - - 292 - {{93, 85}, {62, 19}} - + + + 268 + {{107, 54}, {56, 16}} + YES - + -2075001280 - 4195328 + 4457472 - - + + + YES + + + + + + + 268 + {{107, 27}, {56, 16}} + + YES + + -2075001280 + 4457472 + + + YES - - - 292 - {{157, 80}, {19, 28}} - + + + 268 + {{79, 38}, {15, 22}} + YES YES @@ -805,22 +1028,55 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - - 917024 - 0 - - 6.400000e+01 - 6.400000e+01 + + 68025888 + 131072 + + 5.900000e+01 - 1.600000e+01 + 2.000000e+00 YES - - + + + 268 + {{189, 44}, {56, 16}} + + YES + + -2075001280 + 4457472 + + + + YES + + + + + + + 268 + {{18, 41}, {56, 16}} + + YES + + -2075001280 + 4457472 + + + + YES + + + + + + 268 - {{98, 7}, {100, 15}} - + {{166, 25}, {15, 22}} + YES YES @@ -836,93 +1092,70 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - - -2076049856 - 264192 + + 68025888 + 131072 + + + 5.900000e+01 + 2.000000e+00 + YES + + + + + 268 + {{97, 102}, {68, 11}} + + YES + + 67239424 + 4456448 + Automatic - - 109199615 - 1 - - - 400 - 75 - - - Item 1 - - 1048576 - 2147483647 - 1 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - _popUpItemAction: - - - YES - - OtherViews - - YES - - - - Item 2 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - Item 3 - - 1048576 - 2147483647 - - - _popUpItemAction: - - - - - 1 - YES - YES - 2 + + + - - + + 268 - {{23, 9}, {73, 14}} - + {{97, 88}, {68, 11}} + YES - - 67239488 - 272761856 - Anamorphic: + + 67239424 + 4456448 + Custom + + + + + + + + + 268 + {{12, 98}, {59, 17}} + + YES + + 67239424 + 71303168 + Cropping: - + - + - {{2, 18}, {228, 110}} - + {{1, 1}, {282, 124}} + - {{14, 205}, {232, 130}} + {{515, 202}, {284, 126}} {0, 0} @@ -936,30 +1169,14 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA MCAwLjgwMDAwMDAxAA - - 3 + + 1 0 - 4 + 0 NO - - - 256 - {{14, 175}, {68, 17}} - - YES - - 67239424 - 4194304 - Cropping - - - - - - - {{10, 19}, {263, 341}} + {{10, 19}, {801, 330}} Size @@ -975,7 +1192,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - 18 + 12 YES @@ -1060,8 +1277,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 1 - - + + _popUpItemAction: @@ -1079,8 +1296,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1090,8 +1307,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1133,7 +1350,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - {{15, 261}, {232, 73}} + {{15, 255}, {232, 73}} {0, 0} @@ -1166,16 +1383,16 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 268 - {{59, 64}, {37, 16}} + {{59, 65}, {37, 15}} YES YES - 7.019608e-01 - 7.019608e-01 - 7.019608e-01 + 1.000000e+00 + 1.000000e+00 + 1.000000e+00 1.000000e+00 @@ -1184,16 +1401,16 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - -2079981824 - 262144 + -2080244224 + 131072 - + 1.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 - 2 + 0 1 YES NO @@ -1233,7 +1450,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - 18 + 12 YES @@ -1314,8 +1531,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 1 - - + + _popUpItemAction: @@ -1333,8 +1550,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1344,8 +1561,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1401,7 +1618,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - 18 + 12 YES @@ -1482,8 +1699,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 1 - - + + _popUpItemAction: @@ -1501,8 +1718,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1512,8 +1729,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1572,7 +1789,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - {{15, 153}, {232, 112}} + {{15, 140}, {232, 112}} {0, 0} @@ -1594,7 +1811,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - 18 + 12 YES @@ -1605,7 +1822,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 268 - {{15, 45}, {68, 17}} + {{15, 37}, {68, 17}} YES @@ -1621,7 +1838,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 268 - {{15, 22}, {68, 17}} + {{15, 14}, {68, 17}} YES @@ -1637,7 +1854,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 268 - {{103, 46}, {110, 15}} + {{103, 38}, {110, 15}} YES @@ -1675,8 +1892,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 1 - - + + _popUpItemAction: @@ -1694,8 +1911,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: @@ -1705,42 +1922,200 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 1048576 2147483647 - - + + _popUpItemAction: - 3 - YES - YES - 1 + 3 + YES + YES + 1 + + + + + 268 + {{104, 16}, {108, 16}} + + YES + + -1804468671 + 272892928 + + + + YES + + + + + + {{1, 1}, {230, 63}} + + + + {{14, 73}, {232, 65}} + + {0, 0} + + 67239424 + 0 + Box + + + + 3 + MCAwLjgwMDAwMDAxAA + + + + 1 + 0 + 0 + NO + + + + 12 + + YES + + + 256 + + YES + + + 268 + {{29, 39}, {51, 17}} + + YES + + 67239424 + 71303168 + Deblock: + + + + + + + + + 268 + {{17, 8}, {63, 14}} + + YES + + 67239424 + 71303168 + Grayscale: + + + + + + + + + 268 + {{79, 41}, {31, 14}} + + YES + + 67239424 + 138543104 + Off + + + + + + + + + 268 + {{108, 40}, {104, 16}} + + YES + + YES + + + 7.019608e-01 + 7.019608e-01 + 7.019608e-01 + 1.000000e+00 + + + YES + - - - - 268 - {{104, 24}, {108, 16}} - YES - - -1804468671 - 272892928 + + -2079981824 + 262144 - - YES - - + + 1.500000e+01 + 4.000000e+00 + 4.000000e+00 + 0.000000e+00 + 12 + 0 + YES + NO + + + + + 268 + {{84, 6}, {19, 18}} + + YES + + YES + + + 7.019608e-01 + 7.019608e-01 + 7.019608e-01 + 1.000000e+00 + + + YES + + + YES + + 67239424 + 131072 + Check + + + 1211912703 + 130 + + NSImage + NSSwitch + + + + + 200 + 25 - {{1, 1}, {230, 71}} - + {{1, 1}, {230, 63}} + - {{14, 78}, {232, 73}} + {{15, 5}, {232, 65}} {0, 0} @@ -1754,137 +2129,14 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA MCAwLjgwMDAwMDAxAA - + 1 0 0 NO - - - 256 - {{44, 55}, {51, 17}} - - YES - - 67239424 - 71303168 - Deblock: - - - - - - - - - 256 - {{32, 29}, {63, 14}} - - YES - - 67239424 - 71303168 - Grayscale: - - - - - - - - - 256 - {{94, 57}, {31, 14}} - - YES - - 67239424 - 138543104 - Off - - - - - - - - - 256 - {{123, 57}, {104, 16}} - - YES - - YES - - - 7.019608e-01 - 7.019608e-01 - 7.019608e-01 - 1.000000e+00 - - - YES - - - YES - - -2079981824 - 262144 - - - - 1.500000e+01 - 4.000000e+00 - 4.000000e+00 - 0.000000e+00 - 12 - 0 - YES - NO - - - - - 256 - {{99, 27}, {19, 18}} - - YES - - YES - - - 7.019608e-01 - 7.019608e-01 - 7.019608e-01 - 1.000000e+00 - - - YES - - - YES - - 67239424 - 131072 - Check - - - 1211912703 - 130 - - NSImage - NSSwitch - - - - - 200 - 25 - - - {{10, 19}, {263, 341}} + {{10, 19}, {801, 330}} Filters @@ -1902,7 +2154,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - {311, 447} + {849, 399} {{0, 0}, {1440, 878}} @@ -2120,14 +2372,6 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 240 - - - fPictureSizeBox - - - - 241 - fPictureCropBox @@ -2160,14 +2404,6 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 280 - - - fSizeFilterView - - - - 355 - fDetelecineBox @@ -2226,139 +2462,291 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - fDecombBox + fDecombBox + + + + 364 + + + + fDeinterlaceBox + + + + 365 + + + + fDeinterlacePopUp + + + + 366 + + + + fDeinterlaceField + + + + 367 + + + + fDenoiseBox + + + + 368 + + + + fDenoisePopUp + + + + 369 + + + + fDenoiseField + + + + 370 + + + + fDeblockSlider + + + + 371 + + + + fDeblockField + + + + 372 + + + + fGrayscaleCheck + + + + 373 + + + + FilterSettingsChanged: + + + + 374 + + + + FilterSettingsChanged: + + + + 375 + + + + FilterSettingsChanged: + + + + 377 + + + + FilterSettingsChanged: + + + + 378 + + + + deblockSliderChanged: + + + + 379 + + + + FilterSettingsChanged: + + + + 380 + + + + modeDecombDeinterlaceSliderChanged: + + + + 381 + + + + fModulusPopUp + + + + 392 + + + + SettingsChanged: + + + + 393 + + + + fDisplayWidthField - + - 364 + 407 - fDeinterlaceBox + fSizeFilterView - + - 365 + 419 - fDeinterlacePopUp - - + delegate + + - 366 + 420 - fDeinterlaceField + fDeblockBox - + - 367 + 434 - fDenoiseBox + fPictureSizeBox - + - 368 + 437 - fDenoisePopUp + fParWidthField - + - 369 + 448 - fDenoiseField + fParHeightField - + - 370 + 449 - - fDeblockSlider + + SettingsChanged: - + - 371 + 453 - - fDeblockField + + SettingsChanged: - + - 372 + 454 - - fGrayscaleCheck + + SettingsChanged: - + - 373 + 456 - - FilterSettingsChanged: + + fRatioLabel - + - 374 + 522 - - FilterSettingsChanged: + + fParWidthLabel - + - 375 + 524 - - FilterSettingsChanged: + + fParHeightLabel - + - 377 + 525 - - FilterSettingsChanged: + + fDisplayWidthLabel - + - 378 + 526 - - deblockSliderChanged: + + fRatioLabel2 - + - 379 + 531 - - FilterSettingsChanged: + + fModulusLabel - + - 380 + 532 - - modeDecombDeinterlaceSliderChanged: + + fWidthLabel - + - 381 + 533 @@ -2407,8 +2795,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - + @@ -2489,12 +2877,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - - - - - + @@ -2503,9 +2887,8 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - + - @@ -2515,16 +2898,17 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA YES - - + + + @@ -2695,723 +3079,901 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - 39 - + 286 + YES - - - - - - - - - - + + + + - + - 244 - + 287 + YES - + + + + + - + - 138 - + 288 + YES - + + + + - + - 132 - + 299 + YES - + - + - 44 - + 300 + YES - + + + + + + 301 + + + YES + - + - 42 - + 302 + YES - + + + + + + 303 + + + + + 304 + + + + + 305 + + + YES + + + + + + 306 + + + YES + + + + + + + + 307 + + + + + 308 + + + + + 309 + + + + + 310 + + + + + 311 + + + YES + + + + + + 312 + + + YES + + + + + + 313 + + + YES + + + + + + 315 + + + YES + + + + + + + + + 316 + + + YES + - + - 47 - + 317 + YES - + - + - 46 - + 318 + YES - + - + - 45 - + 319 + YES - + - + - 43 - + 320 + + + + + 321 + YES - + - + - 41 - + 322 + YES - + + + - + - 166 - - + 323 + + - 168 - - + 324 + + - 170 - - + 325 + + - 171 - - + 326 + + - 172 - - + 327 + + - 167 - - + 340 + + - 169 - - + 341 + + - 173 - - - YES - - - + 342 + + - 134 - + 343 + YES - - - + - - - - 137 - - - - - 136 - - - - - 135 - - - - - 174 - - - - - 245 - - + - 286 - + 344 + YES - - - - + - + - 287 - + 345 + YES - - - - - + - + - 288 - + 346 + YES - - - - + - + - 289 - - - YES - - - + 347 + + - 290 - + 348 + YES - + - + - 291 - + 349 + YES - + + + - + - 292 - - - YES - - - + 350 + + - 293 - - - YES - - - + 351 + + - 294 - - + 352 + + - 295 - - + 353 + + - 296 - - + 354 + + - 297 - - + 382 + + + YES + + + - 298 - - + 383 + + + + + 314 + + + YES + + + + + + - 299 - + 329 + YES - + - + - 300 - + 331 + YES - + - + - 301 - + 330 + YES - + - + - 302 - + 328 + YES - + - - - - 303 - - - - - 304 - - + - 305 - + 335 + YES - + - + - 306 - + 336 + YES - - - + + + - + - 307 - - + 339 + + - 308 - - + 338 + + - 309 - - + 337 + + - 310 - - + 333 + + - 311 - + 332 + + + + + 334 + + + + + 421 + YES - + + + + + - + - 312 - + 289 + YES - + - + - 313 - + 298 + + + + + 290 + YES - + - + - 314 - + 297 + + + + + 291 + YES - - - - + - + - 315 - + 296 + + + + + 292 + YES - - - - + - + - 316 - + 295 + + + + + 293 + YES - + - + - 317 - + 294 + + + + + 436 + YES - + + + + + + + + + + + + + + + + + + + - + - 318 - + 44 + YES - + - + - 319 - + 169 + + + + + 384 + YES - + - + - 320 - - + 385 + + + YES + + + - 321 - + 386 + YES - + + + - + - 322 - + 389 + + + + + 388 + + + + + 387 + + + + + 42 + YES - - - + - + - 323 - - + 167 + + - 324 - - + 46 + + + YES + + + - 325 - - + 171 + + - 326 - - + 138 + + + YES + + + - 327 - - + 174 + + - 328 - + 41 + YES - + - + - 329 - + 166 + + + + + 132 + YES - + - + - 330 - + 173 + YES - + - + - 331 - + 134 + YES - + + + - + - 332 - - + 135 + + - 333 - - + 136 + + - 334 - - + 137 + + - 335 - + 390 + YES - + - + - 336 - + 391 + + + + + 47 + YES - - - + - - - - 337 - - + - 338 - - + 172 + + - 339 - - + 43 + + + YES + + + - 340 - - + 168 + + - 341 - - + 45 + + + YES + + + - 342 - - + 170 + + - 343 - + 244 + YES - + - + - 344 - - - YES - - - + 245 + + - 345 - + 402 + YES - + - + - 346 - + 403 + + + + + 440 + YES - + - + - 347 - - + 441 + + - 348 - + 442 + YES - + - + - 349 - + 443 + + + + + 444 + YES - - - + - + - 350 - - + 445 + + - 351 - - + 446 + + + YES + + + - 352 - - + 447 + + - 353 - - + 529 + + + YES + + + - 354 - - + 530 + + - 382 - + 396 + YES - + - + - 383 - - + 397 + + @@ -3612,16 +4174,49 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 382.IBPluginDependency 382.ImportedFromIB2 383.IBPluginDependency - 39.IBPluginDependency - 39.ImportedFromIB2 + 384.IBPluginDependency + 384.ImportedFromIB2 + 385.IBPluginDependency + 386.IBEditorWindowLastContentRect + 386.IBPluginDependency + 386.ImportedFromIB2 + 387.IBPluginDependency + 387.ImportedFromIB2 + 388.IBPluginDependency + 388.ImportedFromIB2 + 389.IBPluginDependency + 389.ImportedFromIB2 + 390.IBPluginDependency + 390.ImportedFromIB2 + 391.IBPluginDependency + 396.IBPluginDependency + 396.ImportedFromIB2 + 397.IBPluginDependency + 402.IBPluginDependency + 402.ImportedFromIB2 + 403.IBPluginDependency 41.IBPluginDependency 41.ImportedFromIB2 42.IBPluginDependency 42.ImportedFromIB2 + 421.IBPluginDependency 43.IBPluginDependency 43.ImportedFromIB2 + 436.IBPluginDependency 44.IBPluginDependency 44.ImportedFromIB2 + 440.IBPluginDependency + 440.ImportedFromIB2 + 441.IBPluginDependency + 442.IBPluginDependency + 442.ImportedFromIB2 + 443.IBPluginDependency + 444.IBPluginDependency + 444.ImportedFromIB2 + 445.IBPluginDependency + 446.IBPluginDependency + 446.ImportedFromIB2 + 447.IBPluginDependency 45.IBPluginDependency 45.ImportedFromIB2 46.IBPluginDependency @@ -3629,6 +4224,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 47.IBPluginDependency 47.ImportedFromIB2 5.IBEditorWindowLastContentRect + 5.IBViewEditorWindowController.showingBoundsRectangles 5.IBViewEditorWindowController.showingLayoutRectangles 5.IBWindowTemplateEditedContentRect 5.ImportedFromIB2 @@ -3637,7 +4233,11 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA 5.windowTemplate.hasMinSize 5.windowTemplate.maxSize 5.windowTemplate.minSize + 529.IBPluginDependency + 529.ImportedFromIB2 + 530.IBPluginDependency 6.IBPluginDependency + 6.IBUserGuides 6.ImportedFromIB2 7.IBPluginDependency 7.ImportedFromIB2 @@ -3847,31 +4447,81 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin + {{772, 644}, {100, 48}} + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{644, 412}, {311, 447}} + {{-1077, 352}, {849, 399}} + - {{644, 412}, {311, 447}} + {{-1077, 352}, {849, 399}} {{221, 276}, {533, 580}} - + {3.40282e+38, 3.40282e+38} {230, 500} com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + YES + + + 0.000000e+00 + 1 + + + + 2.420000e+02 + 0 + + com.apple.InterfaceBuilder.CocoaPlugin @@ -3899,7 +4549,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA - 383 + 533 @@ -3929,11 +4579,16 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA FilterSettingsChanged: SettingsChanged: adjustFilterDisplay: + adjustSizingDisplay: deblockSliderChanged: + displayLinkChanged: modeDecombDeinterlaceSliderChanged: + parLinkChanged: previewGoWindowed: + resizeInspectorForTab: showPictureWindow: showPreviewWindow: + storageLinkChanged: YES @@ -3945,6 +4600,11 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA id id id + id + id + id + id + id @@ -3961,6 +4621,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA fCropRightStepper fCropTopField fCropTopStepper + fDeblockBox fDeblockCheck fDeblockField fDeblockSlider @@ -3978,10 +4639,25 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA fDetelecineBox fDetelecineField fDetelecinePopUp + fDisplayLinkParLabel + fDisplayLinkSlider + fDisplayLinkStorageLabel + fDisplayWidthField + fDisplayWidthLabel + fFilterTabView fGrayscaleCheck fHeightField fHeightStepper fInfoField + fModulusLabel + fModulusPopUp + fParHeightField + fParHeightLabel + fParLinkDisplayLabel + fParLinkSlider + fParLinkStorageLabel + fParWidthField + fParWidthLabel fPictureCropBox fPictureFilterBox fPictureFiltersOpenButton @@ -3989,9 +4665,18 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA fPictureWindow fPreviewOpenButton fRatioCheck + fRatioLabel + fRatioLabel2 + fResetParDarButton fSizeFilterView fSizeInfoField + fSizeTabView + fStorageLinkBox + fStorageLinkDisplayLabel + fStorageLinkParLabel + fStorageLinkSlider fWidthField + fWidthLabel fWidthStepper @@ -4006,6 +4691,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA NSStepper NSTextField NSStepper + NSBox NSButton NSTextField NSSlider @@ -4023,10 +4709,25 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA NSBox NSTextField NSPopUpButton + NSTextField + NSSlider + NSTextField + NSTextField + NSTextField + NSTabViewItem NSButton NSTextField NSStepper NSTextField + NSTextField + NSPopUpButton + NSTextField + NSTextField + NSTextField + NSSlider + NSTextField + NSTextField + NSTextField NSBox NSBox NSButton @@ -4034,8 +4735,17 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA NSWindow NSButton NSButton + NSTextField + NSTextField + NSButton NSTabView NSTextField + NSTabViewItem + NSBox + NSTextField + NSTextField + NSSlider + NSTextField NSTextField NSStepper diff --git a/macosx/HBPreviewController.mm b/macosx/HBPreviewController.mm index 2e979d969..46522db60 100644 --- a/macosx/HBPreviewController.mm +++ b/macosx/HBPreviewController.mm @@ -103,6 +103,17 @@ [fShowPreviewMovieButton setWantsLayer:YES]; + /* Since the xib has everything off center for easy acess + * we align our views and windows here we an align to anything + * since it will actually change later upon source load, but + * for convenience we will use the fPictureViewArea + */ + + /* Align the still preview image view to the picture box */ + [fPictureView setFrameSize:[fPictureViewArea frame].size]; + [fMovieView setFrameSize:[fPictureViewArea frame].size]; + //[fPreviewWindow setFrameSize:[fPictureViewArea frame].size]; + } - (BOOL)acceptsMouseMovedEvents @@ -212,7 +223,7 @@ return YES; // necessary to display as much of the picture as possible. - (void) displayPreview { - hb_job_t * job = fTitle->job; + hb_job_t * job = fTitle->job; /* lets make sure that the still picture view is not hidden and that * the movie preview is */ @@ -222,71 +233,138 @@ return YES; [fMovieCreationProgressIndicator setHidden: YES]; [fPictureView setHidden:NO]; - [fPictureView setImage: [self imageForPicture: fPicture]]; + + //[fHBController writeToActivityLog: "displayPreview called"]; + + NSImage *fPreviewImage = [self imageForPicture: fPicture]; + NSSize imageScaledSize = [fPreviewImage size]; + NSSize displaySize = NSMakeSize( ( CGFloat )fTitle->width, ( CGFloat )fTitle->height ); + NSString *sizeInfoString; /* Set the picture size display fields below the Preview Picture*/ if( fTitle->job->anamorphic.mode == 1 ) // Original PAR Implementation { output_width = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]; output_height = fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]; display_width = output_width * fTitle->job->anamorphic.par_width / fTitle->job->anamorphic.par_height; - [fInfoField setStringValue:[NSString stringWithFormat: - @"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Strict", - fTitle->width, fTitle->height, output_width, output_height, display_width, output_height]]; - displaySize.width *= ( ( CGFloat )fTitle->job->anamorphic.par_width ) / ( ( CGFloat )fTitle->job->anamorphic.par_height ); + sizeInfoString = [NSString stringWithFormat: + @"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Strict", + fTitle->width, fTitle->height, output_width, output_height, display_width, output_height]; + + displaySize.width = display_width; + displaySize.height = fTitle->height; + imageScaledSize.width = display_width; + imageScaledSize.height = output_height; } else if (fTitle->job->anamorphic.mode == 2) // Loose Anamorphic { - hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height); + hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height); display_width = output_width * output_par_width / output_par_height; - [fInfoField setStringValue:[NSString stringWithFormat: - @"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Loose", - fTitle->width, fTitle->height, output_width, output_height, display_width, output_height]]; + sizeInfoString = [NSString stringWithFormat: + @"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Loose", + fTitle->width, fTitle->height, output_width, output_height, display_width, output_height]; displaySize.width = display_width; + displaySize.height = fTitle->height; + imageScaledSize.width = display_width; + imageScaledSize.height = output_height; } + else if (fTitle->job->anamorphic.mode == 3) // Custom Anamorphic + { + hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height); + display_width = output_width * output_par_width / output_par_height; + sizeInfoString = [NSString stringWithFormat: + @"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Custom", + fTitle->width, fTitle->height, output_width, output_height, fTitle->job->anamorphic.dar_width, fTitle->job->anamorphic.dar_height]; + + displaySize.width = fTitle->job->anamorphic.dar_width + fTitle->job->crop[2] + fTitle->job->crop[3]; + displaySize.height = fTitle->job->anamorphic.dar_height + fTitle->job->crop[0] + fTitle->job->crop[1]; + imageScaledSize.width = (int)fTitle->job->anamorphic.dar_width; + imageScaledSize.height = (int)fTitle->job->height; + } else // No Anamorphic { - [fInfoField setStringValue: [NSString stringWithFormat: - @"Source: %dx%d, Output: %dx%d", fTitle->width, fTitle->height, - fTitle->job->width, fTitle->job->height]]; + sizeInfoString = [NSString stringWithFormat: + @"Source: %dx%d, Output: %dx%d", fTitle->width, fTitle->height, + fTitle->job->width, fTitle->job->height]; + + displaySize.width = fTitle->width; + displaySize.height = fTitle->height; + imageScaledSize.width = fTitle->job->width; + imageScaledSize.height = fTitle->job->height; } - NSSize viewSize = [self optimalViewSizeForImageSize:displaySize]; + + /* Initially set our preview image here */ + + [fPreviewImage setSize: imageScaledSize]; + [fPictureView setFrameSize: imageScaledSize]; + [fPictureView setImage: fPreviewImage]; + // center it vertically and horizontally + NSPoint origin = [fPictureViewArea frame].origin; + origin.y += ([fPictureViewArea frame].size.height - + [fPictureView frame].size.height) / 2.0; + + origin.x += ([fPictureViewArea frame].size.width - + [fPictureView frame].size.width) / 2.0; + + [fPictureView setFrameOrigin:origin]; + /* we also need to take into account scaling to full screen to activate switching the view size */ if( [self viewNeedsToResizeToSize:viewSize]) { + /* if we have no anamorphic. */ + if (!fTitle->job->anamorphic.mode || fTitle->job->anamorphic.mode == 0) + { + [self resizeSheetForViewSize:viewSize]; + [self setViewSize:viewSize]; + } + /* Strict anamorphic. */ + else if (fTitle->job->anamorphic.mode == 1) + { + [self resizeSheetForViewSize:viewSize]; + [self setViewSize:viewSize]; + } /* In the case of loose anamorphic, do not resize the window when scaling down */ - // FIX ME: we need a new way to do this as we do not havefWidthField anymore - //if (fTitle->job->anamorphic.mode != 2 || [fWidthField intValue] == fTitle->width) - if (fTitle->job->anamorphic.mode != 2 || (fTitle->job->anamorphic.mode == 2 && output_width == fTitle->width)) + else if (fTitle->job->anamorphic.mode == 2 && fTitle->width == fTitle->job->width) { [self resizeSheetForViewSize:viewSize]; [self setViewSize:viewSize]; } - } - + + /* custom anamorphic */ + else if (fTitle->job->anamorphic.mode == 3) + { + [self resizeSheetForViewSize:viewSize]; + [self setViewSize:viewSize]; + } + } // Show the scaled text (use the height to check since the width can vary // with anamorphic video). - if( ( ( int )viewSize.height ) != fTitle->height ) + NSString *scaleString; + + if( imageScaledSize.height > [fPictureView frame].size.height) { - CGFloat scale = viewSize.width / ( ( CGFloat ) fTitle->width ); - NSString *scaleString = [NSString stringWithFormat: - NSLocalizedString( @" (Preview scaled to %.0f%% actual size)", - @"String shown when a preview is scaled" ), - scale * 100.0]; - [fscaleInfoField setStringValue: [NSString stringWithFormat: - @"%@", scaleString]]; - + CGFloat scale = ( ( CGFloat )[fPictureView frame].size.width) / ( ( CGFloat )imageScaledSize.width); + scaleString = [NSString stringWithFormat: + NSLocalizedString( @" (Scaled to %.0f%% actual size)", + @"String shown when a preview is scaled" ), scale * 100.0]; } else { - [fscaleInfoField setStringValue: @""]; + scaleString = @""; } - + /* Set the info fields in the hud controller */ + [fInfoField setStringValue: [NSString stringWithFormat: + @"%@", sizeInfoString]]; + + [fscaleInfoField setStringValue: [NSString stringWithFormat: + @"%@", scaleString]]; + /* Set the info field in the window title bar */ + [[self window] setTitle:[NSString stringWithFormat: @"Preview - %@ %@",sizeInfoString, scaleString]]; } - (IBAction) previewDurationPopUpChanged: (id) sender @@ -301,10 +379,6 @@ return YES; // Purge the existing picture previews so they get recreated the next time // they are needed. [self purgeImageCache]; - /* We actually call displayPreview now from pictureSliderChanged which keeps - * our picture preview slider in sync with the previews being shown - */ - //[self displayPreview]; [self pictureSliderChanged:nil]; } @@ -327,7 +401,7 @@ return YES; - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title { - [self SetTitle:title]; + //[self SetTitle:title]; if ([fPreviewWindow isVisible]) { @@ -345,7 +419,6 @@ return YES; hudTimerSeconds = 0; [self pictureSliderChanged:nil]; [self startHudTimer]; - } } @@ -720,8 +793,26 @@ return YES; // Make sure we have a big enough buffer to receive the image from libhb. libhb // creates images with a one-pixel border around the original content. Hence we // add 2 pixels horizontally and vertically to the buffer size. - int srcWidth = title->width + 2; - int srcHeight= title->height + 2; + int srcWidth; + int srcHeight; + if (title->width > title->job->width) + { + srcWidth = title->width + 2; + } + else + { + srcWidth = title->job->width + 2; + } + + if (title->height > title->job->height) + { + srcHeight = title->height + 2; + } + else + { + srcHeight = title->job->height + 2; + } + int newSize; newSize = srcWidth * srcHeight * 4; if( bufferSize < newSize ) @@ -829,7 +920,6 @@ return YES; return img; } } - // Returns the preview image for the specified index, retrieving it from its internal // cache or by calling makeImageForPicture if it is not cached. Generally, you should // use imageForPicture so that images are cached. Calling makeImageForPicture will @@ -842,7 +932,7 @@ return YES; NSImage * theImage = [fPicturePreviews objectForKey:key]; if (!theImage) { - theImage = [PreviewController makeImageForPicture:pictureIndex libhb:fHandle title:fTitle removeBorders: NO]; + theImage = [PreviewController makeImageForPicture:pictureIndex libhb:fHandle title:fTitle removeBorders: YES]; [fPicturePreviews setObject:theImage forKey:key]; } return theImage; @@ -1109,7 +1199,7 @@ return YES; /* We need to find out if the preview movie needs to be scaled down so * that it doesn't overflow our available viewing container (just like for image * in -displayPreview) for HD sources, etc. [fPictureViewArea frame].size.height*/ - if( ((int)movieBounds.size.height) > [fPictureView frame].size.height || scaleToScreen == YES) + if( ((int)movieBounds.size.height) > [fPictureViewArea frame].size.height || scaleToScreen == YES) { /* The preview movie would be larger than the available viewing area * in the preview movie, so we go ahead and scale it down to the same size @@ -1240,8 +1330,6 @@ return YES; if (scaleToScreen == YES) { - //CGFloat scaleToScreenWidth; - //CGFloat scaleToScreenHeight; CGFloat screenAspect; CGFloat viewAreaAspect; //note, a mbp 15" at 1440 x 900 is a 1.6 ar @@ -1353,10 +1441,14 @@ return YES; { [fPictureView setFrameSize:viewSize]; - // center it vertically + // center it vertically and horizontally NSPoint origin = [fPictureViewArea frame].origin; origin.y += ([fPictureViewArea frame].size.height - [fPictureView frame].size.height) / 2.0; + + origin.x += ([fPictureViewArea frame].size.width - + [fPictureView frame].size.width) / 2.0; + [fPictureView setFrameOrigin:origin]; NSPoint controlboxorigin = [fPictureView frame].origin; @@ -1366,6 +1458,14 @@ return YES; controlboxorigin.x += ([fPictureViewArea frame].size.width - [fPictureControlBox frame].size.width) / 2.0; + + + /* origin should be rounded to integer otherwise font/antialiasing + * may be blurry. + */ + controlboxorigin.x = floor( controlboxorigin.x ); + controlboxorigin.y = floor( controlboxorigin.y ); + /* requires that thefPictureControlBox and the fEncodingControlBox * are the same width to line up. */ @@ -1377,7 +1477,7 @@ return YES; - (BOOL)viewNeedsToResizeToSize: (NSSize)newSize { - NSSize viewSize = [fPictureView frame].size; + NSSize viewSize = [fPictureViewArea frame].size; return (newSize.width != viewSize.width || newSize.height != viewSize.height); } diff --git a/macosx/PictureController.h b/macosx/PictureController.h index fe6552d32..7a3d96ea2 100644 --- a/macosx/PictureController.h +++ b/macosx/PictureController.h @@ -26,6 +26,8 @@ IBOutlet NSWindow * fPictureWindow; IBOutlet NSTabView * fSizeFilterView; + IBOutlet NSTabViewItem * fSizeTabView; + IBOutlet NSTabViewItem * fFilterTabView; /* Picture Sizing */ @@ -35,10 +37,14 @@ IBOutlet NSBox * fPictureSizeBox; IBOutlet NSBox * fPictureCropBox; + + IBOutlet NSTextField * fWidthLabel; IBOutlet NSTextField * fWidthField; IBOutlet NSStepper * fWidthStepper; IBOutlet NSTextField * fHeightField; IBOutlet NSStepper * fHeightStepper; + IBOutlet NSTextField * fRatioLabel; + IBOutlet NSTextField * fRatioLabel2; // shown for capuj IBOutlet NSButton * fRatioCheck; IBOutlet NSMatrix * fCropMatrix; IBOutlet NSTextField * fCropTopField; @@ -49,7 +55,43 @@ IBOutlet NSStepper * fCropLeftStepper; IBOutlet NSTextField * fCropRightField; IBOutlet NSStepper * fCropRightStepper; - + + IBOutlet NSTextField * fModulusLabel; + IBOutlet NSPopUpButton * fModulusPopUp; + /* linkers for capuj */ + IBOutlet NSBox * fStorageLinkBox; + IBOutlet NSSlider * fStorageLinkSlider; + IBOutlet NSTextField * fStorageLinkParLabel; + IBOutlet NSTextField * fStorageLinkDisplayLabel; + + IBOutlet NSSlider * fParLinkSlider; + IBOutlet NSTextField * fParLinkStorageLabel; + IBOutlet NSTextField * fParLinkDisplayLabel; + + IBOutlet NSSlider * fDisplayLinkSlider; + IBOutlet NSTextField * fDisplayLinkStorageLabel; + IBOutlet NSTextField * fDisplayLinkParLabel; + + + IBOutlet NSTextField * fDisplayWidthField; + IBOutlet NSTextField * fDisplayWidthLabel; + + IBOutlet NSTextField * fParWidthField; + IBOutlet NSTextField * fParHeightField; + IBOutlet NSTextField * fParWidthLabel; + IBOutlet NSTextField * fParHeightLabel; + + /* for now we setup some values to remember our pars and dars + * from scan + */ + float titleDarWidth; + float titleDarHeight; + + int titleParWidth; + int titleParHeight; + float dar; + IBOutlet NSButton * fResetParDarButton; + IBOutlet NSPopUpButton * fAnamorphicPopUp; IBOutlet NSTextField * fSizeInfoField; @@ -64,6 +106,8 @@ int output_width, output_height, output_par_width, output_par_height; int display_width; + int modulus; + /* used to track the previous state of the keep aspect ratio checkbox when turning anamorphic on, so it can be returned to the previous state when anamorphic is turned @@ -94,6 +138,8 @@ IBOutlet NSPopUpButton * fDenoisePopUp; IBOutlet NSTextField * fDenoiseField; + + IBOutlet NSBox * fDeblockBox; // also holds the grayscale box IBOutlet NSButton * fDeblockCheck; IBOutlet NSTextField * fDeblockField; IBOutlet NSSlider * fDeblockSlider; @@ -121,11 +167,13 @@ - (void) SetTitle: (hb_title_t *) title; - (void)setHBController: (HBController *)controller; - (IBAction) showPictureWindow: (id)sender; +- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem; +- (IBAction) resizeInspectorForTab: (id)sender; - (IBAction) showPreviewWindow: (id)sender; - (BOOL) previewFullScreenMode; - (IBAction) previewGoWindowed: (id)sender; - +- (IBAction) adjustSizingDisplay: (id) sender; - (IBAction) SettingsChanged: (id) sender; @@ -140,15 +188,16 @@ - (void) setAllowLooseAnamorphic: (BOOL) setting; - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title; - - +- (IBAction) storageLinkChanged: (id) sender; +- (IBAction) parLinkChanged: (id) sender; +- (IBAction) displayLinkChanged: (id) sender; - (void) setToFullScreenMode; - (void) setToWindowedMode; /* Filter Actions */ - (void) setInitialPictureFilters; - (IBAction) FilterSettingsChanged: (id) sender; -- (void) adjustFilterDisplay: (id) sender; +- (IBAction) adjustFilterDisplay: (id) sender; - (IBAction) modeDecombDeinterlaceSliderChanged: (id) sender; - (IBAction) deblockSliderChanged: (id) sender; diff --git a/macosx/PictureController.mm b/macosx/PictureController.mm index 5dae523b9..338bd278e 100644 --- a/macosx/PictureController.mm +++ b/macosx/PictureController.mm @@ -55,6 +55,8 @@ [self setToWindowedMode]; } } + [self adjustFilterDisplay:nil]; + [self adjustSizingDisplay:nil]; } - (BOOL) previewFullScreenMode @@ -62,6 +64,342 @@ return [fPreviewController fullScreen]; } +/* this method is used to detect clicking on a tab in fSizeFilterView */ +- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem +{ + +[self resizeInspectorForTab:nil]; + +} + +#pragma mark - + +/* resizeInspectorForTab is called at launch, and each time either the + * Size or Filters tab is clicked. Size gives a horizontally oriented + * inspector and Filters is a vertically aligned inspector. + */ +- (IBAction) resizeInspectorForTab: (id)sender +{ + NSRect frame = [[self window] frame]; + NSPoint windowOrigin = [[self window] frame].origin; + NSSize screenSize = [[[self window] screen] frame].size; + NSPoint screenOrigin = [[[self window] screen] frame].origin; + + /* We base our inspector size/layout on which tab is active for fSizeFilterView */ + /* we are 1 which is Filters*/ + if ([fSizeFilterView indexOfTabViewItem: [fSizeFilterView selectedTabViewItem]] == 1) + { + frame.size.width = 314; + /* we glean the height from the size of the boxes plus the extra window space + * needed for non boxed display + */ + frame.size.height = 110.0 + [fDetelecineBox frame].size.height + [fDecombDeinterlaceBox frame].size.height + [fDenoiseBox frame].size.height + [fDeblockBox frame].size.height; + /* Hide the size readout at the bottom as the vertical inspector is not wide enough */ + [fSizeInfoField setHidden:YES]; + } + else // we are Tab index 0 which is size + { + frame.size.width = 50.0 + [fPictureSizeBox frame].size.width + [fPictureCropBox frame].size.width; + frame.size.height = [fPictureSizeBox frame].size.height + 85; + /* hide the size summary field at the bottom */ + [fSizeInfoField setHidden:NO]; + } + /* get delta's for the change in window size */ + CGFloat deltaX = frame.size.width - [[self window] frame].size.width; + CGFloat deltaY = frame.size.height - [[self window] frame].size.height; + + /* Check to see if we have changed the height from current */ + //if (frame.size.height != [[self window] frame].size.height) + //{ + /* change the inspector origin via the deltaY */ + frame.origin.y -= deltaY; + /* keep the inspector centered so the tabs stay in place */ + frame.origin.x -= deltaX / 2.0; + //} + + /* we make sure we are not horizontally off of our screen. + * this would be the case if we are on the vertical filter tab + * and we hit the size tab and the inspector grows horizontally + * off the screen to the right + */ + if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width)) + { + /* the right side of the preview is off the screen, so shift to the left */ + frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width; + } + + [[self window] setFrame:frame display:YES animate:YES]; +} + +- (IBAction) adjustSizingDisplay: (id) sender +{ + NSSize pictureSizingBoxSize = [fPictureSizeBox frame].size; + + NSPoint fPictureSizeBoxOrigin = [fPictureSizeBox frame].origin; + NSSize pictureCropBoxSize = [fPictureCropBox frame].size; + NSPoint fPictureCropBoxOrigin = [fPictureCropBox frame].origin; + + if ([fAnamorphicPopUp indexOfSelectedItem] == 3) // custom / power user jamboree + { + pictureSizingBoxSize.width = 530; + + /* Set visibility of capuj widgets */ + [fParWidthField setHidden: NO]; + [fParHeightField setHidden: NO]; + [fParWidthLabel setHidden: NO]; + [fParHeightLabel setHidden: NO]; + [fDisplayWidthField setHidden: NO]; + [fDisplayWidthLabel setHidden: NO]; + [fModulusLabel setHidden: NO]; + [fModulusPopUp setHidden: NO]; + /* adjust/move keep ar checkbox */ + [fRatioLabel setHidden: YES]; + [fRatioLabel2 setHidden: NO]; + + /* Optionally swith the Storage and Display width positions*/ + /* + NSPoint fWidthLabelOrigin = [fWidthLabel frame].origin; + NSPoint fWidthFieldOrigin = [fWidthField frame].origin; + NSPoint fWidthStepperOrigin = [fWidthStepper frame].origin; + fWidthFieldOrigin.x = [fRatioLabel2 frame].origin.x + [fRatioLabel2 frame].size.width + 4; + [fWidthField setFrameOrigin:fWidthFieldOrigin]; + + fWidthStepperOrigin.x = [fWidthField frame].origin.x + [fWidthField frame].size.width + 4; + [fWidthStepper setFrameOrigin:fWidthStepperOrigin]; + + fWidthLabelOrigin.x = [fWidthField frame].origin.x - [fWidthLabel frame].size.width - 4; + [fWidthLabel setFrameOrigin:fWidthLabelOrigin]; + [fWidthLabel setStringValue:@"Storage Width:"]; + */ + + /* set the origin for fRatioCheck so origin.y == fRatioLabel2 + * and origin.x == fDisplayWidthField + */ + NSPoint fRatioCheckOrigin = [fRatioCheck frame].origin; + fRatioCheckOrigin.y = [fRatioLabel2 frame].origin.y - 2; + fRatioCheckOrigin.x = [fRatioLabel2 frame].origin.x + [fRatioLabel2 frame].size.width + 4; + [fRatioCheck setFrameOrigin:fRatioCheckOrigin]; + + } + else + { + pictureSizingBoxSize.width = 200; + + /* Set visibility of capuj widgets */ + [fParWidthField setHidden: YES]; + [fParHeightField setHidden: YES]; + [fParWidthLabel setHidden: YES]; + [fParHeightLabel setHidden: YES]; + [fDisplayWidthField setHidden: YES]; + [fDisplayWidthLabel setHidden: YES]; + [fModulusLabel setHidden: YES]; + [fModulusPopUp setHidden: YES]; + /* adjust/move keep ar checkbox */ + [fRatioLabel setHidden: NO]; + [fRatioLabel2 setHidden: YES]; + + /* Optionally swith the Storage and Display width positions*/ + + /* + NSPoint fWidthLabelOrigin = [fWidthLabel frame].origin; + NSPoint fWidthFieldOrigin = [fWidthField frame].origin; + NSPoint fWidthStepperOrigin = [fWidthStepper frame].origin; + + fWidthFieldOrigin.x = [fHeightField frame].origin.x; + [fWidthField setFrameOrigin:fWidthFieldOrigin]; + + fWidthStepperOrigin.x = [fHeightStepper frame].origin.x; + [fWidthStepper setFrameOrigin:fWidthStepperOrigin]; + + fWidthLabelOrigin.x = [fWidthField frame].origin.x - [fWidthLabel frame].size.width -4; + [fWidthLabel setFrameOrigin:fWidthLabelOrigin]; + [fWidthLabel setStringValue:@"Width:"]; + */ + + + /* set the origin for fRatioCheck so origin.y == fRatioLabel + * and origin.x == fWidthStepper + */ + NSPoint fRatioCheckOrigin = [fRatioCheck frame].origin; + fRatioCheckOrigin.y = [fRatioLabel frame].origin.y - 2; + fRatioCheckOrigin.x = [fWidthStepper frame].origin.x - 2; + [fRatioCheck setFrameOrigin:fRatioCheckOrigin]; + + } + + /* Check to see if we have changed the size from current */ + if (pictureSizingBoxSize.height != [fPictureSizeBox frame].size.height || pictureSizingBoxSize.width != [fPictureSizeBox frame].size.width) + { + /* Get our delta for the change in picture size box height */ + CGFloat deltaYSizeBoxShift = pictureSizingBoxSize.height - [fPictureSizeBox frame].size.height; + fPictureSizeBoxOrigin.y -= deltaYSizeBoxShift; + /* Get our delta for the change in picture size box width */ + CGFloat deltaXSizeBoxShift = pictureSizingBoxSize.width - [fPictureSizeBox frame].size.width; + //fPictureSizeBoxOrigin.x += deltaXSizeBoxShift; + /* set our new Picture size box size */ + [fPictureSizeBox setFrameSize:pictureSizingBoxSize]; + [fPictureSizeBox setFrameOrigin:fPictureSizeBoxOrigin]; + + pictureCropBoxSize.height += deltaYSizeBoxShift; + fPictureCropBoxOrigin.y -= deltaYSizeBoxShift; + fPictureCropBoxOrigin.x += deltaXSizeBoxShift; + + [fPictureCropBox setFrameSize:pictureCropBoxSize]; + [[fPictureCropBox animator] setFrameOrigin:fPictureCropBoxOrigin]; + } + + + /* now we call to resize the entire inspector window */ + [self resizeInspectorForTab:nil]; +} + +- (IBAction) adjustFilterDisplay: (id) sender +{ + + NSBox * filterBox = nil; + NSTextField * filterField; + if (sender == fDetelecinePopUp) + { + filterBox = fDetelecineBox; + filterField = fDetelecineField; + } + + if (sender == fDecombDeinterlaceSlider) + { + if ([fDecombDeinterlaceSlider floatValue] == 0.0) + { + filterBox = fDecombBox; + filterField = fDecombField; + } + else + { + filterBox = fDeinterlaceBox; + filterField = fDeinterlaceField; + } + } + + if (sender == fDecombPopUp) + { + filterBox = fDecombBox; + filterField = fDecombField; + } + if (sender == fDeinterlacePopUp) + { + filterBox = fDeinterlaceBox; + filterField = fDeinterlaceField; + } + + if (sender == fDenoisePopUp) + { + filterBox = fDenoiseBox; + filterField = fDenoiseField; + } + + NSSize currentSize = [filterBox frame].size; + NSRect boxFrame = [filterBox frame]; + + if ([sender titleOfSelectedItem] == @"Custom") + { + + currentSize.height = 60; + + } + else + { + currentSize.height = 30; + + } + /* Check to see if we have changed the size from current */ + if (currentSize.height != [filterBox frame].size.height) + { + /* We are changing the size of the box, so recalc the origin */ + NSPoint boxOrigin = [filterBox frame].origin; + /* We get the deltaY here for how much we are expanding/contracting the box vertically */ + CGFloat deltaYBoxShift = currentSize.height - [filterBox frame].size.height; + boxOrigin.y -= deltaYBoxShift; + + boxFrame.size.height = currentSize.height; + boxFrame.origin.y = boxOrigin.y; + [filterBox setFrame:boxFrame]; + + /* go ahead and resize the box */ + //[[filterBox animator] setFrameSize:currentSize]; + //[[filterBox animator] setFrameOrigin:origin]; + + + if (filterBox == fDecombBox || filterBox == fDeinterlaceBox) + { + /* fDecombDeinterlaceBox*/ + NSSize decombDeinterlaceBoxSize = [fDecombDeinterlaceBox frame].size; + NSPoint decombDeinterlaceBoxOrigin = [fDecombDeinterlaceBox frame].origin; + + //decombDeinterlaceBoxSize.height = [filterBox frame].size.height + 50; + if (sender == fDecombDeinterlaceSlider) + { + [fHBController writeToActivityLog: "Sender is deinterlace decomb slider"]; + } + + if ([fDeinterlaceBox isHidden] == YES) + { + decombDeinterlaceBoxSize.height = [fDecombBox frame].size.height + 50; + [fHBController writeToActivityLog: "Resize by Decomb box"]; + } + else + { + decombDeinterlaceBoxSize.height = [fDeinterlaceBox frame].size.height + 50; + [fHBController writeToActivityLog: "Resize by Deinterlace box"]; + } + /* get delta's for the change in window size */ + + CGFloat deltaYdecombDeinterlace = decombDeinterlaceBoxSize.height - [fDecombDeinterlaceBox frame].size.height; + + deltaYBoxShift = deltaYdecombDeinterlace; + + decombDeinterlaceBoxOrigin.y -= deltaYdecombDeinterlace; + + [fDecombDeinterlaceBox setFrameSize:decombDeinterlaceBoxSize]; + [fDecombDeinterlaceBox setFrameOrigin:decombDeinterlaceBoxOrigin]; + } + + /* now we must reset the origin of each box below the adjusted box*/ + NSPoint decombDeintOrigin = [fDecombDeinterlaceBox frame].origin; + NSPoint denoiseOrigin = [fDenoiseBox frame].origin; + NSPoint deblockOrigin = [fDeblockBox frame].origin; + if (sender == fDetelecinePopUp) + { + decombDeintOrigin.y -= deltaYBoxShift; + [fDecombDeinterlaceBox setFrameOrigin:decombDeintOrigin]; + + denoiseOrigin.y -= deltaYBoxShift; + [fDenoiseBox setFrameOrigin:denoiseOrigin]; + + deblockOrigin.y -= deltaYBoxShift; + [fDeblockBox setFrameOrigin:deblockOrigin]; + } + if (sender == fDecombPopUp || sender == fDeinterlacePopUp) + { + denoiseOrigin.y -= deltaYBoxShift; + [fDenoiseBox setFrameOrigin:denoiseOrigin]; + + deblockOrigin.y -= deltaYBoxShift; + [fDeblockBox setFrameOrigin:deblockOrigin]; + } + + if (sender == fDenoisePopUp) + { + deblockOrigin.y -= deltaYBoxShift; + [fDeblockBox setFrameOrigin:deblockOrigin]; + } + + /* now we call to resize the entire inspector window */ + [self resizeInspectorForTab:nil]; + } + +} + + +#pragma mark - + - (IBAction) previewGoWindowed: (id)sender { [fPreviewController goWindowedScreen:self]; @@ -115,6 +453,9 @@ /* Setup our layers for core animation */ [fSizeFilterView setWantsLayer:YES]; + [fPictureSizeBox setWantsLayer:YES]; + [fPictureCropBox setWantsLayer:YES]; + } @@ -138,11 +479,21 @@ { fHandle = handle; + [fPreviewController SetHandle: fHandle]; +} + +- (void) SetTitle: (hb_title_t *) title +{ + hb_job_t * job = title->job; + + fTitle = title; + + modulus = 8; //modulus value of 16, 8 or 4 [fWidthStepper setValueWraps: NO]; - [fWidthStepper setIncrement: 16]; + [fWidthStepper setIncrement: [[fModulusPopUp titleOfSelectedItem] intValue]]; [fWidthStepper setMinValue: 64]; [fHeightStepper setValueWraps: NO]; - [fHeightStepper setIncrement: 16]; + [fHeightStepper setIncrement: [[fModulusPopUp titleOfSelectedItem] intValue]]; [fHeightStepper setMinValue: 64]; [fCropTopStepper setIncrement: 2]; @@ -154,17 +505,6 @@ [fCropRightStepper setIncrement: 2]; [fCropRightStepper setMinValue: 0]; - [fPreviewController SetHandle: fHandle]; -} - -- (void) SetTitle: (hb_title_t *) title -{ - hb_job_t * job = title->job; - - fTitle = title; - - - [fWidthStepper setMaxValue: title->width]; [fWidthStepper setIntValue: job->width]; [fWidthField setIntValue: job->width]; @@ -185,8 +525,27 @@ { [fAnamorphicPopUp addItemWithTitle: @"Loose"]; } + [fAnamorphicPopUp addItemWithTitle: @"Custom"]; [fAnamorphicPopUp selectItemAtIndex: job->anamorphic.mode]; + //[self adjustSizingDisplay:nil]; + + /* populate the modulus popup here */ + [fModulusPopUp removeAllItems]; + [fModulusPopUp addItemWithTitle: @"16"]; + [fModulusPopUp addItemWithTitle: @"8"]; + [fModulusPopUp addItemWithTitle: @"4"]; + [fModulusPopUp addItemWithTitle: @"2"]; + [fModulusPopUp addItemWithTitle: @"1"]; + if (job->anamorphic.mode == 3) + { + [fModulusPopUp selectItemWithTitle: [NSString stringWithFormat:@"%d",job->anamorphic.modulus]]; + } + else + { + [fModulusPopUp selectItemWithTitle: @"16"]; + } + /* We initially set the previous state of keep ar to on */ keepAspectRatioPreviousState = 1; if (!autoCrop) @@ -221,21 +580,93 @@ MaxOutputWidth = title->width - job->crop[2] - job->crop[3]; MaxOutputHeight = title->height - job->crop[0] - job->crop[1]; + titleDarWidth = job->anamorphic.dar_width; + titleDarHeight = job->anamorphic.dar_height; + + titleParWidth = job->anamorphic.par_width; + titleParHeight = job->anamorphic.par_height; + [self SettingsChanged: nil]; } +- (IBAction) storageLinkChanged: (id) sender +{ + /* since we have a tickless slider, make sure we are at 0.0 or 1.0 */ + if ([fStorageLinkSlider floatValue] < 0.50) + { + [fStorageLinkSlider setFloatValue:0.0]; + /* set slider labels to reflect choice */ + [fStorageLinkParLabel setEnabled:YES]; + [fStorageLinkDisplayLabel setEnabled:NO]; + + } + else + { + [fStorageLinkSlider setFloatValue:1.0]; + /* set slider labels to reflect choice */ + [fStorageLinkParLabel setEnabled:NO]; + [fStorageLinkDisplayLabel setEnabled:YES]; + } +} + +- (IBAction) parLinkChanged: (id) sender +{ + /* since we have a tickless slider, make sure we are at 0.0 or 1.0 */ + if ([fParLinkSlider floatValue] < 0.50) + { + [fParLinkSlider setFloatValue:0.0]; + /* set slider labels to reflect choice */ + [fParLinkStorageLabel setEnabled:YES]; + [fParLinkDisplayLabel setEnabled:NO]; + } + else + { + [fParLinkSlider setFloatValue:1.0]; + /* set slider labels to reflect choice */ + [fParLinkStorageLabel setEnabled:NO]; + [fParLinkDisplayLabel setEnabled:YES]; + } + +} + +- (IBAction) displayLinkChanged: (id) sender +{ + /* since we have a tickless slider, make sure we are at 0.0 or 1.0 */ + if ([fDisplayLinkSlider floatValue] < 0.50) + { + [fDisplayLinkSlider setFloatValue:0.0]; + /* set slider labels to reflect choice */ + [fDisplayLinkStorageLabel setEnabled:YES]; + [fDisplayLinkParLabel setEnabled:NO]; + } + else + { + [fDisplayLinkSlider setFloatValue:1.0]; + /* set slider labels to reflect choice */ + [fDisplayLinkStorageLabel setEnabled:NO]; + [fDisplayLinkParLabel setEnabled:YES]; + } + +} - (IBAction) SettingsChanged: (id) sender { hb_job_t * job = fTitle->job; + [fWidthStepper setIncrement: [[fModulusPopUp titleOfSelectedItem] intValue]]; + [fHeightStepper setIncrement: [[fModulusPopUp titleOfSelectedItem] intValue]]; + /* Since custom anamorphic allows for a height setting > fTitle->height + * check to make sure it is returned to fTitle->height for all other modes + */ + [fHeightStepper setMaxValue: fTitle->height]; + autoCrop = ( [fCropMatrix selectedRow] == 0 ); [fCropTopStepper setEnabled: !autoCrop]; [fCropBottomStepper setEnabled: !autoCrop]; [fCropLeftStepper setEnabled: !autoCrop]; [fCropRightStepper setEnabled: !autoCrop]; - + if( autoCrop ) { memcpy( job->crop, fTitle->crop, 4 * sizeof( int ) ); @@ -247,14 +678,55 @@ job->crop[2] = [fCropLeftStepper intValue]; job->crop[3] = [fCropRightStepper intValue]; } + /* Initially we set modulus widgets to 16 and disabled since we + * only use it for Custom Anamorphic below + */ + [fModulusPopUp setEnabled:NO]; + job->anamorphic.modulus = 16; + + [fRatioCheck setEnabled: YES]; + + + [fParWidthField setEnabled: NO]; + [fParHeightField setEnabled: NO]; + [fDisplayWidthField setEnabled: NO]; + + /* If we are not custom anamorphic, make sure we retain the orginal par */ + if( [fAnamorphicPopUp indexOfSelectedItem] != 3 ) + { + job->anamorphic.par_width = titleParWidth; + job->anamorphic.par_height = titleParHeight; + [fRatioLabel setHidden: NO]; + } if( [fAnamorphicPopUp indexOfSelectedItem] > 0 ) { - if ([fAnamorphicPopUp indexOfSelectedItem] == 2) // Loose anamorphic + if ([fAnamorphicPopUp indexOfSelectedItem] == 1) // strict + { + [fWidthStepper setIntValue: fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]]; + [fWidthField setIntValue: fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]]; + + /* This will show correct anamorphic height values, but + show distorted preview picture ratio */ + [fHeightStepper setIntValue: fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]; + [fHeightField setIntValue: fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]; + job->width = [fWidthStepper intValue]; + job->height = [fHeightStepper intValue]; + + job->anamorphic.mode = 1; + [fWidthStepper setEnabled: NO]; + [fWidthField setEnabled: NO]; + [fHeightStepper setEnabled: NO]; + [fHeightField setEnabled: NO]; + } + else if ([fAnamorphicPopUp indexOfSelectedItem] == 2) // Loose anamorphic { job->anamorphic.mode = 2; [fWidthStepper setEnabled: YES]; [fWidthField setEnabled: YES]; + [fRatioCheck setEnabled: NO]; + [fHeightStepper setEnabled: NO]; + [fHeightField setEnabled: NO]; /* We set job->width and call hb_set_anamorphic_size in libhb to do a "dry run" to get * the values to be used by libhb for loose anamorphic */ @@ -273,21 +745,206 @@ job->height = [fHeightStepper intValue]; } - else // must be "1" or strict anamorphic + else if ([fAnamorphicPopUp indexOfSelectedItem] == 3) // custom / power user jamboree { - [fWidthStepper setIntValue: fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]]; - [fWidthField setIntValue: fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3]]; + +#pragma mark - STARTCapuj + + job->anamorphic.mode = 3; - /* This will show correct anamorphic height values, but - show distorted preview picture ratio */ - [fHeightStepper setIntValue: fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]; - [fHeightField setIntValue: fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1]]; - job->width = [fWidthStepper intValue]; - job->height = [fHeightStepper intValue]; + /* Set the status of our custom ana only widgets accordingly */ + /* for mod 3 we can use modulus other than 16 */ + [fModulusPopUp setEnabled:YES]; + job->anamorphic.modulus = [[fModulusPopUp titleOfSelectedItem] intValue]; - job->anamorphic.mode = 1; - [fWidthStepper setEnabled: NO]; - [fWidthField setEnabled: NO]; + [fWidthStepper setEnabled: YES]; + [fWidthField setEnabled: YES]; + + [fHeightStepper setEnabled: YES]; + /* for capuj the storage field is immaterial */ + [fHeightField setEnabled: YES]; + + [fRatioCheck setEnabled: YES]; + if (sender == fRatioCheck) + { + if ([fRatioCheck state] == NSOnState) + { + [fParWidthField setEnabled: NO]; + [fParHeightField setEnabled: NO]; + } + else + { + [fParWidthField setEnabled: YES]; + [fParHeightField setEnabled: YES]; + } + } + + [fParWidthField setEnabled: YES]; + [fParHeightField setEnabled: YES]; + + [fDisplayWidthField setEnabled: YES]; + + + /* If we are coming into custom ana or if in custom ana and the + * keep ar checkbox is checked, we reset the par to original + * which gives us a way back if things are hosed up + */ + + if (sender == fAnamorphicPopUp || (sender == fRatioCheck && [fRatioCheck state] == NSOnState)) + { + if (sender == fAnamorphicPopUp) + { + [fRatioCheck setState: NSOnState]; + } + + /* + KEEPING ASPECT RATIO + Disable editing: PIXEL WIDTH, PIXEL HEIGHT + */ + [fParWidthField setEnabled: NO]; + [fParHeightField setEnabled: NO]; + + job->width = [fWidthStepper intValue]; + job->height = [fHeightStepper intValue]; + + /* make sure our par is set back to original */ + job->anamorphic.par_width = titleParWidth; + job->anamorphic.par_height = titleParHeight; + + [fParWidthField setIntValue: titleParWidth]; + [fParHeightField setIntValue: titleParHeight]; + + /* modify our par dims from our storage dims */ + hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height); + float par_display_width = (float)output_width * (float)output_par_width / (float)output_par_height; + + /* go ahead and mod the display dims */ + [fDisplayWidthField setStringValue: [NSString stringWithFormat:@"%.2f", par_display_width]]; + + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + job->anamorphic.dar_height = (float)[fHeightStepper intValue]; + + /* Set our dar here assuming we are just coming into capuj mode */ + dar = [fDisplayWidthField floatValue] / (float)[fHeightField intValue]; + + } + + /* For capuj we disable these fields if we are keeping the dispay aspect */ + if ([fRatioCheck state] == NSOnState) + { + /* + KEEPING ASPECT RATIO + DAR = DISPLAY WIDTH / DISPLAY HEIGHT (cache after every modification) */ + /*Disable editing: PIXEL WIDTH, PIXEL HEIGHT */ + + [fParWidthField setEnabled: NO]; + [fParHeightField setEnabled: NO]; + + /* Changing DISPLAY WIDTH: */ + if (sender == fDisplayWidthField) + { + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + /* Changes HEIGHT to keep DAR */ + /* calculate the height to retain the dar */ + int raw_calulated_height = (int)((int)[fDisplayWidthField floatValue] / dar); + /* now use the modulus to go lower if there is a remainder */ + /* Note to me, raw_calulated_height % [[fModulusPopUp titleOfSelectedItem] intValue] + * gives me the remainder we are not mod (whatever our modulus is) subtract that from + * the actual calculated value derived from the dar to round down to the nearest mod value. + * This should be desireable over rounding up to the next mod value + */ + int modulus_height = raw_calulated_height - (raw_calulated_height % [[fModulusPopUp titleOfSelectedItem] intValue]); + if (modulus_height > fTitle->height) + { + [fHeightStepper setMaxValue: modulus_height]; + } + [fHeightStepper setIntValue: modulus_height]; + job->anamorphic.dar_height = (float)[fHeightStepper intValue]; + job->height = [fHeightStepper intValue]; + + /* Changes PIXEL WIDTH to new DISPLAY WIDTH */ + [fParWidthField setIntValue: [fDisplayWidthField intValue]]; + job->anamorphic.par_width = [fParWidthField intValue]; + /* Changes PIXEL HEIGHT to STORAGE WIDTH */ + [fParHeightField setIntValue: [fWidthField intValue]]; + job->anamorphic.par_height = [fParHeightField intValue]; + + } + /* Changing HEIGHT: */ + if (sender == fHeightStepper) + { + job->anamorphic.dar_height = (float)[fHeightStepper intValue]; + job->height = [fHeightStepper intValue]; + + /* Changes DISPLAY WIDTH to keep DAR*/ + [fDisplayWidthField setStringValue: [NSString stringWithFormat: @"%.2f",[fHeightStepper intValue] * dar]]; + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + /* Changes PIXEL WIDTH to new DISPLAY WIDTH */ + [fParWidthField setIntValue: [fDisplayWidthField intValue]]; + job->anamorphic.par_width = [fParWidthField intValue]; + /* Changes PIXEL HEIGHT to STORAGE WIDTH */ + [fParHeightField setIntValue: [fWidthField intValue]]; + job->anamorphic.par_height = [fParHeightField intValue]; + } + /* Changing STORAGE_WIDTH: */ + if (sender == fWidthStepper) + { + job->width = [fWidthStepper intValue]; + + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + job->anamorphic.dar_height = [fHeightStepper floatValue]; + + /* Changes PIXEL WIDTH to DISPLAY WIDTH */ + [fParWidthField setIntValue: [fDisplayWidthField intValue]]; + job->anamorphic.par_width = [fParWidthField intValue]; + /* Changes PIXEL HEIGHT to new STORAGE WIDTH */ + [fParHeightField setIntValue: [fWidthStepper intValue]]; + job->anamorphic.par_height = [fParHeightField intValue]; + } + } + else if ([fRatioCheck state] == NSOffState) + { + /* Changing STORAGE_WIDTH: */ + if (sender == fWidthStepper) + { + job->width = [fWidthStepper intValue]; + /* changes DISPLAY WIDTH to STORAGE WIDTH * PIXEL WIDTH / PIXEL HEIGHT */ + [fDisplayWidthField setStringValue: [NSString stringWithFormat: @"%.2f",(float)[fWidthStepper intValue] * [fParWidthField intValue] / [fParHeightField intValue]]]; + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + } + /* Changing PIXEL dimensions */ + if (sender == fParWidthField || sender == fParHeightField) + { + job->anamorphic.par_width = [fParWidthField intValue]; + job->anamorphic.par_height = [fParHeightField intValue]; + /* changes DISPLAY WIDTH to STORAGE WIDTH * PIXEL WIDTH / PIXEL HEIGHT */ + [fDisplayWidthField setStringValue: [NSString stringWithFormat: @"%.2f",(float)[fWidthStepper intValue] * [fParWidthField intValue] / [fParHeightField intValue]]]; + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + } + /* Changing DISPLAY WIDTH: */ + if (sender == fDisplayWidthField) + { + job->anamorphic.dar_width = [fDisplayWidthField floatValue]; + job->anamorphic.dar_height = (float)[fHeightStepper intValue]; + /* changes PIXEL WIDTH to DISPLAY WIDTH and PIXEL HEIGHT to STORAGE WIDTH */ + [fParWidthField setIntValue: [fDisplayWidthField intValue]]; + job->anamorphic.par_width = [fParWidthField intValue]; + + [fParHeightField setIntValue: [fWidthField intValue]]; + job->anamorphic.par_height = [fParHeightField intValue]; + hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height); + } + /* Changing HEIGHT: */ + if (sender == fHeightStepper) + { + /* just....changes the height.*/ + job->anamorphic.dar_height = [fHeightStepper intValue]; + job->height = [fHeightStepper intValue]; + } + + } + +#pragma mark - END Capuj } /* if the sender is the Anamorphic checkbox, record the state @@ -296,12 +953,10 @@ { keepAspectRatioPreviousState = [fRatioCheck state]; } - [fRatioCheck setState:NSOffState]; - [fRatioCheck setEnabled: NO]; - - - [fHeightStepper setEnabled: NO]; - [fHeightField setEnabled: NO]; + if ([fAnamorphicPopUp indexOfSelectedItem] != 3) + { + [fRatioCheck setState:NSOffState]; + } } else @@ -323,45 +978,59 @@ } - job->keep_ratio = ( [fRatioCheck state] == NSOnState ); - - if( job->keep_ratio ) + //job->keep_ratio = ( [fRatioCheck state] == NSOnState ); + + if ([fAnamorphicPopUp indexOfSelectedItem] != 3) { - if( sender == fWidthStepper || sender == fRatioCheck || - sender == fCropTopStepper || sender == fCropBottomStepper ) + job->keep_ratio = ( [fRatioCheck state] == NSOnState ); + if( job->keep_ratio ) { - hb_fix_aspect( job, HB_KEEP_WIDTH ); - if( job->height > fTitle->height ) + if( sender == fWidthStepper || sender == fRatioCheck || + sender == fCropTopStepper || sender == fCropBottomStepper ) { - job->height = fTitle->height; - hb_fix_aspect( job, HB_KEEP_HEIGHT ); + hb_fix_aspect( job, HB_KEEP_WIDTH ); + if( job->height > fTitle->height ) + { + job->height = fTitle->height; + hb_fix_aspect( job, HB_KEEP_HEIGHT ); + } } - } - else - { - hb_fix_aspect( job, HB_KEEP_HEIGHT ); - if( job->width > fTitle->width ) + else { - job->width = fTitle->width; - hb_fix_aspect( job, HB_KEEP_WIDTH ); + hb_fix_aspect( job, HB_KEEP_HEIGHT ); + if( job->width > fTitle->width ) + { + job->width = fTitle->width; + hb_fix_aspect( job, HB_KEEP_WIDTH ); + } } + } - // hb_get_preview can't handle sizes that are larger than the original title + } + + // hb_get_preview can't handle sizes that are larger than the original title + if ([fAnamorphicPopUp indexOfSelectedItem] != 3) + { // dimensions if( job->width > fTitle->width ) + { job->width = fTitle->width; - + } + if( job->height > fTitle->height ) + { job->height = fTitle->height; + } } - + [fWidthStepper setIntValue: job->width]; [fWidthField setIntValue: job->width]; - if( [fAnamorphicPopUp indexOfSelectedItem] < 2 ) - { + if( [fAnamorphicPopUp indexOfSelectedItem] != 2) // if we are not loose or custom + { [fHeightStepper setIntValue: job->height]; [fHeightField setIntValue: job->height]; } + [fCropTopStepper setIntValue: job->crop[0]]; [fCropTopField setIntValue: job->crop[0]]; [fCropBottomStepper setIntValue: job->crop[1]]; @@ -371,33 +1040,30 @@ [fCropRightStepper setIntValue: job->crop[3]]; [fCropRightField setIntValue: job->crop[3]]; - [fPreviewController SetTitle:fTitle]; + //[fPreviewController SetTitle:fTitle]; + /* Sanity Check Here for < 16 px preview to avoid crashing hb_get_preview. In fact, just for kicks lets getting previews at a min limit of 32, since no human can see any meaningful detail below that */ if (job->width >= 64 && job->height >= 64) { - - // Purge the existing picture previews so they get recreated the next time - // they are needed. - [fPreviewController purgeImageCache]; - /* We actually call displayPreview now from pictureSliderChanged which keeps - * our picture preview slider in sync with the previews being shown - */ - - //[fPreviewController pictureSliderChanged:nil]; - [self reloadStillPreview]; + [self reloadStillPreview]; } - + /* we get the sizing info to display from fPreviewController */ [fSizeInfoField setStringValue: [fPreviewController pictureSizeInfoString]]; - + if (sender != nil) { [fHBController pictureSettingsDidChange]; } + if ([[self window] isVisible]) + { + [self adjustSizingDisplay:nil]; + } + } - (NSString*) getPictureSizeInfoString @@ -419,12 +1085,12 @@ // Purge the existing picture previews so they get recreated the next time // they are needed. - [fPreviewController purgeImageCache]; + // [fPreviewController purgeImageCache]; /* We actually call displayPreview now from pictureSliderChanged which keeps * our picture preview slider in sync with the previews being shown */ - [fPreviewController pictureSliderChanged:nil]; + //[fPreviewController pictureSliderChanged:nil]; } } @@ -453,8 +1119,10 @@ - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title { - [self SetTitle:title]; + //[self SetTitle:title]; [self showWindow:sender]; + //[self adjustSizingDisplay:nil]; + //[self adjustFilterDisplay:nil]; } @@ -508,33 +1176,45 @@ are maintained across different sources */ - (IBAction) modeDecombDeinterlaceSliderChanged: (id) sender { + + /* since its a tickless slider, we have to make sure we are on or off */ + if ([fDecombDeinterlaceSlider floatValue] < 0.50) + { + [fDecombDeinterlaceSlider setFloatValue:0.0]; + } + else + { + [fDecombDeinterlaceSlider setFloatValue:1.0]; + } + + /* Decomb selected*/ if ([fDecombDeinterlaceSlider floatValue] == 0.0) { - [fDecombBox setHidden:NO]; - [fDeinterlaceBox setHidden:YES]; - fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem]; - fPictureFilterSettings.usedecomb = 1; - fPictureFilterSettings.deinterlace = 0; - [self adjustFilterDisplay:fDecombPopUp]; - [fDecombPopUp selectItemAtIndex:fPictureFilterSettings.decomb]; + [fDecombBox setHidden:NO]; + [fDeinterlaceBox setHidden:YES]; + fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem]; + fPictureFilterSettings.usedecomb = 1; + fPictureFilterSettings.deinterlace = 0; + [fDecombPopUp selectItemAtIndex:fPictureFilterSettings.decomb]; + [self adjustFilterDisplay:fDecombPopUp]; } else { - [fDecombBox setHidden:YES]; - [fDeinterlaceBox setHidden:NO]; - fPictureFilterSettings.usedecomb = 0; - fPictureFilterSettings.decomb = 0; - [self adjustFilterDisplay:fDeinterlacePopUp]; - [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace]; + [fDecombBox setHidden:YES]; + [fDeinterlaceBox setHidden:NO]; + fPictureFilterSettings.usedecomb = 0; + fPictureFilterSettings.decomb = 0; + [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace]; + [self adjustFilterDisplay:fDeinterlacePopUp]; } - [self FilterSettingsChanged: sender]; + [self FilterSettingsChanged: fDecombDeinterlaceSlider]; } - (IBAction) FilterSettingsChanged: (id) sender { - + fPictureFilterSettings.detelecine = [fDetelecinePopUp indexOfSelectedItem]; [self adjustFilterDisplay:fDetelecinePopUp]; @@ -566,62 +1246,6 @@ are maintained across different sources */ } -- (void) adjustFilterDisplay: (id) sender -{ - - NSBox * filterBox = nil; - NSTextField * filterField; - if (sender == fDetelecinePopUp) - { - filterBox = fDetelecineBox; - filterField = fDetelecineField; - } - if (sender == fDecombPopUp) - { - filterBox = fDecombBox; - filterField = fDecombField; - } - if (sender == fDeinterlacePopUp) - { - filterBox = fDeinterlaceBox; - filterField = fDeinterlaceField; - } - - if (sender == fDenoisePopUp) - { - filterBox = fDenoiseBox; - filterField = fDenoiseField; - } - - NSSize currentSize = [filterBox frame].size; - if ([sender titleOfSelectedItem] == @"Custom") - { - currentSize.height = 60; - } - else - { - currentSize.height = 30; - } - /* Check to see if we have changed the size from current */ - if (currentSize.height != [filterBox frame].size.height) - { - /* We are changing the size of the box, so recalc the origin */ - NSPoint origin = [filterBox frame].origin; - /* See if we are expanding the box downwards */ - if (currentSize.height > [filterBox frame].size.height) - { - origin.y = origin.y - currentSize.height / 2; - } - else - { - origin.y = origin.y + currentSize.height; - } - /* go ahead and resize the box */ - [filterBox setFrameSize:currentSize]; - [filterBox setFrameOrigin:origin]; - } - -} #pragma mark - -- 2.40.0