summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--area.go14
-rw-r--r--areahandler.go3
-rw-r--r--draw.go27
3 files changed, 40 insertions, 4 deletions
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),
}
}