Mercurial > osx-quasimode
changeset 9:d8d966549380
Separated out JS interface implementation from core quasimode implementation
author | Atul Varma <avarma@mozilla.com> |
---|---|
date | Sun, 11 Apr 2010 19:53:38 -0700 |
parents | 353aee1ddf91 |
children | d3881a6d41ca |
files | JavaScriptQuasimode.h JavaScriptQuasimode.m Makefile Quasimode.h Quasimode.m |
diffstat | 5 files changed, 81 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JavaScriptQuasimode.h Sun Apr 11 19:53:38 2010 -0700 @@ -0,0 +1,3 @@ +#import "Quasimode.h" + +void JSQModeInit(QMode *quasimode);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/JavaScriptQuasimode.m Sun Apr 11 19:53:38 2010 -0700 @@ -0,0 +1,55 @@ +#import <WebKit/WebFrame.h> +#import <JavaScriptCore/JavaScriptCore.h> + +#import "Quasimode.h" +#import "JavaScriptQuasimode.h" + +static JSValueRef setSize(JSContextRef ctx, + JSObjectRef function, + JSObjectRef thisObject, + size_t argumentCount, + const JSValueRef arguments[], + JSValueRef* exception) +{ + if (argumentCount >= 2 && + JSValueIsNumber(ctx, arguments[0]) && + JSValueIsNumber(ctx, arguments[1])) { + QMode *quasimode = (QMode *) JSObjectGetPrivate(thisObject); + int x = (int) JSValueToNumber(ctx, arguments[0], NULL); + int y = (int) JSValueToNumber(ctx, arguments[1], NULL); + [quasimode setSizeWithX: x Y: y]; + } + return JSValueMakeUndefined(ctx); +} + +static void initialize(JSContextRef ctx, JSObjectRef object) +{ + JSStringRef setSizeStr = JSStringCreateWithUTF8CString("setSize"); + JSObjectRef func = JSObjectMakeFunctionWithCallback(ctx, setSizeStr, + setSize); + + JSObjectSetProperty(ctx, object, setSizeStr, func, + kJSPropertyAttributeReadOnly | + kJSPropertyAttributeDontDelete, + NULL); +} + +void JSQModeInit(QMode *quasimode) +{ + WebFrame *frame = [[quasimode view] mainFrame]; + JSGlobalContextRef ctx = [frame globalContext]; + JSClassDefinition classDef = kJSClassDefinitionEmpty; + classDef.initialize = initialize; + classDef.className = "Quasimode"; + + JSClassRef class = JSClassCreate(&classDef); + JSObjectRef jsQuasimode = JSObjectMake(ctx, class, quasimode); + JSObjectRef global = JSContextGetGlobalObject(ctx); + + JSObjectSetProperty(ctx, global, + JSStringCreateWithUTF8CString("quasimode"), + jsQuasimode, + kJSPropertyAttributeReadOnly | + kJSPropertyAttributeDontDelete, + NULL); +}
--- a/Makefile Sun Apr 11 19:20:52 2010 -0700 +++ b/Makefile Sun Apr 11 19:53:38 2010 -0700 @@ -1,3 +1,4 @@ all: - clang Quasimode.m -oQuasimode -framework AppKit -framework WebKit \ - -framework JavaScriptCore + clang Quasimode.m JavaScriptQuasimode.m -oQuasimode \ + -framework AppKit -framework WebKit \ + -framework JavaScriptCore
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Quasimode.h Sun Apr 11 19:53:38 2010 -0700 @@ -0,0 +1,11 @@ +#import <AppKit/NSWindow.h> +#import <WebKit/WebView.h> + +@interface QMode : NSObject { + NSWindow *window; + WebView *view; +} +- (id)init; +- (void)setSizeWithX:(int)X Y:(int)Y; +- (WebView *)view; +@end
--- a/Quasimode.m Sun Apr 11 19:20:52 2010 -0700 +++ b/Quasimode.m Sun Apr 11 19:53:38 2010 -0700 @@ -2,54 +2,15 @@ #import <Foundation/NSURL.h> #import <Foundation/NSURLRequest.h> #import <AppKit/NSApplication.h> -#import <AppKit/NSWindow.h> #import <AppKit/NSColor.h> -#import <WebKit/WebView.h> #import <WebKit/WebFrame.h> #import <WebKit/WebFrameView.h> #import <WebKit/DOMEvents.h> -#import <JavaScriptCore/JavaScriptCore.h> -void QModeClassInitialize(JSContextRef ctx, JSObjectRef object); - -JSValueRef setSize(JSContextRef ctx, - JSObjectRef function, - JSObjectRef thisObject, - size_t argumentCount, - const JSValueRef arguments[], - JSValueRef* exception); - -@interface QMode : NSObject { - NSWindow *window; - WebView *view; -} -- (id)init; -- (void)setSizeWithX:(int)X Y:(int)Y; -@end +#import "Quasimode.h" +#import "JavaScriptQuasimode.h" @implementation QMode -- (void)setSizeWithX:(int)X Y:(int)Y { - printf("setSize(%d, %d)\n", X, Y); - } - -- (void)defineJSGlobals { - JSGlobalContextRef ctx = [[view mainFrame] globalContext]; - - JSClassDefinition classDef = kJSClassDefinitionEmpty; - classDef.initialize = QModeClassInitialize; - classDef.className = "QMode"; - - JSClassRef class = JSClassCreate(&classDef); - JSObjectRef myApp = JSObjectMake(ctx, class, self); - JSObjectRef global = JSContextGetGlobalObject(ctx); - JSStringRef myAppStr = JSStringCreateWithUTF8CString("myApp"); - - JSObjectSetProperty(ctx, global, myAppStr, myApp, - kJSPropertyAttributeReadOnly | - kJSPropertyAttributeDontDelete, - NULL); - } - - (id)init { if (self = [super init]) { NSRect rect = {{20, 20}, @@ -75,7 +36,7 @@ [[[view mainFrame] frameView] setAllowsScrolling: NO]; [[view mainFrame] loadRequest: req]; - [self defineJSGlobals]; + JSQModeInit(self); [window setOpaque: NO]; [window setBackgroundColor: [NSColor colorWithCalibratedRed: 0.0 @@ -88,36 +49,15 @@ } return self; } -@end -void QModeClassInitialize(JSContextRef ctx, JSObjectRef object) -{ - JSStringRef setSizeStr = JSStringCreateWithUTF8CString("setSize"); - JSObjectRef func = JSObjectMakeFunctionWithCallback(ctx, setSizeStr, - setSize); - - JSObjectSetProperty(ctx, object, setSizeStr, func, - kJSPropertyAttributeReadOnly | - kJSPropertyAttributeDontDelete, - NULL); -} +- (void)setSizeWithX:(int)X Y:(int)Y { + printf("setSize(%d, %d)\n", X, Y); + } -JSValueRef setSize(JSContextRef ctx, - JSObjectRef function, - JSObjectRef thisObject, - size_t argumentCount, - const JSValueRef arguments[], - JSValueRef* exception) -{ - if (argumentCount >= 2 && - JSValueIsNumber(ctx, arguments[0]) && - JSValueIsNumber(ctx, arguments[1])) { - QMode *app = (QMode *) JSObjectGetPrivate(thisObject); - [app setSizeWithX: (int) JSValueToNumber(ctx, arguments[0], NULL) - Y: (int) JSValueToNumber(ctx, arguments[1], NULL)]; - } - return JSValueMakeUndefined(ctx); +- (WebView *)view { + return view; } +@end int main(int argc, const char *argv[]) {