Skip to content

Instantly share code, notes, and snippets.

@matths
Created August 12, 2014 19:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matths/fe075e431781dc933471 to your computer and use it in GitHub Desktop.
Save matths/fe075e431781dc933471 to your computer and use it in GitHub Desktop.
NodObjC Example of drawRect call (not working)
// dependencies
var ObjC = require('NodObjC');
// ObjC dependencies
ObjC.import('Foundation');
ObjC.import('Cocoa');
ObjC.import('AppKit');
ObjC.import('QuartzCore');
// using ARC
var pool = ObjC.NSAutoreleasePool('new');
// application
var app = ObjC.NSApplication('sharedApplication');
// show dock icon - to hide use: ObjC.NSApplicationActivationPolicyProhibited
app('setActivationPolicy', ObjC.NSApplicationActivationPolicyRegular);
// app name string
var appName = ObjC('TestApp');
var menuBar = ObjC.NSMenu('new')('autorelease');
var appMenuItem = ObjC.NSMenuItem('new')('autorelease');
menuBar('addItem', appMenuItem);
app('setMainMenu', menuBar);
var appMenu = ObjC.NSMenu('new')('autorelease');
var quitTitle = ObjC('Quit ')('stringByAppendingString', appName);
var quitMenuItem = ObjC.NSMenuItem('alloc')('initWithTitle', quitTitle, 'action', 'terminate:', 'keyEquivalent', ObjC('q'))('autorelease');
appMenu('addItem', quitMenuItem);
appMenuItem('setSubmenu', appMenu);
var styleMask = ObjC.NSTitledWindowMask | ObjC.NSClosableWindowMask; // | ObjC.NSResizableWindowMask;
var window = ObjC.NSWindow('alloc')('initWithContentRect', ObjC.NSMakeRect(0,0,400,400), 'styleMask', styleMask, 'backing', ObjC.NSBackingStoreBuffered, 'defer', false)('autorelease');
window('cascadeTopLeftFromPoint', ObjC.NSMakePoint(20,20));
window('setTitle', appName);
// set up the app delegate
var AppDelegate = ObjC.NSObject.extend('AppDelegate');
AppDelegate.addMethod('applicationDidFinishLaunching:', 'v@:@', function (self, _cmd, notif) {
console.log('got applicationDidFinishLauching');
console.log(notif);
});
AppDelegate.register();
var appDelegate = AppDelegate('alloc')('init');
app('setDelegate', appDelegate);
var RedRectView = ObjC.NSView.extend('RedRectView');
RedRectView.addMethod('drawRect:', 'v@:@', function (self, _cmd, rect) {
// console.log(self);
// ObjC.NSColor('redColor')('set');
// ObjC.NSRectFill(ObjC.NSRectMake(0,0,100,100));
// [super drawRect:rect];
// RedRectView.getSuperclass()('drawRect', self);
});
RedRectView.register();
var redRectView = RedRectView('alloc')('initWithFrame', ObjC.NSMakeRect(0,0,100,100));
window('contentView')('addSubview', redRectView);
window('makeKeyAndOrderFront', window);
app('activateIgnoringOtherApps', true);
app('run');
pool('release');
@trevorlinton
Copy link

Try this (note you'll need to use the main master branch off of github.com, as the new version isn't in NPM yet):

// dependencies
var ObjC = require('../');

// ObjC dependencies
ObjC.import('Foundation');
ObjC.import('Cocoa');
ObjC.import('AppKit');
ObjC.import('QuartzCore');

// using ARC
var pool = ObjC.NSAutoreleasePool('new');

// application
var app  = ObjC.NSApplication('sharedApplication');

// show dock icon - to hide use: ObjC.NSApplicationActivationPolicyProhibited
app('setActivationPolicy', ObjC.NSApplicationActivationPolicyRegular);

// app name string
var appName = ObjC('TestApp');

var menuBar = ObjC.NSMenu('new')('autorelease');
var appMenuItem = ObjC.NSMenuItem('new')('autorelease');
menuBar('addItem', appMenuItem);
app('setMainMenu', menuBar);

var appMenu = ObjC.NSMenu('new')('autorelease');
var quitTitle = ObjC('Quit ')('stringByAppendingString', appName);
var quitMenuItem = ObjC.NSMenuItem('alloc')('initWithTitle', quitTitle, 'action', 'terminate:', 'keyEquivalent', ObjC('q'))('autorelease');
appMenu('addItem', quitMenuItem);
appMenuItem('setSubmenu', appMenu);

var styleMask = ObjC.NSTitledWindowMask | ObjC.NSClosableWindowMask; // | ObjC.NSResizableWindowMask;
var window = ObjC.NSWindow('alloc')('initWithContentRect', ObjC.NSMakeRect(0,0,400,400), 'styleMask', styleMask, 'backing', ObjC.NSBackingStoreBuffered, 'defer', false)('autorelease');
window('cascadeTopLeftFromPoint', ObjC.NSMakePoint(20,20));
window('setTitle', appName);

// set up the app delegate
var AppDelegate = ObjC.NSObject.extend('AppDelegate');
AppDelegate.addInstanceMethod('applicationDidFinishLaunching:', 'v@:@', function (self, _cmd, notif) {
    console.log('got applicationDidFinishLauching');
    console.log(notif);
});
AppDelegate.register();

var appDelegate = AppDelegate('alloc')('init');
app('setDelegate', appDelegate);

var RedRectView = ObjC.NSView.extend('RedRectView');
RedRectView.addInstanceMethod('drawRect:', 'v@:@', function (self, _cmd, rect) {
    //console.log(self);
    ObjC.NSColor('redColor')('set');
    ObjC.NSRectFill(ObjC.NSMakeRect(0,0,100,100));

    //self.super('drawRect',rect);
    //RedRectView.getSuperclass()('drawRect', self);
});
RedRectView.register();

var redRectView = RedRectView('alloc')('initWithFrame', ObjC.NSMakeRect(0,0,100,100));
window('contentView')('addSubview', redRectView);
window('makeKeyAndOrderFront', window);

app('activateIgnoringOtherApps', true);
app('run');

pool('release');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment