diff --git a/area.go b/area.go new file mode 100644 index 0000000..d43645b --- /dev/null +++ b/area.go @@ -0,0 +1,14 @@ +// 16 december 2015 + +package ui + +// #include "ui.h" +import "C" + +// no need to lock this; only the GUI thread can access it +var areas = make(map[*C.uiArea]*Area) + +// TODO. +type Area struct { + Control +} diff --git a/areahandler.go b/areahandler.go index 0daa5b5..5cd7987 100644 --- a/areahandler.go +++ b/areahandler.go @@ -2,6 +2,7 @@ package ui +// #include <stdlib.h> // #include "ui.h" // extern void doAreaHandlerDraw(uiAreaHandler *, uiArea *, uiAreaDrawParams *); // static inline uiAreaHandler *allocAreaHandler(void) @@ -55,7 +56,7 @@ type AreaDrawParams struct { VScrollPos int } -// export doAreaHandlerDraw +//export doAreaHandlerDraw func doAreaHandlerDraw(uah *C.uiAreaHandler, ua *C.uiArea, udp *C.uiAreaDrawParams) { ah := areahandlers[uah] a := areas[ua] diff --git a/draw.go b/draw.go index 4d09bd5..27ed8ba 100644 --- a/draw.go +++ b/draw.go @@ -32,14 +32,35 @@ import "C" // dp.Context.Clip(p) // // ... // p.Free() // when done with the path +// +// A Path also defines its fill mode. (This should ideally be a fill +// parameter, but some implementations prevent it.) +// TODO talk about fill modes type Path struct { p *C.uiDrawPath } -// NewPath creates a new Path. -func NewPath() *Path { +// TODO +type FillMode uint +const ( + Winding FillMode = iota + Alternate +) + +// NewPath creates a new Path with the given fill mode. +func NewPath(fillMode FillMode) *Path { + var fm C.uiDrawFillMode + + switch fillMode { + case Winding: + fm = C.uiDrawFillModeWinding + case Alternate: + fm = C.uiDrawFillModeAlternate + default: + panic("invalid fill mode passed to ui.NewPath()") + } return &Path{ - p: C.uiDrawNewPath(), + p: C.uiDrawNewPath(fm), } }