[Vm-dev] [commit] r2297 - iOS etoy changes for touch
commits at squeakvm.org
commits at squeakvm.org
Sat Sep 11 22:22:47 UTC 2010
Author: johnmci
Date: 2010-09-11 15:22:46 -0700 (Sat, 11 Sep 2010)
New Revision: 2297
Modified:
trunk/platforms/iOS/vm/iPhone/Classes/SqueakNoOGLIPhoneAppDelegate.m
trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIController.m
trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.h
trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.m
trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.h
trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.m
trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+events.m
trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+imageReadWrite.m
Log:
iOS etoy changes for touch
SqueakUIView.m
set multipleTouchEnabled in setup not SqueakUIView
record touchesCancelled: action
recordCharEvent needs to auto-translate LF to CR
sqSqueakIPhoneApplication+imageReadWrite.m
#define what sources and image to use..
sqSqueakIPhoneApplication+events.m
Need the touch id in the record
SqueakUIViewOpenGL.m
no glFlush needed
SqueakUIView.h
broken #ifdef
SqueakUIController.m
willRotateToInterfaceOrientation changes
SqueakNoOpenGLIPhoneAppDelegatem
zoomToOrientation
changes to window setup
Modified: trunk/platforms/iOS/vm/iPhone/Classes/SqueakNoOGLIPhoneAppDelegate.m
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/SqueakNoOGLIPhoneAppDelegate.m 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/SqueakNoOGLIPhoneAppDelegate.m 2010-09-11 22:22:46 UTC (rev 2297)
@@ -92,6 +92,19 @@
return self.window;
}
+- (void) zoomToOrientation:(UIInterfaceOrientation)o animated:(BOOL)animated {
+ CGRect zoomRect;
+ zoomRect.origin.x = 0;
+ zoomRect.origin.y = 0;
+ if (UIInterfaceOrientationIsPortrait(o)) {
+ zoomRect.size.width = 1200 * 4 / 3;
+ } else {
+ zoomRect.size.width = 1200 * 3 / 4;
+ }
+ zoomRect.size.height = zoomRect.size.width * 3 / 4;
+ [self.scrollView zoomToRect: zoomRect animated: animated];
+}
+
- (void) makeMainWindowOnMainThread
//This is fired via a cross thread message send from logic that checks to see if the window exists in the squeak thread.
@@ -108,26 +121,28 @@
if (useScrollingView) {
scrollView = [[UIScrollView alloc ] initWithFrame: mainScreenSize];
-
+
//Now setup the true view size as the width/height * 2.0 so we can have a larger squeak window and zoom in/out.
-
- CGRect fakeScreenSize = mainScreenSize ;
+ CGRect fakeScreenSize ;
fakeScreenSize.origin.x = 0;
fakeScreenSize.origin.y = 0;
- fakeScreenSize.size.width *= 2.0;
- fakeScreenSize.size.height *= 2.0;
-#error use SqueakUIViewCALayer
- mainView = [[SqueakUIViewOpenGL alloc] initWithFrame: fakeScreenSize];
+ fakeScreenSize.size.width = 1200;
+ fakeScreenSize.size.height = 900;
+//#error use SqueakUIViewCALayer SqueakUIViewOpenGL
+ mainView = [[SqueakUIViewCALayer alloc] initWithFrame: fakeScreenSize];
+ mainView.backgroundColor = [UIColor blackColor];
+ mainView.multipleTouchEnabled = YES;
+ mainView.autoresizingMask = UIViewAutoresizingNone;
self.mainView.clearsContextBeforeDrawing = NO;
//Setup the scroll view which wraps the mainView
-
+ self.scrollView.scrollEnabled = useScrollingView;
self.scrollView.clearsContextBeforeDrawing = NO;
self.scrollView.canCancelContentTouches = NO;
- self.scrollView.contentSize = [self.mainView bounds].size;
- self.scrollView.minimumZoomScale = 0.5;
+ self.scrollView.minimumZoomScale = 0.35555;
self.scrollView.maximumZoomScale = 4.0;
self.scrollView.delegate = self;
+ self.scrollView.backgroundColor = [UIColor blackColor];
self.viewController = [SqueakUIController new];
self.viewController.view = self.scrollView;
@@ -135,15 +150,16 @@
// self.scrollView.autoresizesSubviews=YES;
// self.scrollView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
+ [self zoomToOrientation: UIInterfaceOrientationPortrait animated: NO];
[self.scrollView addSubview: self.mainView];
[window addSubview: self.scrollView];
} else {
-
- CGRect fakeScreenSize = mainScreenSize ;
-#error use SqueakUIViewCALayer
- mainView = [[SqueakUIViewOpenGL alloc] initWithFrame: fakeScreenSize];
+ CGRect fakeScreenSize = mainScreenSize;
+//#error use SqueakUIViewCALayer SqueakUIViewOpenGL
+ mainView = [[SqueakUIViewCALayer alloc] initWithFrame: fakeScreenSize];
self.mainView.clearsContextBeforeDrawing = NO;
+ [self.mainView setMultipleTouchEnabled: YES];
self.viewController = [SqueakUIController new];
self.viewController.view = self.mainView;
[window addSubview: self.mainView];
Modified: trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIController.m
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIController.m 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIController.m 2010-09-11 22:22:46 UTC (rev 2297)
@@ -61,9 +61,19 @@
[data release];
}
+
+- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
+ [gDelegateApp zoomToOrientation: toInterfaceOrientation animated: YES];
+}
+
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
+ UIInterfaceOrientation o = [[UIApplication sharedApplication] statusBarOrientation];
+ if (UIInterfaceOrientationIsPortrait(o))
+ [gDelegateApp.mainView becomeFirstResponder];
+ else
+ [gDelegateApp.mainView resignFirstResponder];
+
CGRect mainScreenSize = [[UIScreen mainScreen] applicationFrame];
- UIInterfaceOrientation o = [[UIApplication sharedApplication] statusBarOrientation];
CGRect f;
f.origin.x = 0.0f;
@@ -85,7 +95,8 @@
// gDelegateApp.mainView.frame = f;
// [gDelegateApp.scrollView sizeToFit];
- [self performSelector: @selector(pushEventToQueue) withObject: nil afterDelay: 1.0];
+ [self performSelector: @selector(pushEventToQueue) withObject: nil afterDelay: 1.0];
+
}
@end
Modified: trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.h
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.h 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.h 2010-09-11 22:22:46 UTC (rev 2297)
@@ -40,7 +40,7 @@
#import <Foundation/Foundation.h>
#include <AvailabilityInternal.h>
-#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_3_1
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
@interface SqueakUIView : UIView <UIKeyInput> {
#else
@interface SqueakUIView : UIView {
Modified: trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.m
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.m 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIView.m 2010-09-11 22:22:46 UTC (rev 2297)
@@ -53,7 +53,6 @@
self = [super initWithFrame: aFrame];
self.autoresizingMask = UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
colorspace = CGColorSpaceCreateDeviceRGB();
- self.multipleTouchEnabled = YES;
return self;
}
@@ -92,6 +91,8 @@
}
- (void) touchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event {
+ //Called by Main Thread, beware of calling Squeak routines in Squeak Thread
+ [(sqSqueakIPhoneApplication *) gDelegateApp.squeakApplication recordTouchEvent: touches type: UITouchPhaseCancelled];
}
- (BOOL)canBecomeFirstResponder {
@@ -155,6 +156,10 @@
options: 0 range: picker remainingRange: NULL];
[lookupString release];
+ // LF -> CR
+ if (macRomanCharacter == 10)
+ macRomanCharacter = 13;
+
evt.pressCode = EventKeyDown;
BOOL isUppercase = [[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember: unicode];
evt.modifiers = isUppercase ? ShiftKeyBit : 0;
Modified: trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.h
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.h 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.h 2010-09-11 22:22:46 UTC (rev 2297)
@@ -46,7 +46,7 @@
extern struct VirtualMachine* interpreterProxy;
// Run-time assertion
-#if 1
+#if 0
#define rt_assert(expression) assert(expression)
#else
#define rt_assert(expression)
Modified: trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.m
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.m 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/SqueakUIViewOpenGL.m 2010-09-11 22:22:46 UTC (rev 2297)
@@ -140,7 +140,7 @@
[self drawRect: clippy];
syncNeeded = NO;
clippyIsEmpty = YES;
- glFlush();
+// glFlush();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);glCheckError();
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
Modified: trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+events.m
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+events.m 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+events.m 2010-09-11 22:22:46 UTC (rev 2297)
@@ -113,10 +113,10 @@
sqInt count = [touches count],arrayIndex=0,squeakMSTimeNow = ioMSecs(),action;
UITouch *touch;
- sqInt previousLocationInViewY,previousLocationInViewX,locationInViewX,locationInViewY,squeakMSTime, view, window, tapCount, phase,timeStamp,storageArea,containerArray;
+ sqInt previousLocationInViewY,previousLocationInViewX,locationInViewX,locationInViewY,squeakMSTime, view, window, tapCount, phase,timeStamp,storageArea,containerArray,touchId;
interpreterProxy->pushRemappableOop(interpreterProxy->instantiateClassindexableSize(interpreterProxy->classArray(), count));
for (touch in touches) {
- interpreterProxy->pushRemappableOop(interpreterProxy->instantiateClassindexableSize(interpreterProxy->classArray(), 10));
+ interpreterProxy->pushRemappableOop(interpreterProxy->instantiateClassindexableSize(interpreterProxy->classArray(), 11));
interpreterProxy->pushRemappableOop(interpreterProxy->integerObjectOf(squeakMSTimeNow));
interpreterProxy->pushRemappableOop(interpreterProxy->floatObjectOf([touch timestamp]));
interpreterProxy->pushRemappableOop(interpreterProxy->integerObjectOf((signed)[touch phase]));
@@ -127,6 +127,8 @@
interpreterProxy->pushRemappableOop(interpreterProxy->floatObjectOf([touch locationInView:[gDelegateApp mainView]].y));
interpreterProxy->pushRemappableOop(interpreterProxy->floatObjectOf([touch previousLocationInView:[gDelegateApp mainView]].x));
interpreterProxy->pushRemappableOop(interpreterProxy->floatObjectOf([touch previousLocationInView:[gDelegateApp mainView]].y));
+ interpreterProxy->pushRemappableOop(interpreterProxy->positive64BitIntegerFor((sqLong)touch));
+ touchId = interpreterProxy->popRemappableOop();
previousLocationInViewY = interpreterProxy->popRemappableOop();
previousLocationInViewX = interpreterProxy->popRemappableOop();
locationInViewY = interpreterProxy->popRemappableOop();
@@ -149,6 +151,7 @@
interpreterProxy->storePointerofObjectwithValue(7, storageArea, locationInViewY);
interpreterProxy->storePointerofObjectwithValue(8, storageArea, previousLocationInViewX);
interpreterProxy->storePointerofObjectwithValue(9, storageArea, previousLocationInViewY);
+ interpreterProxy->storePointerofObjectwithValue(10, storageArea, touchId);
interpreterProxy->storePointerofObjectwithValue(arrayIndex++, containerArray, storageArea);
interpreterProxy->pushRemappableOop(containerArray);
}
Modified: trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+imageReadWrite.m
===================================================================
--- trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+imageReadWrite.m 2010-09-11 18:59:33 UTC (rev 2296)
+++ trunk/platforms/iOS/vm/iPhone/Classes/sqSqueakIPhoneApplication+imageReadWrite.m 2010-09-11 22:22:46 UTC (rev 2297)
@@ -41,15 +41,29 @@
#import "sqMacV2Memory.h"
#import "sqSqueakIPhoneInfoPlistInterface.h"
+#define QUOTEME_(x) #x
+#define QUOTEME(x) QUOTEME_(x)
+
+#ifndef ISQUEAK_IMAGE
+#error ISQUEAK_IMAGE is undefined (add ISQUEAK_IMAGE="iPhone" to your preprocessor macros)
+#else
+#define QUOTEDIMAGE QUOTEME(ISQUEAK_IMAGE)
+#endif
+
+#ifndef ISQUEAK_SOURCES
+#error ISQUEAK_SOURCES is undefined (add ISQUEAK_SOURCES="PharoV10" to your preprocessor macros)
+#else
+#define QUOTEDSOURCES QUOTEME(ISQUEAK_SOURCES)
+#endif
+
@implementation sqSqueakIPhoneApplication (imageReadWrite)
- (void) findImageViaBundleOrPreferences {
NSAutoreleasePool * pool = [NSAutoreleasePool new];
NSFileManager *dfm = [NSFileManager defaultManager];
NSString* documentsPath = [dfm currentDirectoryPath]; //This should point to the Documents folder via a previous setup
- NSString* documentsImagePath = [documentsPath stringByAppendingPathComponent: @"iPhone.image"];
-// NSString* documentsSourcesPath = [documentsPath stringByAppendingPathComponent: @"SqueakV39.sources"];
- NSString* documentsSourcesPath = [documentsPath stringByAppendingPathComponent: @"PharoV10.sources"];
+ NSString* documentsImagePath = [documentsPath stringByAppendingPathComponent: [@QUOTEDIMAGE stringByAppendingString: @".image"]];
+ NSString* documentsSourcesPath = [documentsPath stringByAppendingPathComponent: [@QUOTEDSOURCES stringByAppendingString: @".sources"]];
BOOL fileExists = [dfm fileExistsAtPath: documentsImagePath], sourcesFileIsReadable,sourcesFileExists,copyOk,removeOK;
NSError* error;
@@ -79,8 +93,7 @@
}
if (!sourcesFileExists) {
-// NSString* bundleSourcesPath = [[NSBundle mainBundle] pathForResource:@"SqueakV39" ofType:@"sources"];
- NSString* bundleSourcesPath = [[NSBundle mainBundle] pathForResource:@"PharoV10" ofType:@"sources"];
+ NSString* bundleSourcesPath = [[NSBundle mainBundle] pathForResource:@QUOTEDSOURCES ofType:@"sources"];
if (bundleSourcesPath)
copyOk = [dfm createSymbolicLinkAtPath: documentsSourcesPath withDestinationPath: bundleSourcesPath error: &error];
}
@@ -90,12 +103,12 @@
return;
} else {
- NSString* bundleImagePath = [[NSBundle mainBundle] pathForResource:@"iPhone" ofType:@"image"];
+ NSString* bundleImagePath = [[NSBundle mainBundle] pathForResource:@QUOTEDIMAGE ofType:@"image"];
BOOL writeable = [(sqSqueakIPhoneInfoPlistInterface*)[self infoPlistInterfaceLogic] imageIsWriteable];
if (writeable) {
- NSString* documentsChangesPath = [documentsPath stringByAppendingPathComponent: @"iPhone.changes"];
- NSString* bundleChangesPath = [[NSBundle mainBundle] pathForResource:@"iPhone" ofType:@"changes"];
+ NSString* documentsChangesPath = [documentsPath stringByAppendingPathComponent: [@QUOTEDIMAGE stringByAppendingString: @".changes"]];
+ NSString* bundleChangesPath = [[NSBundle mainBundle] pathForResource:@QUOTEDIMAGE ofType:@"changes"];
copyOk = [dfm copyItemAtPath: bundleImagePath toPath: documentsImagePath error: &error];
if (!copyOk) {
@@ -111,3 +124,9 @@
[pool drain];
}
@end
+
+#undef QUOTEDIMAGE
+#undef QUOTEDSOURCES
+#undef QUOTEME
+#undef QUOTEME_
+
More information about the Vm-dev
mailing list