-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathwindow.nim
75 lines (54 loc) · 2.32 KB
/
window.nim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import objc, strutils
{.passL: "-framework Foundation" .}
{.passL: "-framework AppKit" .}
{.passL: "-framework ApplicationServices" .}
const
NSBorderlessWindowMask = 0
NSTitledWindowMask = 1 shl 0
NSClosableWindowMask = 1 shl 1
NSMiniaturizableWindowMask = 1 shl 2
NSResizableWindowMask = 1 shl 3
var NSApp {.importc.}: ID
type
NSApplicationActivationPolicy {.size: sizeof(cint).} = enum
NSApplicationActivationPolicyRegular
NSApplicationActivationPolicyAccessory
NSApplicationActivationPolicyProhibited
CMRect = object
x, y, w, h: float64
CMPoint = object
x, y: float64
proc `@`(a: string): ID =
objc_msgSend(getClass("@ing").ID, $$"stringWithUTF8String:", a.cstring)
let NSBackingStoreBuffered = 2.cuint
proc newClass(cls: string): ID =
objc_msgSend(objc_msgSend(getClass(cls).ID, $$"alloc"), $$"init")
proc main() =
discard objc_msgSend(getClass("NSApplication").ID, $$"sharedApplication")
if NSApp.isNil:
echo "Failed to initialized NSApplication... terminating..."
return
discard objc_msgSend(NSApp, $$"setActivationPolicy:", NSApplicationActivationPolicyRegular.cint)
# Create the menubar
var menuBar = newClass("NSMenu")
var appMenuItem = newClass("NSMenuItem")
discard menuBar.objc_msgSend($$"addItem:", appMenuItem)
discard NSApp.objc_msgSend($$"setMainMenu:", menuBar)
var appMenu = newClass("NSMenu")
var quitTitle = @("Quit ")
var quitMenuItem = objc_msgSend(getClass("NSMenuItem").ID, $$"alloc")
quitMenuItem = objc_msgSend(quitMenuItem, $$"initWithTitle:action:keyEquivalent:", quitTitle, $$"terminate:", @("q"))
discard appMenu.objc_msgSend($$"addItem:", quitMenuItem)
discard appMenuItem.objc_msgSend($$"setSubmenu:", appMenu)
var mainWindow = objc_msgSend(getClass("NSWindow").ID, $$"alloc")
var rect = CMRect(x:0,y:0,w:200,h:200)
discard mainWindow.objc_msgSend($$"initWithContentRect:styleMask:backing:defer:",
rect, NSTitledWindowMask, NSBackingStoreBuffered, false)
var pos = CMPoint(x:20,y:20)
discard mainWindow.objc_msgSend($$"cascadeTopLeftFromPoint:", pos)
discard mainWindow.objc_msgSend($$"setTitle:", @("Hello"))
discard mainWindow.objc_msgSend($$"makeKeyAndOrderFront:", NSApp)
# Bring the app out
discard objc_msgSend(NSApp, $$("activateIgnoringOtherApps:"), true)
discard objc_msgSend(NSApp, $$("run"))
main()