[Vm-dev] [commit][3718] JMM add logic to support headless as a
null windowview object to reduce drawing overhead ,
fix headless VM support
Fabio Niephaus
lists at fniephaus.com
Tue May 17 07:53:34 UTC 2016
Hi John,
Do you have any numbers on how big this overhead is/was? I'm curious :)
Best,
Fabio
--
On Sun, May 15, 2016 at 12:43 AM <commits at squeakvm.org> wrote:
>
> Revision: 3718
> Author: johnmci
> Date: 2016-05-14 15:43:36 -0700 (Sat, 14 May 2016)
> Log Message:
> -----------
> JMM add logic to support headless as a null windowview object to reduce
> drawing overhead, fix headless VM support
>
> Modified Paths:
> --------------
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h
> branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
> branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
>
> Added Paths:
> -----------
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
> branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
>
> Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -40,13 +40,13 @@
> #import "sqSqueakAppDelegate.h"
> #import "sqSqueakEventsAPI.h"
> #import "sqSqueakMainApplication+events.h"
> -#import "sqSqueakScreenAndWindow.h"
> +#import "sqSqueakNullScreenAndWindow.h"
> #import "sqaio.h"
>
> extern sqSqueakAppDelegate *gDelegateApp;
> extern struct VirtualMachine* interpreterProxy;
> extern BOOL gQuitNowRightNow;
> -extern sqSqueakScreenAndWindow *getMainWindowDelegate();
> +extern sqSqueakNullScreenAndWindow *getMainWindowDelegate();
>
> void nativeIoProcessEvents(void) {
>
>
> Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -51,7 +51,7 @@
> #endif
>
>
> -sqSqueakScreenAndWindow *getMainWindowDelegate() {
> +sqSqueakNullScreenAndWindow *getMainWindowDelegate() {
> #ifdef BUILD_FOR_OSX
> return ((__bridge NSWindow *) windowHandleFromIndex(1)).delegate;
> #else
>
> Modified:
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> ===================================================================
> ---
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -38,38 +38,12 @@
> //
>
> #import <Foundation/Foundation.h>
> -#import "sq.h"
> +#import "sqSqueakNullScreenAndWindow.h"
>
> - at interface sqSqueakScreenAndWindow : NSObject {
> - sqInt windowIndex;
> + at interface sqSqueakScreenAndWindow : sqSqueakNullScreenAndWindow {
> NSTimeInterval squeakUIFlushPrimaryDeferNMilliseconds;
> NSTimeInterval lastFlushTime;
> NSTimer *blip;
> - BOOL forceUpdateFlush;
> BOOL displayIsDirty;
> }
> -
> -- (sqInt) ioScreenSize;
> -- (sqInt) ioScreenDepth;
> -- (sqInt) ioHasDisplayDepth: (sqInt) depth;
> -- (void) ioForceDisplayUpdate;
> -- (void) ioSetFullScreen: (sqInt) fullScreen;
> -- (int) ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
> - width: (int) width
> - height: (int) height
> - depth: (int) depth
> - affectedL: (int) affectedL
> - affectedR: (int) affectedR
> - affectedT: (int) affectedT
> - affectedB: (int) affectedB
> - windowIndex: (int) windowIndex;
> -- (id) getMainView;
> -- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer;
> - at property (nonatomic,assign) sqInt windowIndex;
> - at property (nonatomic,strong) NSTimer *blip;
> - at property (nonatomic,assign) NSTimeInterval
> squeakUIFlushPrimaryDeferNMilliseconds;
> - at property (nonatomic,assign) NSTimeInterval lastFlushTime;
> - at property (nonatomic,assign) BOOL forceUpdateFlush;
> - at property (nonatomic,assign) BOOL displayIsDirty;
> -
> @end
>
> Modified:
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> ===================================================================
> ---
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++
> branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -61,9 +61,15 @@
> ) {
> }
>
> + at interface sqSqueakScreenAndWindow()
> + at property (nonatomic,strong) NSTimer *blip;
> + at property (nonatomic,assign) NSTimeInterval
> squeakUIFlushPrimaryDeferNMilliseconds;
> + at property (nonatomic,assign) NSTimeInterval lastFlushTime;
> + at property (nonatomic,assign) BOOL displayIsDirty;
> + at end
> +
> @implementation sqSqueakScreenAndWindow
> - at synthesize windowIndex;
> - at synthesize
> blip,squeakUIFlushPrimaryDeferNMilliseconds,forceUpdateFlush,lastFlushTime,displayIsDirty;
> + at synthesize
> blip,squeakUIFlushPrimaryDeferNMilliseconds,lastFlushTime,displayIsDirty;
>
> - (instancetype)init {
> self = [super init];
> @@ -77,13 +83,6 @@
> return self;
> }
>
> -- (id) getMainView {
> - return NULL;
> -}
> -
> -- (void) ioSetFullScreen: (sqInt) fullScreen {
> -}
> -
> - (sqInt) ioScreenSize {
> sqInt w, h;
>
> @@ -100,25 +99,12 @@
>
> }
>
> -- (sqInt) ioScreenDepth {
> - return 32;
> -}
> -
> -- (sqInt) ioHasDisplayDepth: (sqInt) depth {
> - if (depth == 2 || depth == 4 || depth == 8 || depth == 16 ||
> depth == 32 ||
> - depth == -2 || depth == -4 || depth == -8 || depth == -16 ||
> depth == -32) {
> - return true;
> - } else {
> - return false;
> - }
> -}
> -
> -- (void) ioForceDisplayUpdateActual {
> - lastFlushTime = [NSDate timeIntervalSinceReferenceDate];
> - self.displayIsDirty = NO;
> - self.forceUpdateFlush = NO;
> +- (void) ioForceDisplayUpdate {
> + lastFlushTime = [NSDate timeIntervalSinceReferenceDate];
> + self.displayIsDirty = NO;
> + self.forceUpdateFlush = NO;
>
> - [[self getMainView] preDrawThelayers];
> + [[self getMainView] preDrawThelayers];
>
> //SQK-24
> //javier_diaz_r at mac.com iOS VM problems with dragging a morph and
> PasteUpMorph>>flashRects:color:
> @@ -131,10 +117,6 @@
> }
> }
>
> -- (void) ioForceDisplayUpdate {
> - [self ioForceDisplayUpdateActual];
> -}
> -
> - (int) ioShowDisplayOnWindowActual: (unsigned char*) dispBitsIndex
> width: (int) width
> height: (int) height
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h 2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h 2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -42,7 +42,7 @@
> #import "sqSqueakOSXOpenGLView.h"
>
> @class sqSqueakMainApplication;
> - at class sqSqueakOSXScreenAndWindow;
> + at class sqSqueakNullScreenAndWindow;
>
> @interface SqueakOSXAppDelegate : sqSqueakAppDelegate
> <NSApplicationDelegate> {
> NSWindow *__weak window;
> @@ -56,6 +56,6 @@
> @property (nonatomic,weak) IBOutlet sqSqueakOSXOpenGLView *mainView;
> @property (nonatomic,strong) NSString *possibleImageNameAtLaunchTime;
> @property (nonatomic,assign) BOOL checkForFileNameOnFirstParm;
> - at property (nonatomic, strong) sqSqueakOSXScreenAndWindow *windowHandler;
> + at property (nonatomic, strong) sqSqueakNullScreenAndWindow *windowHandler;
>
> @end
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m 2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m 2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -81,13 +81,6 @@
> @autoreleasepool {
> gDelegateApp = self;
> self.squeakApplication = [self makeApplicationInstance];
> - self.windowHandler =
> AUTORELEASEOBJ([[sqSqueakOSXScreenAndWindow alloc] init]);
> - windowHandler.mainViewOnWindow = self.mainView;
> - self.mainView.windowLogic = windowHandler;
> - windowHandler.windowIndex = 1;
> - [windowHandler.mainViewOnWindow initializeVariables];
> - self.window.delegate = windowHandler;
> - self.window.contentResizeIncrements =
> NSMakeSize(8.0f,8.0f);
> [self.squeakApplication setupEventQueue];
> [self singleThreadStart];
> // [self workerThreadStart];
> @@ -105,7 +98,29 @@
> return NSTerminateCancel;
> }
>
> +- (void) initializeTheWindowHandler {
> + [windowHandler mainViewOnWindow: self.mainView];
> + self.mainView.windowLogic = windowHandler;
> + windowHandler.windowIndex = 1;
> + [windowHandler.getMainViewOnWindow initializeVariables];
> + self.window.delegate = windowHandler;
> + self.window.contentView = self.mainView;
> +}
> +
> -(void) setupWindow {
> + extern BOOL gSqueakHeadless;
> + if (gSqueakHeadless) {
> + self.windowHandler = AUTORELEASEOBJ([[sqSqueakNullScreenAndWindow
> alloc] init]);
> + [self initializeTheWindowHandler];
> + return;
> + } else {
> + self.windowHandler = AUTORELEASEOBJ([[sqSqueakOSXScreenAndWindow
> alloc] init]);
> + }
> +
> +
> + [self initializeTheWindowHandler];
> + self.window.contentResizeIncrements = NSMakeSize(8.0f,8.0f);
> +
> //I setup the window with all the right properties. Some of them are
> depending on image information.
>
> sqInt width,height;
> @@ -129,59 +144,17 @@
> [self.window setRepresentedURL: [[self squeakApplication]
> imageNameURL]];
> [self.window setInitialFirstResponder: [self mainView]];
> [self.window setShowsResizeIndicator: NO];
> -
> - extern sqInt getFullScreenFlag(void);
> -#if (SQ_VI_BYTES_PER_WORD == 4)
> - NSPanel *panel;
> - if (sizeof(void*) == 8) {
> - panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa
> Squeak 64/32 bits 5.7b3 (21)",
> -
> @"Only use this VM for testing, it lacks mac menu
> integration.",
> -
> @"Dismiss",
> -
> nil,
> -
> nil);
> - } else {
> - return;
> - }
> -#else
> - NSPanel *panel;
> - if (sizeof(long) == 8) {
> - panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa
> Squeak 64/64 bits 5.7b3 (21)",
> -
> @"Only use this VM for testing, it lacks mac menu integration.",
> -
> @"Dismiss",
> -
> nil,
> -
> nil);
> - } else {
> - panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa
> Squeak 32/64 bits 5.7b3 (21)",
> - @"Only use this
> VM for testing, it lacks mac menu integration.",
> - @"Dismiss",
> - nil,
> - nil);
> - }
> -#endif
> -
> -/* NSRect frame= [panel frame];
> - frame.size.width *= 1.5f;
> - [panel setFrame: frame display: NO];
> - [NSApp runModalForWindow: panel];
> - [panel close];
> -*/
> }
>
> -(void) setupMainView {
> - //Creates and sets the contentView for our window.
> + extern BOOL gSqueakHeadless;
> + if (gSqueakHeadless) {
> + return;
> + }
> + //Creates and sets the contentView for our window.
> //It can right now, I have two implementations to pick (CoreGraphics
> or OpenGL), muy more/different could be added
> //in the future.
>
> - NSView *view = AUTORELEASEOBJ([[ContentViewClass alloc]
> initWithFrame:[[self window] frame]]);
> - self.mainView = (id) view;
> - [[self window] setContentView: view];
> -
> - [windowHandler setMainViewOnWindow: (sqSqueakOSXOpenGLView *) view];
> - [(sqSqueakOSXOpenGLView *) view setWindowLogic: windowHandler];
> - [windowHandler setWindowIndex: 1];
> - [[windowHandler mainViewOnWindow] initializeVariables];
> - [[self window] setDelegate:windowHandler];
> - [[self window] setContentResizeIncrements:NSMakeSize(8.0f,8.0f)];
> }
>
> - (id) createPossibleWindow {
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m 2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m 2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -50,7 +50,7 @@
> sqSqueakOSXScreenAndWindow *squeakScreenWindow =
> (sqSqueakOSXScreenAndWindow *) who.delegate;
> sqSqueakOSXOpenGLView *view;
> if (squeakScreenWindow)
> - view = squeakScreenWindow.mainViewOnWindow;
> + view = [squeakScreenWindow getMainViewOnWindow];
> else
> view = [who contentView];
> [view fakeKeyDownUp: anEvent];
>
> Added: branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
> (rev 0)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -0,0 +1,69 @@
> +//
> +// sqSqueakNullScreenAndWindow.h
> +// SqueakPureObjc
> +//
> +// Created by John M McIntosh on 2016-05-14.
> +/*
> + Copyright (c) 2016 Corporate Smalltalk Consulting Ltd. All rights
> reserved.
> + MIT License
> + Permission is hereby granted, free of charge, to any person
> + obtaining a copy of this software and associated documentation
> + files (the "Software"), to deal in the Software without
> + restriction, including without limitation the rights to use,
> + copy, modify, merge, publish, distribute, sublicense, and/or sell
> + copies of the Software, and to permit persons to whom the
> + Software is furnished to do so, subject to the following
> + conditions:
> +
> + The above copyright notice and this permission notice shall be
> + included in all copies or substantial portions of the Software.
> +
> + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + OTHER DEALINGS IN THE SOFTWARE.
> +
> + The end-user documentation included with the redistribution, if any,
> must include the following acknowledgment:
> + "This product includes software developed by Corporate Smalltalk
> Consulting Ltd (http://www.smalltalkconsulting.com)
> + and its contributors", in the same place and form as other third-party
> acknowledgments.
> + Alternately, this acknowledgment may appear in the software itself, in
> the same form and location as other
> + such third-party acknowledgments.
> +
> + */
> +//
> +//
> +
> +#import <Foundation/Foundation.h>
> +#import "sq.h"
> +
> + at interface sqSqueakNullScreenAndWindow : NSObject {
> + sqInt windowIndex;
> + BOOL forceUpdateFlush;
> +}
> +
> +- (sqInt) ioScreenSize;
> +- (sqInt) ioScreenDepth;
> +- (sqInt) ioHasDisplayDepth: (sqInt) depth;
> +- (void) ioForceDisplayUpdate;
> +- (void) ioSetFullScreen: (sqInt) fullScreen;
> +- (int) ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
> + width: (int) width
> + height: (int) height
> + depth: (int) depth
> + affectedL: (int) affectedL
> + affectedR: (int) affectedR
> + affectedT: (int) affectedT
> + affectedB: (int) affectedB
> + windowIndex: (int) windowIndex;
> +- (id) getMainView;
> +- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer;
> +- (id) getMainViewOnWindow;
> +- (void) mainViewOnWindow: (id) aView;
> +
> + at property (nonatomic,assign) sqInt windowIndex;
> + at property (nonatomic,assign) BOOL forceUpdateFlush;
> + at end
>
> Added: branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
> (rev 0)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -0,0 +1,103 @@
> +//
> +// sqSqueakNullScreenAndWindow.m
> +// SqueakPureObjc
> +//
> +// Created by John M McIntosh on 2016-05-14.
> +/*
> + Copyright (c) 2016 Corporate Smalltalk Consulting Ltd. All rights
> reserved.
> + MIT License
> + Permission is hereby granted, free of charge, to any person
> + obtaining a copy of this software and associated documentation
> + files (the "Software"), to deal in the Software without
> + restriction, including without limitation the rights to use,
> + copy, modify, merge, publish, distribute, sublicense, and/or sell
> + copies of the Software, and to permit persons to whom the
> + Software is furnished to do so, subject to the following
> + conditions:
> +
> + The above copyright notice and this permission notice shall be
> + included in all copies or substantial portions of the Software.
> +
> + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
> + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
> + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + OTHER DEALINGS IN THE SOFTWARE.
> +
> + The end-user documentation included with the redistribution, if any,
> must include the following acknowledgment:
> + "This product includes software developed by Corporate Smalltalk
> Consulting Ltd (http://www.smalltalkconsulting.com)
> + and its contributors", in the same place and form as other third-party
> acknowledgments.
> + Alternately, this acknowledgment may appear in the software itself, in
> the same form and location as other
> + such third-party acknowledgments.
> +
> + */
> +
> +//
> +//
> +
> +#import "sqSqueakNullScreenAndWindow.h"
> +
> + at implementation sqSqueakNullScreenAndWindow
> + at synthesize windowIndex,forceUpdateFlush;
> +
> +- (instancetype)init {
> + self = [super init];
> + if (self) {
> + }
> + return self;
> +}
> +
> +- (id) getMainViewOnWindow {
> + return NULL;
> +}
> +
> +- (void) mainViewOnWindow: (id) aView {
> +}
> +
> +- (id) getMainView {
> + return NULL;
> +}
> +
> +- (void) ioSetFullScreen: (sqInt) fullScreen {
> +}
> +
> +- (sqInt) ioScreenSize {
> + return (10 << 16) | (10 & 0xFFFF); /* w is high 16 bits; h is low 16
> bits */
> +}
> +
> +- (sqInt) ioScreenDepth {
> + return 32;
> +}
> +
> +- (sqInt) ioHasDisplayDepth: (sqInt) depth {
> + if (depth == 2 || depth == 4 || depth == 8 || depth == 16 || depth
> == 32 ||
> + depth == -2 || depth == -4 || depth == -8 || depth == -16 ||
> depth == -32) {
> + return true;
> + } else {
> + return false;
> + }
> +}
> +
> +- (void) ioForceDisplayUpdate {
> +}
> +
> +- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer {
> +
> +}
> +
> +- (int) ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
> + width: (int) width
> + height: (int) height
> + depth: (int) depth
> + affectedL: (int) affectedL
> + affectedR: (int) affectedR
> + affectedT: (int) affectedT
> + affectedB: (int) affectedB
> + windowIndex: (int) passedWindowIndex {
> + return 0;
> +}
> +
> + at end
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m 2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m 2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -104,7 +104,7 @@
> }
>
> - (void) doHeadlessSetup {
> - [super doHeadlessSetup];
> + //No super call here as we've already set headless from command
> line or info.plist
> extern BOOL gSqueakHeadless;
> // Notice that setActivationPolicy: is available in OSX 10.6 and later
> if ([NSApp respondsToSelector:@selector(setActivationPolicy:)]) {
> @@ -147,7 +147,6 @@
>
> - (int) parseArgument: (NSString *) argData peek: (char *) peek
> {
> -
> if ([argData isEqualToString: @"--"]) {
> return 1;
> }
> @@ -344,41 +343,54 @@
>
>
> - (void) parseArgs: (NSArray *) args {
> - commandLineArguments = [args copyWithZone:null];
> - argsArguments = [[NSMutableArray alloc] initWithCapacity: [args
> count]];
> -
> - if ([args count] < 2)
> - return;
> - //NSLog(@"%@",args);
> - int i;
> - BOOL optionsCompleted = NO;
> - for (i = 1; i < [args count]; i++) {
> - NSString *argData = args[i];
> - char *peek = i + 1 >= [args count] ? 0 : (char
> *)[args[i+1] UTF8String];
> - //printf("argData %s peek %s\n", [argData UTF8String],
> peek ? peek : "NULL");
> - if ([argData isEqualToString: @"--"]) {
> - optionsCompleted = YES;
> - continue;
> - }
> - if (!optionsCompleted && ![[argData substringToIndex: 1]
> isEqualToString: @"-"]) {
> - optionsCompleted = YES;
> - //guessing first parameter as image name
> - if ([argData compare: @"--"] != NSOrderedSame)
> + commandLineArguments = [args copyWithZone:null];
> + argsArguments = [[NSMutableArray alloc] initWithCapacity: [args
> count]];
> +
> + if ([args count] < 2)
> + return;
> + NSMutableArray *revisedArgs = AUTORELEASEOBJ([args
> mutableCopyWithZone: NULL]);
> + [revisedArgs removeObjectAtIndex:0];
> +
> + NSUInteger i,result;
> + BOOL optionsCompleted = NO;
> + for (i=0; i<[revisedArgs count]; i++) {
> + NSString *argData = revisedArgs[i];
> +
> + NSString *peek = (i == ([revisedArgs count] - 1)) ? @"" :
> revisedArgs[i+1];
> +
> + if ([argData isEqualToString: @"-NSDocumentRevisionsDebugMode"]) {
> + //This is an Xcode debug option, skip it for us
> + i++;
> + continue;
> + }
> + if ([argData compare: @"--"] == NSOrderedSame) {
> + optionsCompleted = YES;
> + continue;
> + }
> + if (!optionsCompleted && ![[argData substringToIndex: 1]
> isEqualToString: @"-"]) {
> + optionsCompleted = YES;
> +
> + //guessing first parameter as image name
> + if ([argData compare: @"--"] != NSOrderedSame) {
> [self setImageNamePathIfItWasReadable:argData];
> - continue;
> - }
> - if (optionsCompleted)
> - [self.argsArguments addObject: argData];
> - else {
> - int result = [self parseArgument: argData peek:
> peek];
> - if (result <= 0) { /* option not recognised */
> - fprintf(stderr, "unknown option: %s\n",
> [argData UTF8String]);
> - [self usage];
> - exit(1);
> - }
> - i += result - 1;
> - }
> - }
> + } else {
> + continue;
> + }
> + }
> + if (optionsCompleted) {
> + [self.argsArguments addObject: argData];
> + } else {
> + result = [self parseArgument: argData peek: peek.UTF8String];
> + if (result == 0) /* option not recognised
> */ {
> + fprintf(stderr, "unknown option: %s\n", [argData
> UTF8String]);
> + [self usage];
> + exit(1);
> + }
> + if (result == 2)
> + i++;
> + }
> +
> + }
> }
>
> - (long long) strtobkm: (const char *) str {
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m 2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m 2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -53,7 +53,7 @@
>
> char* dropRequestFileName(sqInt dropIndex) {
> /* return name of file or NULL if error */
> - sqSqueakOSXOpenGLView *view =
> ((sqSqueakOSXScreenAndWindow*)((__bridge NSWindow
> *)windowHandleFromIndex(1)).delegate).mainViewOnWindow;
> + sqSqueakOSXOpenGLView *view =
> [((sqSqueakOSXScreenAndWindow*)((__bridge NSWindow
> *)windowHandleFromIndex(1)).delegate) getMainViewOnWindow];
> NSString *fileNameString = [view dragFileNameStringAtIndex:
> dropIndex];
> return (char *) [fileNameString UTF8String];
> }
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m 2016-05-14
> 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m 2016-05-14
> 22:43:36 UTC (rev 3718)
> @@ -175,12 +175,6 @@
> }
>
> - (void) drawThelayers {
> - extern BOOL gSqueakHeadless;
> - if (gSqueakHeadless) {
> - firstDrawCompleted = YES;
> - return;
> - }
> -
> if (syncNeeded) {
> [self drawRect: NSRectFromCGRect(clippy)];
> syncNeeded = NO;
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -43,6 +43,8 @@
> @interface sqSqueakOSXScreenAndWindow : sqSqueakScreenAndWindow
> <NSWindowDelegate>{
> sqSqueakOSXOpenGLView *mainViewOnWindow;
> }
> - at property (nonatomic,strong) sqSqueakOSXOpenGLView *mainViewOnWindow;
>
> +- (sqSqueakOSXOpenGLView *) getMainViewOnWindow;
> +- (void) mainViewOnWindow: (sqSqueakOSXOpenGLView *) aView;
> +
> @end
>
> Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
> ===================================================================
> --- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
> 2016-05-14 21:02:58 UTC (rev 3717)
> +++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
> 2016-05-14 22:43:36 UTC (rev 3718)
> @@ -45,6 +45,10 @@
>
> extern SqueakOSXAppDelegate *gDelegateApp;
>
> + at interface sqSqueakOSXScreenAndWindow()
> + @property (nonatomic,strong) sqSqueakOSXOpenGLView *mainViewOnWindow;
> + at end
> +
> @implementation sqSqueakOSXScreenAndWindow
> @synthesize mainViewOnWindow;
>
> @@ -52,6 +56,14 @@
> return self.mainViewOnWindow;
> }
>
> +- (void) mainViewOnWindow: (id) aView {
> + self.mainViewOnWindow = aView;
> +}
> +
> +- (sqSqueakOSXOpenGLView *) getMainViewOnWindow {
> + return self.mainViewOnWindow;
> +}
> +
> - (void) dealloc {
> RELEASEOBJ(mainViewOnWindow);
> SUPERDEALLOC
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160517/abf4aae5/attachment-0001.htm
More information about the Vm-dev
mailing list