iOSSampleApp can now switch backends during runtime


git-svn-id: http://skia.googlecode.com/svn/trunk@1897 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm b/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm
index 17e0ec2..c0f4990 100644
--- a/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm
+++ b/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm
@@ -99,7 +99,7 @@
     printInfo.duplex = UIPrintInfoDuplexLongEdge;
     printInfo.outputType = UIPrintInfoOutputGeneral;
     fWind->saveToPdf();
-    [self.view drawRect:self.view.bounds];
+    [fSkUIView forceRedraw];
     fData = fWind->getPDFData();
     NSData* data = [NSData dataWithBytesNoCopy:(void*)fData->data() length:fData->size()];
     controller.printInfo = printInfo;
diff --git a/experimental/iOSSampleApp/Shared/SkUIView.h b/experimental/iOSSampleApp/Shared/SkUIView.h
index 78278b0..35f8622 100644
--- a/experimental/iOSSampleApp/Shared/SkUIView.h
+++ b/experimental/iOSSampleApp/Shared/SkUIView.h
@@ -1,9 +1,10 @@
-#import <UIKit/UIKit.h>
 #import <OpenGLES/EAGL.h>
 #import <OpenGLES/ES1/gl.h>
 #import <OpenGLES/ES1/glext.h>
 #import <OpenGLES/ES2/gl.h>
 #import <OpenGLES/ES2/glext.h>
+#import <QuartzCore/QuartzCore.h>
+#import <UIKit/UIKit.h>
 #include "SkMatrix.h"
 #include "FlingState.h"
 #include "SampleApp.h"
@@ -26,11 +27,13 @@
         GLint           fWidth;
         GLint           fHeight;
     } fGL;
-
+    
     FPSState* fFPSState;
     NSString* fTitle;
     UINavigationItem* fTitleItem;
     SkOSWindow* fWind;
+    CALayer* fRasterLayer;
+    CAEAGLLayer* fGLLayer;
     
     SkiOSDeviceManager* fDevManager;
 }
@@ -38,10 +41,13 @@
 @property (nonatomic, assign) SkOSWindow *fWind;
 @property (nonatomic, retain) UINavigationItem* fTitleItem;
 @property (nonatomic, copy) NSString* fTitle;
+@property (nonatomic, retain) CALayer* fRasterLayer;
+@property (nonatomic, retain) CAEAGLLayer* fGLLayer;
+
+- (void)forceRedraw;
 
 - (void)setSkTitle:(const char*)title;
 - (void)postInvalWithRect:(const SkIRect*)rectOrNil;
 - (BOOL)onHandleEvent:(const SkEvent&)event;
-
 @end
 
diff --git a/experimental/iOSSampleApp/Shared/SkUIView.mm b/experimental/iOSSampleApp/Shared/SkUIView.mm
index 8a3309e..77cab50 100644
--- a/experimental/iOSSampleApp/Shared/SkUIView.mm
+++ b/experimental/iOSSampleApp/Shared/SkUIView.mm
@@ -1,5 +1,4 @@
 #import "SkUIView.h"
-#include <QuartzCore/QuartzCore.h>
 
 //#define SKWIND_CONFIG       SkBitmap::kRGB_565_Config
 #define SKWIND_CONFIG       SkBitmap::kARGB_8888_Config
@@ -10,9 +9,6 @@
 
 //#define USE_GL_1
 #define USE_GL_2
-#if defined(USE_GL_1) || defined(USE_GL_2)
-#define USE_GL
-#endif
 
 #include "SkCanvas.h"
 #include "GrContext.h"
@@ -25,6 +21,7 @@
     fGrRenderTarget = NULL;
     usingGL = false;
 }
+
 SkiOSDeviceManager::~SkiOSDeviceManager() {
     SkSafeUnref(fGrContext);
     SkSafeUnref(fGrRenderTarget);
@@ -35,8 +32,7 @@
     if (NULL == fGrContext) {
 #ifdef USE_GL_1
         fGrContext = GrContext::Create(kOpenGL_Fixed_GrEngine, NULL);
-#endif
-#ifdef USE_GL_2
+#else
         fGrContext = GrContext::Create(kOpenGL_Shaders_GrEngine, NULL);
 #endif
     }
@@ -66,7 +62,7 @@
     }
     else {
         //The clip needs to be applied with a device attached to the canvas
-        //canvas->setBitmapDevice(win->getBitmap());
+        canvas->setBitmapDevice(win->getBitmap());
         usingGL = false;
     }
     return true;
@@ -79,15 +75,16 @@
         fGrContext->flush();
     }
     else {
-        CGContextRef cg = UIGraphicsGetCurrentContext();
-        SkCGDrawBitmap(cg, win->getBitmap(), 0, 0);
+        //CGContextRef cg = UIGraphicsGetCurrentContext();
+        //SkCGDrawBitmap(cg, win->getBitmap(), 0, 0);
     }
     win->presentGL();
 }
+
 ////////////////////////////////////////////////////////////////////////////////
 @implementation SkUIView
 
-@synthesize fWind, fTitle, fTitleItem;
+@synthesize fWind, fTitle, fTitleItem, fRasterLayer, fGLLayer;
 
 #include "SkApplication.h"
 #include "SkEvent.h"
@@ -169,26 +166,11 @@
 #define FPS_EndDraw()   gFPS.endDraw()
 #define FPS_Flush(wind) gFPS.flush(wind)
 
-
 ///////////////////////////////////////////////////////////////////////////////
-#ifdef USE_GL
-+ (Class) layerClass {
-	return [CAEAGLLayer class];
-}
-#endif
 
 - (id)initWithMyDefaults {
     fRedrawRequestPending = false;
     fFPSState = new FPSState;
-#ifdef USE_GL
-    CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
-    eaglLayer.opaque = TRUE;
-    eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
-                                    [NSNumber numberWithBool:NO],
-                                    kEAGLDrawablePropertyRetainedBacking,
-                                    SKGL_CONFIG,
-                                    kEAGLDrawablePropertyColorFormat,
-                                    nil];
     
 #ifdef USE_GL_1
     fGL.fContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
@@ -214,7 +196,33 @@
     
     glBindRenderbuffer(GL_RENDERBUFFER, fGL.fStencilbuffer);
     glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fGL.fStencilbuffer);
-#endif
+
+    fGLLayer = [CAEAGLLayer layer];
+    fGLLayer.bounds = self.bounds;
+    fGLLayer.anchorPoint = CGPointMake(0, 0);
+    fGLLayer.opaque = TRUE;
+    [self.layer addSublayer:fGLLayer];
+    fGLLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithBool:NO],
+                                   kEAGLDrawablePropertyRetainedBacking,
+                                   SKGL_CONFIG,
+                                   kEAGLDrawablePropertyColorFormat,
+                                   nil];
+    
+    fRasterLayer = [CALayer layer];
+    fRasterLayer.anchorPoint = CGPointMake(0, 0);
+    fRasterLayer.opaque = TRUE;
+    [self.layer addSublayer:fRasterLayer];
+    
+    NSMutableDictionary *newActions = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"onOrderIn",
+                                       [NSNull null], @"onOrderOut",
+                                       [NSNull null], @"sublayers",
+                                       [NSNull null], @"contents",
+                                       [NSNull null], @"bounds",
+                                       nil];
+    fGLLayer.actions = newActions;
+    fRasterLayer.actions = newActions;
+    [newActions release];
     
     fDevManager = new SkiOSDeviceManager;
     fWind = new SampleWindow(self, NULL, NULL, fDevManager);
@@ -244,10 +252,55 @@
     delete fWind;
     delete fDevManager;
     delete fFPSState;
+    [fRasterLayer release];
+    [fGLLayer release];
     application_term();
     [fTitleItem release];
     [super dealloc];
 }
+
+- (void)layoutSubviews {
+    int W, H;
+    gScreenScale = [UIScreen mainScreen].scale;
+    
+    if ([self respondsToSelector:@selector(setContentScaleFactor:)]) {
+        self.contentScaleFactor = gScreenScale;
+    }
+    
+    // Allocate color buffer backing based on the current layer size
+    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer);
+    [fGL.fContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:fGLLayer];
+    
+    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &fGL.fWidth);
+    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &fGL.fHeight);
+    
+    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fStencilbuffer);
+    glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, fGL.fWidth, fGL.fHeight);
+    
+    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
+        NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
+    }
+    
+    if (fDevManager->isUsingGL()) {
+        W = fGL.fWidth;
+        H = fGL.fHeight;
+        CGRect rect = CGRectMake(0, 0, W, H);
+        fGLLayer.bounds = rect;
+    }
+    else {
+        CGRect rect = self.bounds;
+        W = (int)CGRectGetWidth(rect);
+        H = (int)CGRectGetHeight(rect);
+        fRasterLayer.bounds = rect;
+    }
+    
+    printf("---- layoutSubviews %d %d\n", W, H);
+    fWind->resize(W, H);
+    fWind->inval(NULL);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
 - (void)drawWithCanvas:(SkCanvas*)canvas {
     fRedrawRequestPending = false;
     fFPSState->startDraw();
@@ -259,47 +312,6 @@
     fFPSState->flush(fWind);
 }
 
-///////////////////////////////////////////////////////////////////////////////
-
-- (void)layoutSubviews {
-    int W, H;
-    gScreenScale = [UIScreen mainScreen].scale;
-#ifdef USE_GL
-    CAEAGLLayer* eaglLayer = (CAEAGLLayer*)self.layer;
-    if ([self respondsToSelector:@selector(setContentScaleFactor:)]) {
-        self.contentScaleFactor = gScreenScale;
-    }
-    
-    // Allocate color buffer backing based on the current layer size
-    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer);
-    [fGL.fContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:eaglLayer];
-    
-    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &fGL.fWidth);
-    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &fGL.fHeight);
-
-    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fStencilbuffer);
-    glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, fGL.fWidth, fGL.fHeight);
-    
-    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
-        NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
-    }
-    
-    W = fGL.fWidth;
-    H = fGL.fHeight;
-#else
-    CGRect rect = [self bounds];
-    W = (int)CGRectGetWidth(rect);
-    H = (int)CGRectGetHeight(rect);
-#endif
-
-    printf("---- layoutSubviews %d %d\n", W, H);
-    fWind->resize(W, H);
-    fWind->inval(NULL);
-}
-
-#ifdef USE_GL
-#include "SkDevice.h"
-
 - (void)drawInGL {
     // This application only creates a single context which is already set current at this point.
     // This call is redundant, but needed if dealing with multiple contexts.
@@ -317,14 +329,13 @@
     if (scissorEnable) {
         glEnable(GL_SCISSOR_TEST);
     }
-    glViewport(0, 0, fWind->width(), fWind->height());
+    glViewport(0, 0, fGL.fWidth, fGL.fHeight);
     
     
     GrContext* ctx = fDevManager->getGrContext();
     SkASSERT(NULL != ctx);
     
     SkCanvas canvas;
-    canvas.setDevice(new SkGpuDevice(ctx, SkGpuDevice::Current3DApiRenderTarget()))->unref();
     
     // if we're not "retained", then we have to always redraw everything.
     // This call forces us to ignore the fDirtyRgn, and draw everywhere.
@@ -348,14 +359,20 @@
 #endif
 }
 
-#else   // raster case
-
-- (void)drawRect:(CGRect)rect {
+- (void)drawInRaster {
     SkCanvas canvas;
-    canvas.setBitmapDevice(fWind->getBitmap());
     [self drawWithCanvas:&canvas];
+    CGImageRef cgimage = SkCreateCGImageRef(fWind->getBitmap());
+    fRasterLayer.contents = (id)cgimage;
+    CGImageRelease(cgimage);
 }
-#endif
+
+- (void)forceRedraw {
+    if (fDevManager->isUsingGL())
+        [self drawInGL];
+    else 
+        [self drawInRaster];
+}
 
 //Gesture Handlers
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
@@ -400,48 +417,25 @@
 }
 
 - (BOOL)onHandleEvent:(const SkEvent&)evt {
-#ifdef USE_GL
-    if (evt.isType(kREDRAW_UIVIEW_GL)) {
-        [self drawInGL];
-        return true;
-    }
-#endif
     return false;
 }
 
 - (void)postInvalWithRect:(const SkIRect*)r {
-#ifdef USE_GL
-
-#if 1
     if (!fRedrawRequestPending) {
         fRedrawRequestPending = true;
-        /*
-            performSelectorOnMainThread seems to starve updating other views
-            (e.g. our FPS view in the titlebar), so we use the afterDelay
-            version
-         */
-        if (0) {
-            [self performSelectorOnMainThread:@selector(drawInGL) withObject:nil waitUntilDone:NO];
-        } else {
+        bool gl = fDevManager->isUsingGL();
+        [CATransaction begin];
+        [CATransaction setAnimationDuration:0];
+        fRasterLayer.hidden = gl;
+        fGLLayer.hidden = !gl;
+        [CATransaction commit];
+        if (gl) {
             [self performSelector:@selector(drawInGL) withObject:nil afterDelay:0];
         }
+        else {
+            [self performSelector:@selector(drawInRaster) withObject:nil afterDelay:0];
+        }
     }
-#else
-    if (!fRedrawRequestPending) {
-        SkEvent* evt = new SkEvent(kREDRAW_UIVIEW_GL);
-        evt->post(fWind->getSinkID());
-        fRedrawRequestPending = true;
-    }
-#endif
-
-#else
-    if (r) {
-        [self setNeedsDisplayInRect:CGRectMake(r->fLeft, r->fTop,
-                                               r->width(), r->height())];
-    } else {
-        [self setNeedsDisplay];
-    }
-#endif
 }
 
 @end
diff --git a/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib b/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib
index d134be1..d05c212 100644
--- a/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib
+++ b/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib
@@ -203,7 +203,7 @@
 									</object>
 									<object class="IBUILabel" id="706652129">
 										<reference key="NSNextResponder" ref="879616490"/>
-										<int key="NSvFlags">265</int>
+										<int key="NSvFlags">-2147483383</int>
 										<string key="NSFrame">{{525, 923}, {49, 29}}</string>
 										<reference key="NSSuperview" ref="879616490"/>
 										<bool key="IBUIOpaque">NO</bool>
@@ -246,34 +246,6 @@
 					</object>
 				</object>
 			</object>
-			<object class="IBUITableViewController" id="714935080">
-				<object class="IBUITableView" key="IBUIView" id="999117554">
-					<nil key="NSNextResponder"/>
-					<int key="NSvFlags">274</int>
-					<string key="NSFrame">{{184, 202}, {400, 600}}</string>
-					<object class="NSColor" key="IBUIBackgroundColor">
-						<int key="NSColorSpace">1</int>
-						<bytes key="NSRGB">MCAwIDAgMAA</bytes>
-					</object>
-					<bool key="IBUIClipsSubviews">YES</bool>
-					<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-					<bool key="IBUIAlwaysBounceVertical">YES</bool>
-					<int key="IBUIStyle">1</int>
-					<int key="IBUISeparatorStyle">2</int>
-					<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
-					<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
-					<float key="IBUIRowHeight">44</float>
-					<float key="IBUISectionHeaderHeight">10</float>
-				</object>
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-					<int key="IBUIStatusBarStyle">2</int>
-				</object>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">1</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-				<bool key="IBUIHorizontal">NO</bool>
-			</object>
 		</object>
 		<object class="IBObjectContainer" key="IBDocument.Objects">
 			<object class="NSMutableArray" key="connectionRecords">
@@ -367,22 +339,6 @@
 					</object>
 					<int key="connectionID">172</int>
 				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="999117554"/>
-						<reference key="destination" ref="714935080"/>
-					</object>
-					<int key="connectionID">191</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">dataSource</string>
-						<reference key="source" ref="999117554"/>
-						<reference key="destination" ref="714935080"/>
-					</object>
-					<int key="connectionID">192</int>
-				</object>
 			</object>
 			<object class="IBMutableOrderedSet" key="objectRecords">
 				<object class="NSArray" key="orderedObjects">
@@ -551,20 +507,6 @@
 						<reference key="object" ref="822261752"/>
 						<reference key="parent" ref="267525560"/>
 					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">185</int>
-						<reference key="object" ref="714935080"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="999117554"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">190</int>
-						<reference key="object" ref="999117554"/>
-						<reference key="parent" ref="714935080"/>
-					</object>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
@@ -589,9 +531,6 @@
 					<string>150.IBPluginDependency</string>
 					<string>151.IBPluginDependency</string>
 					<string>152.IBPluginDependency</string>
-					<string>185.IBEditorWindowLastContentRect</string>
-					<string>185.IBPluginDependency</string>
-					<string>190.IBPluginDependency</string>
 					<string>2.IBEditorWindowLastContentRect</string>
 					<string>2.IBPluginDependency</string>
 					<string>52.CustomClassName</string>
@@ -632,13 +571,10 @@
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>{{269, 480}, {768, 1024}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>{{125, 4}, {768, 1024}}</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>SkUISplitViewController</string>
-					<string>{{35, 4}, {783, 1002}}</string>
+					<string>{{73, -273}, {768, 1024}}</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>SkUIRootViewController</string>
diff --git a/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib b/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib
index 87d0865..fff6a53 100644
--- a/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib
+++ b/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib
@@ -13,7 +13,7 @@
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 			<integer value="28"/>
-			<integer value="98"/>
+			<integer value="11"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
@@ -85,7 +85,7 @@
 								<bool key="EncodedWithXMLCoder">YES</bool>
 								<object class="IBUIToolbar" id="548887586">
 									<reference key="NSNextResponder" ref="456730278"/>
-									<int key="NSvFlags">266</int>
+									<int key="NSvFlags">-2147483382</int>
 									<object class="NSMutableArray" key="NSSubviews">
 										<bool key="EncodedWithXMLCoder">YES</bool>
 										<object class="IBUISwitch" id="565373618">
@@ -133,7 +133,7 @@
 								</object>
 								<object class="IBUILabel" id="1033881221">
 									<reference key="NSNextResponder" ref="456730278"/>
-									<int key="NSvFlags">265</int>
+									<int key="NSvFlags">-2147483383</int>
 									<string key="NSFrame">{{80, 379}, {59, 29}}</string>
 									<reference key="NSSuperview" ref="456730278"/>
 									<bool key="IBUIOpaque">NO</bool>
@@ -166,12 +166,6 @@
 						<object class="IBUINavigationItem" key="IBUINavigationItem" id="694217933">
 							<reference key="IBUINavigationBar"/>
 							<string key="IBUITitle">Item</string>
-							<object class="IBUIBarButtonItem" key="IBUIRightBarButtonItem" id="108468174">
-								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-								<int key="IBUIStyle">1</int>
-								<reference key="IBUINavigationItem" ref="694217933"/>
-								<int key="IBUISystemItemIdentifier">9</int>
-							</object>
 							<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
 						</object>
 						<reference key="IBUIParentViewController" ref="490735104"/>
@@ -10169,14 +10163,6 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
-						<string key="label">printContent:</string>
-						<reference key="source" ref="108468174"/>
-						<reference key="destination" ref="386778494"/>
-					</object>
-					<int key="connectionID">64</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchEventConnection" key="connection">
 						<string key="label">usePipe:</string>
 						<reference key="source" ref="565373618"/>
 						<reference key="destination" ref="386778494"/>
@@ -10202,14 +10188,6 @@
 				</object>
 				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">fPrintButton</string>
-						<reference key="source" ref="386778494"/>
-						<reference key="destination" ref="108468174"/>
-					</object>
-					<int key="connectionID">81</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
 						<string key="label">fNavigationBar</string>
 						<reference key="source" ref="386778494"/>
 						<reference key="destination" ref="1017823495"/>
@@ -10383,15 +10361,9 @@
 						<reference key="object" ref="694217933"/>
 						<object class="NSMutableArray" key="children">
 							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="108468174"/>
 						</object>
 						<reference key="parent" ref="386778494"/>
 					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">62</int>
-						<reference key="object" ref="108468174"/>
-						<reference key="parent" ref="694217933"/>
-					</object>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
@@ -10420,7 +10392,6 @@
 					<string>4.IBPluginDependency</string>
 					<string>54.IBPluginDependency</string>
 					<string>54.IBViewBoundsToFrameTransform</string>
-					<string>62.IBPluginDependency</string>
 					<string>67.IBPluginDependency</string>
 					<string>67.IBViewBoundsToFrameTransform</string>
 					<string>69.IBPluginDependency</string>
@@ -10469,7 +10440,6 @@
 						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw9kAAA</bytes>
 					</object>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<object class="NSAffineTransform">
 						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw+8AAA</bytes>
 					</object>
@@ -10560,14 +10530,12 @@
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>enterServerIP:</string>
-							<string>printContent:</string>
 							<string>usePipe:</string>
 						</object>
 						<object class="NSMutableArray" key="dict.values">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>id</string>
 							<string>id</string>
-							<string>id</string>
 						</object>
 					</object>
 					<object class="NSMutableDictionary" key="actionInfosByName">
@@ -10575,7 +10543,6 @@
 						<object class="NSArray" key="dict.sortedKeys">
 							<bool key="EncodedWithXMLCoder">YES</bool>
 							<string>enterServerIP:</string>
-							<string>printContent:</string>
 							<string>usePipe:</string>
 						</object>
 						<object class="NSMutableArray" key="dict.values">
@@ -10585,45 +10552,20 @@
 								<string key="candidateClassName">id</string>
 							</object>
 							<object class="IBActionInfo">
-								<string key="name">printContent:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
 								<string key="name">usePipe:</string>
 								<string key="candidateClassName">id</string>
 							</object>
 						</object>
 					</object>
 					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fNavigationBar</string>
-							<string>fPrintButton</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>UINavigationBar</string>
-							<string>UIBarButtonItem</string>
-						</object>
+						<string key="NS.key.0">fNavigationBar</string>
+						<string key="NS.object.0">UINavigationBar</string>
 					</object>
 					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fNavigationBar</string>
-							<string>fPrintButton</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fNavigationBar</string>
-								<string key="candidateClassName">UINavigationBar</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fPrintButton</string>
-								<string key="candidateClassName">UIBarButtonItem</string>
-							</object>
+						<string key="NS.key.0">fNavigationBar</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">fNavigationBar</string>
+							<string key="candidateClassName">UINavigationBar</string>
 						</object>
 					</object>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
@@ -10684,7 +10626,7 @@
 					<string key="superclassName">UIView</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">../../gpu/include/SkUIView.h</string>
+						<string key="minorKey">Shared/SkUIView.h</string>
 					</object>
 				</object>
 			</object>