view JavaScriptQuasimode.m @ 12:4bb0e66b4d7f

implemented quasimode.setSize()
author Atul Varma <avarma@mozilla.com>
date Sun, 11 Apr 2010 21:18:13 -0700
parents f98ecd33c5e0
children bab79fdfa745
line wrap: on
line source

#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])) {
    Quasimode *quasimode = (Quasimode *) JSObjectGetPrivate(thisObject);
    int width = (int) JSValueToNumber(ctx, arguments[0], NULL);
    int height = (int) JSValueToNumber(ctx, arguments[1], NULL);

    if (width > 0 && height > 0) {
      NSSize size = {width, height};

      [[quasimode window] setContentSize: size];
    }
  }
  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 JSQuasimodeInit(Quasimode *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);
}