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[])
 {