diff options
Diffstat (limited to 'chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm')
-rw-r--r-- | chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm b/chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm new file mode 100644 index 00000000000..7c2aef4d4fe --- /dev/null +++ b/chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm @@ -0,0 +1,175 @@ +#import "SkUIDetailViewController.h" +#include "SampleApp.h" +#include "SkCGUtils.h" +#include "SkData.h" +#include "SkOSMenu.h" +@implementation SkUIDetailViewController +@synthesize fPrintButton, fOptionsButton, fPopOverController, fOptionsController; + +//Overwritten from UIViewController +- (void)viewDidLoad { + [super viewDidLoad]; + + fSkUIView = (SkUIView*)self.view; + + fWind = (SampleWindow*)fSkUIView.fWind; + fSkUIView.fTitleItem = self.navigationItem; + + [self createButtons]; + + UISwipeGestureRecognizer* swipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self + action:@selector(handleSwipe:)]; + [self.navigationController.navigationBar addGestureRecognizer:swipe]; + [swipe release]; + swipe = [[UISwipeGestureRecognizer alloc] + initWithTarget:self + action:@selector(handleSwipe:)]; + swipe.direction = UISwipeGestureRecognizerDirectionLeft; + [self.navigationController.navigationBar addGestureRecognizer:swipe]; + [swipe release]; + + fOptionsController = [[SkOptionsTableViewController alloc] + initWithStyle:UITableViewStyleGrouped]; + fSkUIView.fOptionsDelegate = fOptionsController; + [fOptionsController registerMenus:fWind->getMenus()]; + +} + +- (void)createButtons { + UIToolbar* toolbar = [[UIToolbar alloc] + initWithFrame:CGRectMake(0, 0, 125, 45)]; + [toolbar setBarStyle: UIBarStyleBlackOpaque]; + + UIBarButtonItem* flexibleSpace = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace + target:nil + action:nil]; + + fOptionsButton = [[UIBarButtonItem alloc] + initWithTitle:@"Options" + style:UIBarButtonItemStylePlain + target:self + action:@selector(presentOptions)]; + UIBarButtonItem* fixedSpace = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace + target:nil + action:nil]; + fixedSpace.width = 10; + + fPrintButton = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemAction + target:self + action:@selector(printContent)]; + fPrintButton.style = UIBarButtonItemStylePlain; + + [toolbar setItems:[NSArray arrayWithObjects:flexibleSpace, fOptionsButton, fixedSpace, fPrintButton, nil] + animated:NO]; + + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] + initWithCustomView:toolbar]; + [flexibleSpace release]; + [fixedSpace release]; + [toolbar release]; +} + +- (void)handleSwipe:(UISwipeGestureRecognizer *)sender { + if (UISwipeGestureRecognizerDirectionRight == sender.direction) + fWind->previousSample(); + else + fWind->nextSample(); +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + return YES; // Overriden to allow auto rotation for any direction +} + +- (void)dealloc { + [fPrintButton release]; + [fOptionsButton release]; + [fPopOverController release]; + [fOptionsController release]; + [super dealloc]; +} + +//Instance Methods +- (void)populateRoot:(SkUIRootViewController*)rootVC { + for (int i = 0; i < fWind->sampleCount(); ++i) { + [rootVC addItem:[NSString stringWithUTF8String:fWind->getSampleTitle(i).c_str()]]; + } +} + +- (void)goToItem:(NSUInteger)index { + fWind->goToSample(index); +} + +- (void)printContent { + UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; + UIPrintInfo *printInfo = [UIPrintInfo printInfo]; + printInfo.jobName = @"Skia iOS SampleApp"; + printInfo.duplex = UIPrintInfoDuplexLongEdge; + printInfo.outputType = UIPrintInfoOutputGeneral; + fWind->saveToPdf(); + [fSkUIView forceRedraw]; + fData = fWind->getPDFData(); + NSData* data = [NSData dataWithBytesNoCopy:(void*)fData->data() length:fData->size()]; + controller.printInfo = printInfo; + controller.printingItem = data; + //Add ref because data pointer retains a pointer to data + fData->ref(); + + void (^SkCompletionHandler)(UIPrintInteractionController *, BOOL, NSError *) = + ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) { + fData->unref(); + if (!completed && error) + NSLog(@"FAILED! due to error in domain %@ with error code %u", + error.domain, error.code); + }; + + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + [controller presentFromBarButtonItem:fPrintButton animated:YES + completionHandler:SkCompletionHandler]; + } else { + [controller presentAnimated:YES completionHandler:SkCompletionHandler]; + } +} + +- (void)presentOptions { + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + if (nil == fPopOverController) { + UINavigationController* navigation = [[UINavigationController alloc] + initWithRootViewController:fOptionsController]; + navigation.navigationBar.topItem.title = @"Options"; + fPopOverController = [[UIPopoverController alloc] initWithContentViewController:navigation]; + [navigation release]; + } + + if (fPopOverController.isPopoverVisible) + [fPopOverController dismissPopoverAnimated:YES]; + else + [fPopOverController presentPopoverFromBarButtonItem:fOptionsButton + permittedArrowDirections:UIPopoverArrowDirectionAny + animated:YES]; + + } else { + UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" + style:UIBarButtonItemStyleBordered + target:nil + action:nil]; + self.navigationItem.backBarButtonItem = backButton; + [backButton release]; + [self.navigationController pushViewController:fOptionsController animated:YES]; + self.navigationController.navigationBar.topItem.title = @"Options"; + } +} + +//Popover Management +- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem { + [self.navigationItem setLeftBarButtonItem:barButtonItem animated:NO]; +} + +- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem { + [self.navigationItem setLeftBarButtonItem:nil animated:NO]; +} + +@end
\ No newline at end of file |