forked from mojbro/gocoa
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstepper.go
77 lines (61 loc) · 1.65 KB
/
stepper.go
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
76
77
package gocoa
// #cgo CFLAGS: -x objective-c
// #cgo LDFLAGS: -framework Cocoa
// #import "stepper.h"
import "C"
type Stepper struct {
ptr C.StepperPtr
id int
cb func(value float64)
}
var steppers []*Stepper
//export onStepperValueChanged
func onStepperValueChanged(id C.int) {
stepper := getStepper(id)
if stepper != nil && stepper.cb != nil {
stepper.cb(stepper.Value())
}
}
func getStepper(id C.int) *Stepper {
stepperID := int(id)
if stepperID < len(steppers) {
return steppers[stepperID]
}
return nil
}
func NewStepper(x int, y int, width int, height int) *Stepper {
stepperID := len(steppers)
stepperPtr := C.Stepper_New(C.int(stepperID), C.int(x), C.int(y), C.int(width), C.int(height))
stepper := &Stepper{
ptr: stepperPtr,
id: stepperID,
}
steppers = append(steppers, stepper)
return stepper
}
func (stepper *Stepper) SetMaxValue(val float64) {
C.Stepper_SetMaxValue(stepper.ptr, C.double(val))
}
func (stepper *Stepper) SetMinValue(val float64) {
C.Stepper_SetMinValue(stepper.ptr, C.double(val))
}
func (stepper *Stepper) SetIncrement(val float64) {
C.Stepper_SetIncrement(stepper.ptr, C.double(val))
}
func (stepper *Stepper) SetValue(val float64) {
C.Stepper_SetValue(stepper.ptr, C.double(val))
}
func (stepper *Stepper) SetValueWraps(val bool) {
C.Stepper_SetValueWraps(stepper.ptr, C.bool(val))
}
func (stepper *Stepper) Value() float64 {
return float64(C.Stepper_Value(stepper.ptr))
}
func (stepper *Stepper) OnStepperValueChanged(fn func(value float64)) {
stepper.cb = fn
}
// Remove removes a Slider from the parent view again.
func (stepper *Stepper) Remove() {
C.Stepper_Remove(stepper.ptr)
steppers[stepper.id] = nil
}