gpu, io/router, op: use f32.Affine2D instead of op.TransformOp for transforms

Encode TransformOp as an Affince2D matrix instead and use that in gpu and io transform handling.
There are no changes to user facing API and so far only the offset part of the matrix is used.

This patch is a step towards full affine transformations.

Signed-off-by: Viktor <viktor.ogeman@gmail.com>
This commit is contained in:
Viktor
2020-06-20 23:29:50 +02:00
committed by Elias Naur
parent e7bc1a4553
commit b247395c62
5 changed files with 32 additions and 18 deletions
+5 -5
View File
@@ -56,7 +56,7 @@ type areaOp struct {
}
type areaNode struct {
trans op.TransformOp
trans f32.Affine2D
next int
area areaOp
}
@@ -68,7 +68,7 @@ const (
areaEllipse
)
func (q *pointerQueue) collectHandlers(r *ops.Reader, events *handlerEvents, t op.TransformOp, area, node int, pass bool) {
func (q *pointerQueue) collectHandlers(r *ops.Reader, events *handlerEvents, t f32.Affine2D, area, node int, pass bool) {
for encOp, ok := r.Decode(); ok; encOp, ok = r.Decode() {
switch opconst.OpType(encOp.Data[0]) {
case opconst.TypePush:
@@ -90,8 +90,8 @@ func (q *pointerQueue) collectHandlers(r *ops.Reader, events *handlerEvents, t o
})
node = len(q.hitTree) - 1
case opconst.TypeTransform:
dop := ops.DecodeTransformOp(encOp.Data)
t = t.Multiply(op.TransformOp(dop))
dop := ops.DecodeTransform(encOp.Data)
t = t.Mul(dop)
case opconst.TypePointerInput:
op := decodePointerInputOp(encOp.Data, encOp.Refs)
q.hitTree = append(q.hitTree, hitNode{
@@ -175,7 +175,7 @@ func (q *pointerQueue) Frame(root *op.Ops, events *handlerEvents) {
q.hitTree = q.hitTree[:0]
q.areas = q.areas[:0]
q.reader.Reset(root)
q.collectHandlers(&q.reader, events, op.TransformOp{}, -1, -1, false)
q.collectHandlers(&q.reader, events, f32.Affine2D{}, -1, -1, false)
for k, h := range q.handlers {
if !h.active {
q.dropHandlers(events, k)