summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm')
-rw-r--r--chromium/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm175
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