mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-03 11:42:28 +00:00
Merge pull request #1841 from hasenj/hack-objc-window-init
HACK work around for creating a cocoa window
This commit is contained in:
7
vendor/darwin/Foundation/NSTypes.odin
vendored
7
vendor/darwin/Foundation/NSTypes.odin
vendored
@@ -36,7 +36,12 @@ NotFound :: IntegerMax
|
||||
|
||||
Float :: distinct (f32 when size_of(uint) == 4 else f64)
|
||||
|
||||
Point :: struct {
|
||||
x: Float,
|
||||
y: Float,
|
||||
}
|
||||
|
||||
Size :: struct {
|
||||
width: Float,
|
||||
height: Float,
|
||||
}
|
||||
}
|
||||
|
||||
21
vendor/darwin/Foundation/NSWindow.odin
vendored
21
vendor/darwin/Foundation/NSWindow.odin
vendored
@@ -3,8 +3,8 @@ package objc_Foundation
|
||||
import NS "vendor:darwin/Foundation"
|
||||
|
||||
Rect :: struct {
|
||||
x, y: f64,
|
||||
width, height: f64,
|
||||
using origin: Point,
|
||||
using size: Size,
|
||||
}
|
||||
|
||||
WindowStyleFlag :: enum NS.UInteger {
|
||||
@@ -102,8 +102,19 @@ Window_alloc :: proc() -> ^Window {
|
||||
}
|
||||
|
||||
@(objc_type=Window, objc_name="initWithContentRect")
|
||||
Window_initWithContentRect :: proc(self: ^Window, contentRect: Rect, styleMask: WindowStyleMask, backing: BackingStoreType, doDefer: bool) -> ^Window {
|
||||
return msgSend(^Window, self, "initWithContentRect:styleMask:backing:defer:", contentRect, styleMask, backing, doDefer)
|
||||
Window_initWithContentRect :: proc (self: ^Window, contentRect: Rect, styleMask: WindowStyleMask, backing: BackingStoreType, doDefer: bool) -> ^Window {
|
||||
self := self
|
||||
// HACK: due to a compiler bug, the generated calling code does not
|
||||
// currently work for this message. Has to do with passing a struct along
|
||||
// with other parameters, so we don't send the rect here.
|
||||
// Omiting the rect argument here actually works, because of how the C
|
||||
// calling conventions are defined.
|
||||
self = msgSend(^Window, self, "initWithContentRect:styleMask:backing:defer:", styleMask, backing, doDefer)
|
||||
|
||||
// apply the contentRect now, since we did not pass it to the init call
|
||||
msgSend(nil, self, "setContentSize:", contentRect.size)
|
||||
msgSend(nil, self, "setFrameOrigin:", contentRect.origin)
|
||||
return self
|
||||
}
|
||||
@(objc_type=Window, objc_name="contentView")
|
||||
Window_contentView :: proc(self: ^Window) -> ^View {
|
||||
@@ -148,4 +159,4 @@ Window_setTitle :: proc(self: ^Window, title: ^NS.String) {
|
||||
@(objc_type=Window, objc_name="close")
|
||||
Window_close :: proc(self: ^Window) {
|
||||
msgSend(nil, self, "close")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user