2014-07-16 12:25:09 -05:00
// 16 july 2014
package ui
2014-08-03 19:08:25 -05:00
import (
"unsafe"
)
2014-07-16 12:25:09 -05:00
// #include "objc_darwin.h"
import "C"
2014-07-29 12:48:31 -05:00
type label struct {
2014-10-18 16:03:07 -05:00
* controlSingleObject
2014-07-29 12:48:31 -05:00
}
2014-10-18 16:03:07 -05:00
func newLabel ( text string ) Label {
2014-07-29 12:48:31 -05:00
l := & label {
2014-10-18 16:03:07 -05:00
controlSingleObject : newControlSingleObject ( C . newLabel ( ) ) ,
2014-07-29 12:48:31 -05:00
}
l . SetText ( text )
return l
}
2014-08-03 19:08:25 -05:00
func ( l * label ) Text ( ) string {
2014-10-18 16:03:07 -05:00
return C . GoString ( C . textfieldText ( l . id ) )
2014-08-03 19:08:25 -05:00
}
func ( l * label ) SetText ( text string ) {
ctext := C . CString ( text )
defer C . free ( unsafe . Pointer ( ctext ) )
2014-10-18 16:03:07 -05:00
C . textfieldSetText ( l . id , ctext )
2014-08-03 19:08:25 -05:00
}
2014-10-18 16:03:07 -05:00
/ * TODO
2014-08-03 19:08:25 -05:00
func ( l * label ) commitResize ( c * allocation , d * sizing ) {
2014-08-02 08:47:57 -05:00
if ! l . standalone && c . neighbor != nil {
c . neighbor . getAuxResizeInfo ( d )
2014-10-02 09:05:53 -05:00
if d . neighborAlign . baseline != 0 { // no adjustment needed if the given control has no baseline
2014-08-02 08:47:57 -05:00
// in order for the baseline value to be correct, the label MUST BE AT THE HEIGHT THAT OS X WANTS IT TO BE!
// otherwise, the baseline calculation will be relative to the bottom of the control, and everything will be wrong
2014-08-09 20:29:37 -05:00
origsize := C . controlPreferredSize ( l . _id )
2014-08-02 08:47:57 -05:00
c . height = int ( origsize . height )
newrect := C . struct_xrect {
2014-10-02 09:05:53 -05:00
x : C . intptr_t ( c . x ) ,
y : C . intptr_t ( c . y ) ,
width : C . intptr_t ( c . width ) ,
height : C . intptr_t ( c . height ) ,
2014-08-02 08:47:57 -05:00
}
2014-08-03 19:08:25 -05:00
ourAlign := C . alignmentInfo ( l . _id , newrect )
2014-08-02 08:47:57 -05:00
// we need to find the exact Y positions of the baselines
// fortunately, this is easy now that (x,y) is the bottom-left corner
thisbasey := ourAlign . rect . y + ourAlign . baseline
neighborbasey := d . neighborAlign . rect . y + d . neighborAlign . baseline
// now the amount we have to move the label down by is easy to find
yoff := neighborbasey - thisbasey
// and we just add that
c . y += int ( yoff )
}
2014-08-11 12:27:17 -05:00
// in the other case, the most correct thing would be for Label to be aligned to the alignment rect, but I can't get this working, and it looks fine as it is anyway
2014-08-02 08:47:57 -05:00
}
2014-08-03 19:08:25 -05:00
basecommitResize ( l , c , d )
}
2014-10-18 16:03:07 -05:00
* /