mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-23 22:25:00 -07:00
179 lines
6.4 KiB
Odin
179 lines
6.4 KiB
Odin
package objc_Foundation
|
|
|
|
import NS "vendor:darwin/Foundation"
|
|
|
|
Rect :: struct {
|
|
using origin: Point,
|
|
using size: Size,
|
|
}
|
|
|
|
WindowStyleFlag :: enum NS.UInteger {
|
|
Titled = 0,
|
|
Closable = 1,
|
|
Miniaturizable = 2,
|
|
Resizable = 3,
|
|
TexturedBackground = 8,
|
|
UnifiedTitleAndToolbar = 12,
|
|
FullScreen = 14,
|
|
FullSizeContentView = 15,
|
|
UtilityWindow = 4,
|
|
DocModalWindow = 6,
|
|
NonactivatingPanel = 7,
|
|
HUDWindow = 13,
|
|
}
|
|
WindowStyleMask :: distinct bit_set[WindowStyleFlag; NS.UInteger]
|
|
WindowStyleMaskBorderless :: WindowStyleMask{}
|
|
WindowStyleMaskTitled :: WindowStyleMask{.Titled}
|
|
WindowStyleMaskClosable :: WindowStyleMask{.Closable}
|
|
WindowStyleMaskMiniaturizable :: WindowStyleMask{.Miniaturizable}
|
|
WindowStyleMaskResizable :: WindowStyleMask{.Resizable}
|
|
WindowStyleMaskTexturedBackground :: WindowStyleMask{.TexturedBackground}
|
|
WindowStyleMaskUnifiedTitleAndToolbar :: WindowStyleMask{.UnifiedTitleAndToolbar}
|
|
WindowStyleMaskFullScreen :: WindowStyleMask{.FullScreen}
|
|
WindowStyleMaskFullSizeContentView :: WindowStyleMask{.FullSizeContentView}
|
|
WindowStyleMaskUtilityWindow :: WindowStyleMask{.UtilityWindow}
|
|
WindowStyleMaskDocModalWindow :: WindowStyleMask{.DocModalWindow}
|
|
WindowStyleMaskNonactivatingPanel :: WindowStyleMask{.NonactivatingPanel}
|
|
WindowStyleMaskHUDWindow :: WindowStyleMask{.HUDWindow}
|
|
|
|
BackingStoreType :: enum NS.UInteger {
|
|
Retained = 0,
|
|
Nonretained = 1,
|
|
Buffered = 2,
|
|
}
|
|
|
|
@(objc_class="NSColor")
|
|
Color :: struct {using _: Object}
|
|
|
|
@(objc_class="CALayer")
|
|
Layer :: struct { using _: NS.Object }
|
|
|
|
@(objc_type=Layer, objc_name="contentsScale")
|
|
Layer_contentsScale :: proc(self: ^Layer) -> Float {
|
|
return msgSend(Float, self, "contentsScale")
|
|
}
|
|
@(objc_type=Layer, objc_name="setContentsScale")
|
|
Layer_setContentsScale :: proc(self: ^Layer, scale: Float) {
|
|
msgSend(nil, self, "setContentsScale:", scale)
|
|
}
|
|
@(objc_type=Layer, objc_name="frame")
|
|
Layer_frame :: proc(self: ^Layer) -> Rect {
|
|
return msgSend(Rect, self, "frame")
|
|
}
|
|
@(objc_type=Layer, objc_name="addSublayer")
|
|
Layer_addSublayer :: proc(self: ^Layer, layer: ^Layer) {
|
|
msgSend(nil, self, "addSublayer:", layer)
|
|
}
|
|
|
|
@(objc_class="NSResponder")
|
|
Responder :: struct {using _: Object}
|
|
|
|
@(objc_class="NSView")
|
|
View :: struct {using _: Responder}
|
|
|
|
|
|
@(objc_type=View, objc_name="initWithFrame")
|
|
View_initWithFrame :: proc(self: ^View, frame: Rect) -> ^View {
|
|
return msgSend(^View, self, "initWithFrame:", frame)
|
|
}
|
|
@(objc_type=View, objc_name="layer")
|
|
View_layer :: proc(self: ^View) -> ^Layer {
|
|
return msgSend(^Layer, self, "layer")
|
|
}
|
|
@(objc_type=View, objc_name="setLayer")
|
|
View_setLayer :: proc(self: ^View, layer: ^Layer) {
|
|
msgSend(nil, self, "setLayer:", layer)
|
|
}
|
|
@(objc_type=View, objc_name="wantsLayer")
|
|
View_wantsLayer :: proc(self: ^View) -> BOOL {
|
|
return msgSend(BOOL, self, "wantsLayer")
|
|
}
|
|
@(objc_type=View, objc_name="setWantsLayer")
|
|
View_setWantsLayer :: proc(self: ^View, wantsLayer: BOOL) {
|
|
msgSend(nil, self, "setWantsLayer:", wantsLayer)
|
|
}
|
|
|
|
@(objc_class="NSWindow")
|
|
Window :: struct {using _: Responder}
|
|
|
|
@(objc_type=Window, objc_name="alloc", objc_is_class_method=true)
|
|
Window_alloc :: proc() -> ^Window {
|
|
return msgSend(^Window, Window, "alloc")
|
|
}
|
|
|
|
@(objc_type=Window, objc_name="initWithContentRect")
|
|
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 {
|
|
return msgSend(^View, self, "contentView")
|
|
}
|
|
@(objc_type=Window, objc_name="setContentView")
|
|
Window_setContentView :: proc(self: ^Window, content_view: ^View) {
|
|
msgSend(nil, self, "setContentView:", content_view)
|
|
}
|
|
@(objc_type=Window, objc_name="frame")
|
|
Window_frame :: proc(self: ^Window) -> Rect {
|
|
return msgSend(Rect, self, "frame")
|
|
}
|
|
@(objc_type=Window, objc_name="setFrame")
|
|
Window_setFrame :: proc(self: ^Window, frame: Rect) {
|
|
msgSend(nil, self, "setFrame:", frame)
|
|
}
|
|
@(objc_type=Window, objc_name="opaque")
|
|
Window_opaque :: proc(self: ^Window) -> NS.BOOL {
|
|
return msgSend(NS.BOOL, self, "opaque")
|
|
}
|
|
@(objc_type=Window, objc_name="setOpaque")
|
|
Window_setOpaque :: proc(self: ^Window, ok: NS.BOOL) {
|
|
msgSend(nil, self, "setOpaque:", ok)
|
|
}
|
|
@(objc_type=Window, objc_name="backgroundColor")
|
|
Window_backgroundColor :: proc(self: ^Window) -> ^NS.Color {
|
|
return msgSend(^NS.Color, self, "backgroundColor")
|
|
}
|
|
@(objc_type=Window, objc_name="setBackgroundColor")
|
|
Window_setBackgroundColor :: proc(self: ^Window, color: ^NS.Color) {
|
|
msgSend(nil, self, "setBackgroundColor:", color)
|
|
}
|
|
@(objc_type=Window, objc_name="makeKeyAndOrderFront")
|
|
Window_makeKeyAndOrderFront :: proc(self: ^Window, key: ^NS.Object) {
|
|
msgSend(nil, self, "makeKeyAndOrderFront:", key)
|
|
}
|
|
@(objc_type=Window, objc_name="setTitle")
|
|
Window_setTitle :: proc(self: ^Window, title: ^NS.String) {
|
|
msgSend(nil, self, "setTitle:", title)
|
|
}
|
|
@(objc_type=Window, objc_name="setTitlebarAppearsTransparent")
|
|
Window_setTitlebarAppearsTransparent :: proc(self: ^Window, ok: NS.BOOL) {
|
|
msgSend(nil, self, "setTitlebarAppearsTransparent:", ok)
|
|
}
|
|
@(objc_type=Window, objc_name="setMovable")
|
|
Window_setMovable :: proc(self: ^Window, ok: NS.BOOL) {
|
|
msgSend(nil, self, "setMovable:", ok)
|
|
}
|
|
@(objc_type=Window, objc_name="setMovableByWindowBackground")
|
|
Window_setMovableByWindowBackground :: proc(self: ^Window, ok: NS.BOOL) {
|
|
msgSend(nil, self, "setMovableByWindowBackground:", ok)
|
|
}
|
|
@(objc_type=Window, objc_name="setStyleMask")
|
|
Window_setStyleMask :: proc(self: ^Window, style_mask: WindowStyleMask) {
|
|
msgSend(nil, self, "setStyleMask:", style_mask)
|
|
}
|
|
@(objc_type=Window, objc_name="close")
|
|
Window_close :: proc(self: ^Window) {
|
|
msgSend(nil, self, "close")
|
|
}
|