Removed all the objc_getClass() and sel_getUid() calls from the Go code on Mac OS X. Also got rid of a forgotten objc_msgSend(). Now comes the Objective-C half...
This commit is contained in:
parent
9d8976abab
commit
b7db0e15cd
|
@ -14,10 +14,6 @@ import (
|
|||
// #include "area_darwin.h"
|
||||
import "C"
|
||||
|
||||
var (
|
||||
_NSView = objc_getClass("NSView")
|
||||
)
|
||||
|
||||
func makeArea(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
area := C.makeArea()
|
||||
area = newScrollView(area)
|
||||
|
@ -29,10 +25,6 @@ func areaInScrollView(scrollview C.id) C.id {
|
|||
return getScrollViewContent(scrollview)
|
||||
}
|
||||
|
||||
var (
|
||||
_drawAtPoint = sel_getUid("drawAtPoint:")
|
||||
)
|
||||
|
||||
//export areaView_drawRect
|
||||
func areaView_drawRect(self C.id, rect C.struct_xrect) {
|
||||
s := getSysData(self)
|
||||
|
@ -51,20 +43,6 @@ func areaView_drawRect(self C.id, rect C.struct_xrect) {
|
|||
C.int64_t(cliprect.Min.X), C.int64_t(cliprect.Min.Y))
|
||||
}
|
||||
|
||||
var (
|
||||
_addTrackingArea = sel_getUid("addTrackingArea:")
|
||||
_removeTrackingArea = sel_getUid("removeTrackingArea:")
|
||||
)
|
||||
|
||||
var (
|
||||
_NSEvent = objc_getClass("NSEvent")
|
||||
|
||||
_modifierFlags = sel_getUid("modifierFlags")
|
||||
_buttonNumber = sel_getUid("buttonNumber")
|
||||
_clickCount = sel_getUid("clickCount")
|
||||
_pressedMouseButtons = sel_getUid("pressedMouseButtons")
|
||||
)
|
||||
|
||||
func parseModifiers(e C.id) (m Modifiers) {
|
||||
const (
|
||||
_NSShiftKeyMask = 1 << 17
|
||||
|
@ -157,10 +135,6 @@ func areaView_mouseUp(self C.id, e C.id) {
|
|||
areaMouseEvent(self, e, true, true)
|
||||
}
|
||||
|
||||
var (
|
||||
_keyCode = sel_getUid("keyCode")
|
||||
)
|
||||
|
||||
func sendKeyEvent(self C.id, e C.id, ke KeyEvent) bool {
|
||||
s := getSysData(self)
|
||||
handled, repaint := s.handler.Key(ke)
|
||||
|
|
|
@ -25,11 +25,6 @@ var (
|
|||
appDelegate C.id
|
||||
)
|
||||
|
||||
var (
|
||||
_uitask = sel_getUid("uitask:") // used by uitask_darwin.go
|
||||
_buttonClicked = sel_getUid("buttonClicked:") // used by sysdata_darwin.go
|
||||
)
|
||||
|
||||
func makeAppDelegate() {
|
||||
appDelegate = C.makeAppDelegate()
|
||||
}
|
||||
|
@ -40,11 +35,6 @@ func appDelegate_windowShouldClose(win C.id) {
|
|||
sysData.signal()
|
||||
}
|
||||
|
||||
var (
|
||||
_object = sel_getUid("object")
|
||||
_display = sel_getUid("display")
|
||||
)
|
||||
|
||||
//export appDelegate_windowDidResize
|
||||
func appDelegate_windowDidResize(win C.id) {
|
||||
s := getSysData(win)
|
||||
|
|
|
@ -11,23 +11,6 @@ import (
|
|||
// #include "dialog_darwin.h"
|
||||
import "C"
|
||||
|
||||
// NSAlert styles.
|
||||
const (
|
||||
_NSWarningAlertStyle = 0 // default
|
||||
_NSInformationalAlertStyle = 1
|
||||
_NSCriticalAlertStyle = 2
|
||||
)
|
||||
|
||||
var (
|
||||
_NSAlert = objc_getClass("NSAlert")
|
||||
|
||||
_setMessageText = sel_getUid("setMessageText:")
|
||||
_setInformativeText = sel_getUid("setInformativeText:")
|
||||
_setAlertStyle = sel_getUid("setAlertStyle:")
|
||||
_addButtonWithTitle = sel_getUid("addButtonWithTitle:")
|
||||
_runModal = sel_getUid("runModal")
|
||||
)
|
||||
|
||||
func _msgBox(primarytext string, secondarytext string, style uintptr) {
|
||||
ret := make(chan struct{})
|
||||
defer close(ret)
|
||||
|
|
|
@ -37,11 +37,6 @@ const (
|
|||
)
|
||||
|
||||
var (
|
||||
_NSMutableDictionary = objc_getClass("NSMutableDictionary")
|
||||
|
||||
_dictionaryWithObjectForKey = sel_getUid("dictionaryWithObject:forKey:")
|
||||
_objectForKey = sel_getUid("objectForKey:")
|
||||
|
||||
listboxItemKey = toNSString(_listboxItemKey)
|
||||
)
|
||||
|
||||
|
@ -71,17 +66,6 @@ But what is arrangedObjects? Why care about arranging objects? We don't have to
|
|||
Of course, Mac OS X 10.5 adds the ability to automatically arrange objects. So let's just turn that off to be safe.
|
||||
*/
|
||||
|
||||
var (
|
||||
_NSArrayController = objc_getClass("NSArrayController")
|
||||
|
||||
_setAutomaticallyRearrangesObjects = sel_getUid("setAutomaticallyRearrangesObjects:")
|
||||
_addObject = sel_getUid("addObject:")
|
||||
_insertObjectAtArrangedObjectIndex = sel_getUid("insertObject:atArrangedObjectIndex:")
|
||||
_removeObjectAtArrangedObjectIndex = sel_getUid("removeObjectAtArrangedObjectIndex:")
|
||||
_arrangedObjects = sel_getUid("arrangedObjects")
|
||||
_objectAtIndex = sel_getUid("objectAtIndex:")
|
||||
)
|
||||
|
||||
func newListboxArray() C.id {
|
||||
return C.newListboxArray()
|
||||
}
|
||||
|
@ -122,9 +106,6 @@ const (
|
|||
)
|
||||
|
||||
var (
|
||||
_bindToObjectWithKeyPathOptions = sel_getUid("bind:toObject:withKeyPath:options:")
|
||||
_infoForBinding = sel_getUid("infoForBinding:")
|
||||
|
||||
tableColumnBinding = toNSString("value")
|
||||
listboxItemKeyPath = toNSString(_listboxItemKeyPath)
|
||||
)
|
||||
|
@ -146,16 +127,6 @@ Columns need string identifiers; we'll just reuse the item key.
|
|||
Editability is also handled here, as opposed to in NSTableView itself.
|
||||
*/
|
||||
|
||||
var (
|
||||
_NSTableColumn = objc_getClass("NSTableColumn")
|
||||
|
||||
_initWithIdentifier = sel_getUid("initWithIdentifier:")
|
||||
_tableColumnWithIdentifier = sel_getUid("tableColumnWithIdentifier:")
|
||||
_dataCell = sel_getUid("dataCell")
|
||||
_setDataCell = sel_getUid("setDataCell:")
|
||||
// _setEditable in sysdata_darwin.go
|
||||
)
|
||||
|
||||
func newListboxTableColumn() C.id {
|
||||
column := C.makeListboxTableColumn(listboxItemKey)
|
||||
bindListboxArray(column, newListboxArray())
|
||||
|
@ -172,15 +143,7 @@ The NSTableViews don't draw their own scrollbars; we have to drop our NSTableVie
|
|||
The actual creation code was moved to objc_darwin.go.
|
||||
*/
|
||||
|
||||
var (
|
||||
_setBorderType = sel_getUid("setBorderType:")
|
||||
)
|
||||
|
||||
func newListboxScrollView(listbox C.id) C.id {
|
||||
const (
|
||||
_NSBezelBorder = 2
|
||||
)
|
||||
|
||||
scrollview := newScrollView(listbox)
|
||||
C.giveScrollViewBezelBorder(scrollview) // this is what Interface Builder gives the scroll view
|
||||
return scrollview
|
||||
|
@ -204,21 +167,6 @@ func listboxArray(listbox C.id) C.id {
|
|||
We'll handle selections from the NSTableView too. The only trickery is dealing with the return value of -[NSTableView selectedRowIndexes]: NSIndexSet. The only way to get indices out of a NSIndexSet is to get them all out wholesale, and working with C arrays in Go is Not Fun.
|
||||
*/
|
||||
|
||||
var (
|
||||
_NSTableView = objc_getClass("NSTableView")
|
||||
|
||||
_addTableColumn = sel_getUid("addTableColumn:")
|
||||
_setAllowsMultipleSelection = sel_getUid("setAllowsMultipleSelection:")
|
||||
_setAllowsEmptySelection = sel_getUid("setAllowsEmptySelection:")
|
||||
_setHeaderView = sel_getUid("setHeaderView:")
|
||||
_selectedRowIndexes = sel_getUid("selectedRowIndexes")
|
||||
_count = sel_getUid("count")
|
||||
_firstIndex = sel_getUid("firstIndex")
|
||||
_indexGreaterThanIndex = sel_getUid("indexGreaterThanIndex:")
|
||||
_numberOfRows = sel_getUid("numberOfRows")
|
||||
_deselectAll = sel_getUid("deselectAll:")
|
||||
)
|
||||
|
||||
func makeListbox(parentWindow C.id, alternate bool, s *sysData) C.id {
|
||||
listbox := C.makeListbox(newListboxTableColumn(), toBOOL(alternate))
|
||||
listbox = newListboxScrollView(listbox)
|
||||
|
|
|
@ -9,36 +9,8 @@ import (
|
|||
// #cgo LDFLAGS: -lobjc -framework Foundation
|
||||
// #include <stdlib.h>
|
||||
// #include "objc_darwin.h"
|
||||
// /* cgo doesn't like Nil */
|
||||
// Class NilClass = Nil;
|
||||
import "C"
|
||||
|
||||
func objc_getClass(class string) C.id {
|
||||
cclass := C.CString(class)
|
||||
defer C.free(unsafe.Pointer(cclass))
|
||||
|
||||
return C.objc_getClass(cclass)
|
||||
}
|
||||
|
||||
func sel_getUid(sel string) C.SEL {
|
||||
csel := C.CString(sel)
|
||||
defer C.free(unsafe.Pointer(csel))
|
||||
|
||||
return C.sel_getUid(csel)
|
||||
}
|
||||
|
||||
// Common Objective-C types and selectors.
|
||||
var (
|
||||
_NSObject = objc_getClass("NSObject")
|
||||
_NSString = objc_getClass("NSString")
|
||||
|
||||
_alloc = sel_getUid("alloc")
|
||||
_new = sel_getUid("new")
|
||||
_release = sel_getUid("release")
|
||||
_stringWithUTF8String = sel_getUid("stringWithUTF8String:")
|
||||
_UTF8String = sel_getUid("UTF8String")
|
||||
)
|
||||
|
||||
func toNSString(str string) C.id {
|
||||
cstr := C.CString(str)
|
||||
defer C.free(unsafe.Pointer(cstr))
|
||||
|
@ -52,16 +24,6 @@ func fromNSString(str C.id) string {
|
|||
|
||||
// These consolidate the NSScrollView code (used by listbox_darwin.go and area_darwin.go) into a single place.
|
||||
|
||||
var (
|
||||
_NSScrollView = objc_getClass("NSScrollView")
|
||||
|
||||
_setHasHorizontalScroller = sel_getUid("setHasHorizontalScroller:")
|
||||
_setHasVerticalScroller = sel_getUid("setHasVerticalScroller:")
|
||||
_setAutohidesScrollers = sel_getUid("setAutohidesScrollers:")
|
||||
_setDocumentView = sel_getUid("setDocumentView:")
|
||||
_documentView = sel_getUid("documentView")
|
||||
)
|
||||
|
||||
func newScrollView(content C.id) C.id {
|
||||
return C.makeScrollView(content)
|
||||
}
|
||||
|
|
|
@ -11,11 +11,6 @@ import "C"
|
|||
Cocoa doesn't provide a reliable way to get the preferred size of a control (you're supposed to use Interface Builder and have it set up autoresizing for you). The best we can do is call [control sizeToFit] (which is defined for NSControls and has a custom implementation for the other types here) and read the preferred size. Though this changes the size, we're immediately overriding the change on return from sysData.preferredSize(), so no harm done. (This is similar to what we are doing with GTK+, except GTK+ does not actually change the size.)
|
||||
*/
|
||||
|
||||
var (
|
||||
_sizeToFit = sel_getUid("sizeToFit")
|
||||
// _frame in sysdata_darwin.go
|
||||
)
|
||||
|
||||
// standard case: control immediately passed in
|
||||
func controlPrefSize(control C.id) (width int, height int) {
|
||||
r := C.controlPrefSize(control)
|
||||
|
|
|
@ -37,65 +37,6 @@ type classData struct {
|
|||
selectIndices func(id C.id, indices []int)
|
||||
}
|
||||
|
||||
var (
|
||||
_NSWindow = objc_getClass("NSWindow")
|
||||
_NSButton = objc_getClass("NSButton")
|
||||
_NSPopUpButton = objc_getClass("NSPopUpButton")
|
||||
_NSComboBox = objc_getClass("NSComboBox")
|
||||
_NSTextField = objc_getClass("NSTextField")
|
||||
_NSSecureTextField = objc_getClass("NSSecureTextField")
|
||||
_NSProgressIndicator = objc_getClass("NSProgressIndicator")
|
||||
|
||||
_initWithContentRect = sel_getUid("initWithContentRect:styleMask:backing:defer:")
|
||||
_initWithFrame = sel_getUid("initWithFrame:")
|
||||
_setDelegate = sel_getUid("setDelegate:")
|
||||
_makeKeyAndOrderFront = sel_getUid("makeKeyAndOrderFront:")
|
||||
_orderOut = sel_getUid("orderOut:")
|
||||
_setHidden = sel_getUid("setHidden:")
|
||||
_setTitle = sel_getUid("setTitle:")
|
||||
_setStringValue = sel_getUid("setStringValue:")
|
||||
_setFrame = sel_getUid("setFrame:")
|
||||
_state = sel_getUid("state")
|
||||
_title = sel_getUid("title")
|
||||
_stringValue = sel_getUid("stringValue")
|
||||
_frame = sel_getUid("frame")
|
||||
_setContentSize = sel_getUid("setContentSize:")
|
||||
_setBezelStyle = sel_getUid("setBezelStyle:")
|
||||
_setTarget = sel_getUid("setTarget:")
|
||||
_setAction = sel_getUid("setAction:")
|
||||
_contentView = sel_getUid("contentView")
|
||||
_addSubview = sel_getUid("addSubview:")
|
||||
_setButtonType = sel_getUid("setButtonType:")
|
||||
_initWithFramePullsDown = sel_getUid("initWithFrame:pullsDown:")
|
||||
_setUsesDataSource = sel_getUid("setUsesDataSource:")
|
||||
_addItemWithTitle = sel_getUid("addItemWithTitle:")
|
||||
_insertItemWithTitleAtIndex = sel_getUid("insertItemWithTitle:atIndex:")
|
||||
_removeItemAtIndex = sel_getUid("removeItemAtIndex:")
|
||||
_titleOfSelectedItem = sel_getUid("titleOfSelectedItem")
|
||||
_indexOfSelectedItem = sel_getUid("indexOfSelectedItem")
|
||||
_addItemWithObjectValue = sel_getUid("addItemWithObjectValue:")
|
||||
_insertItemWithObjectValueAtIndex = sel_getUid("insertItemWithObjectValue:atIndex:")
|
||||
_setEditable = sel_getUid("setEditable:")
|
||||
_setBordered = sel_getUid("setBordered:")
|
||||
_setDrawsBackground = sel_getUid("setDrawsBackground:")
|
||||
_cell = sel_getUid("cell")
|
||||
_setLineBreakMode = sel_getUid("setLineBreakMode:")
|
||||
_setStyle = sel_getUid("setStyle:")
|
||||
_setControlSize = sel_getUid("setControlSize:")
|
||||
_setIndeterminate = sel_getUid("setIndeterminate:")
|
||||
_startAnimation = sel_getUid("startAnimation:")
|
||||
_stopAnimation = sel_getUid("stopAnimation:")
|
||||
_setDoubleValue = sel_getUid("setDoubleValue:")
|
||||
_numberOfItems = sel_getUid("numberOfItems")
|
||||
_selectItemAtIndex = sel_getUid("selectItemAtIndex:")
|
||||
_deselectItemAtIndex = sel_getUid("deselectItemAtIndex:")
|
||||
)
|
||||
|
||||
func initWithDummyFrame(self C.id) C.id {
|
||||
return C.objc_msgSend_rect(self, _initWithFrame,
|
||||
C.int64_t(0), C.int64_t(0), C.int64_t(100), C.int64_t(100))
|
||||
}
|
||||
|
||||
func addControl(parentWindow C.id, control C.id) {
|
||||
C.addControl(parentWindow, control)
|
||||
}
|
||||
|
|
|
@ -15,19 +15,6 @@ import "C"
|
|||
|
||||
var uitask chan func()
|
||||
|
||||
var (
|
||||
_NSAutoreleasePool = objc_getClass("NSAutoreleasePool")
|
||||
_NSValue = objc_getClass("NSValue")
|
||||
|
||||
_valueWithPointer = sel_getUid("valueWithPointer:")
|
||||
_performSelectorOnMainThread =
|
||||
sel_getUid("performSelectorOnMainThread:withObject:waitUntilDone:")
|
||||
_stop = sel_getUid("stop:")
|
||||
_postEventAtStart = sel_getUid("postEvent:atStart:")
|
||||
_pointerValue = sel_getUid("pointerValue")
|
||||
_run = sel_getUid("run")
|
||||
)
|
||||
|
||||
func ui(main func()) error {
|
||||
runtime.LockOSThread()
|
||||
|
||||
|
@ -58,15 +45,6 @@ func ui(main func()) error {
|
|||
|
||||
// TODO move to init_darwin.go?
|
||||
|
||||
var (
|
||||
_NSApplication = objc_getClass("NSApplication")
|
||||
|
||||
_sharedApplication = sel_getUid("sharedApplication")
|
||||
_setActivationPolicy = sel_getUid("setActivationPolicy:")
|
||||
_activateIgnoringOtherApps = sel_getUid("activateIgnoringOtherApps:")
|
||||
// _setDelegate in sysdata_darwin.go
|
||||
)
|
||||
|
||||
func initCocoa() (err error) {
|
||||
C.initBleh() // initialize bleh_darwin.m functions
|
||||
makeAppDelegate()
|
||||
|
|
Loading…
Reference in New Issue