mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 09:55:40 +00:00
f32: replace Affine2D{} with AffineId() for identity transformations
References: https://todo.sr.ht/~eliasnaur/gio/655 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
committed by
Elias Naur
parent
78b54615cc
commit
4e5a344cc2
+11
-6
@@ -957,7 +957,9 @@ func (d *drawOps) addClipPath(state *drawState, aux []byte, auxKey opKey, bounds
|
|||||||
|
|
||||||
func (d *drawOps) save(id int, state f32.Affine2D) {
|
func (d *drawOps) save(id int, state f32.Affine2D) {
|
||||||
if extra := id - len(d.states) + 1; extra > 0 {
|
if extra := id - len(d.states) + 1; extra > 0 {
|
||||||
d.states = append(d.states, make([]f32.Affine2D, extra)...)
|
for range extra {
|
||||||
|
d.states = append(d.states, f32.AffineId())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
d.states[id] = state
|
d.states[id] = state
|
||||||
}
|
}
|
||||||
@@ -972,12 +974,13 @@ func (k opKey) SetTransform(t f32.Affine2D) opKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *drawOps) collectOps(r *ops.Reader, viewport f32.Rectangle) {
|
func (d *drawOps) collectOps(r *ops.Reader, viewport f32.Rectangle) {
|
||||||
var (
|
var quads quadsOp
|
||||||
quads quadsOp
|
state := drawState{
|
||||||
state drawState
|
t: f32.AffineId(),
|
||||||
)
|
}
|
||||||
reset := func() {
|
reset := func() {
|
||||||
state = drawState{
|
state = drawState{
|
||||||
|
t: f32.AffineId(),
|
||||||
color: color.NRGBA{A: 0xff},
|
color: color.NRGBA{A: 0xff},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1163,6 +1166,7 @@ func expandPathOp(p *pathOp, clip image.Rectangle) {
|
|||||||
func (d *drawState) materialFor(rect f32.Rectangle, off f32.Point, partTrans f32.Affine2D, clip image.Rectangle) material {
|
func (d *drawState) materialFor(rect f32.Rectangle, off f32.Point, partTrans f32.Affine2D, clip image.Rectangle) material {
|
||||||
m := material{
|
m := material{
|
||||||
opacity: 1.,
|
opacity: 1.,
|
||||||
|
uvTrans: f32.AffineId(),
|
||||||
}
|
}
|
||||||
switch d.matType {
|
switch d.matType {
|
||||||
case materialColor:
|
case materialColor:
|
||||||
@@ -1521,6 +1525,7 @@ func decodeToOutlineQuads(qs *quadSplitter, tr f32.Affine2D, pathData []byte) {
|
|||||||
|
|
||||||
// create GPU vertices for transformed r, find the bounds and establish texture transform.
|
// create GPU vertices for transformed r, find the bounds and establish texture transform.
|
||||||
func (d *drawOps) boundsForTransformedRect(r f32.Rectangle, tr f32.Affine2D) (aux []byte, bnd f32.Rectangle, ptr f32.Affine2D) {
|
func (d *drawOps) boundsForTransformedRect(r f32.Rectangle, tr f32.Affine2D) (aux []byte, bnd f32.Rectangle, ptr f32.Affine2D) {
|
||||||
|
ptr = f32.AffineId()
|
||||||
if isPureOffset(tr) {
|
if isPureOffset(tr) {
|
||||||
// fast-path to allow blitting of pure rectangles
|
// fast-path to allow blitting of pure rectangles
|
||||||
_, _, ox, _, _, oy := tr.Elems()
|
_, _, ox, _, _, oy := tr.Elems()
|
||||||
@@ -1573,7 +1578,7 @@ func (d *drawOps) boundsForTransformedRect(r f32.Rectangle, tr f32.Affine2D) (au
|
|||||||
sx, sy := P2.X-P3.X, P2.Y-P3.Y
|
sx, sy := P2.X-P3.X, P2.Y-P3.Y
|
||||||
ptr = f32.NewAffine2D(sx, P2.X-P1.X, P1.X-sx, sy, P2.Y-P1.Y, P1.Y-sy).Invert()
|
ptr = f32.NewAffine2D(sx, P2.X-P1.X, P1.X-sx, sy, P2.Y-P1.Y, P1.Y-sy).Invert()
|
||||||
|
|
||||||
return
|
return aux, bnd, ptr
|
||||||
}
|
}
|
||||||
|
|
||||||
func isPureOffset(t f32.Affine2D) bool {
|
func isPureOffset(t f32.Affine2D) bool {
|
||||||
|
|||||||
@@ -581,12 +581,10 @@ func ArcTransform(p, f1, f2 f32.Point, angle float32) (transform f32.Affine2D, s
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
θ := angle / float32(segments)
|
||||||
θ = angle / float32(segments)
|
ref := f32.AffineId() // transform from absolute frame to ellipse-based one
|
||||||
ref f32.Affine2D // transform from absolute frame to ellipse-based one
|
rot := f32.AffineId() // rotation matrix for each segment
|
||||||
rot f32.Affine2D // rotation matrix for each segment
|
inv := f32.AffineId() // transform from ellipse-based frame to absolute one
|
||||||
inv f32.Affine2D // transform from ellipse-based frame to absolute one
|
|
||||||
)
|
|
||||||
center := f32.Point{
|
center := f32.Point{
|
||||||
X: 0.5 * (f1.X + f2.X),
|
X: 0.5 * (f1.X + f2.X),
|
||||||
Y: 0.5 * (f1.Y + f2.Y),
|
Y: 0.5 * (f1.Y + f2.Y),
|
||||||
|
|||||||
@@ -281,6 +281,7 @@ func (q *keyQueue) Focus(handlers map[event.Tag]*handler, state keyState, focus
|
|||||||
return state, nil
|
return state, nil
|
||||||
}
|
}
|
||||||
state.content = EditorState{}
|
state.content = EditorState{}
|
||||||
|
state.content.Selection.Transform = f32.AffineId()
|
||||||
var evts []taggedEvent
|
var evts []taggedEvent
|
||||||
if state.focus != nil {
|
if state.focus != nil {
|
||||||
evts = append(evts, taggedEvent{tag: state.focus, event: key.FocusEvent{Focus: false}})
|
evts = append(evts, taggedEvent{tag: state.focus, event: key.FocusEvent{Focus: false}})
|
||||||
|
|||||||
+3
-1
@@ -144,7 +144,9 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func (c *pointerCollector) resetState() {
|
func (c *pointerCollector) resetState() {
|
||||||
c.state = collectState{}
|
c.state = collectState{
|
||||||
|
t: f32.AffineId(),
|
||||||
|
}
|
||||||
c.nodeStack = c.nodeStack[:0]
|
c.nodeStack = c.nodeStack[:0]
|
||||||
// Pop every node except the root.
|
// Pop every node except the root.
|
||||||
if len(c.q.hitTree) > 0 {
|
if len(c.q.hitTree) > 0 {
|
||||||
|
|||||||
+4
-2
@@ -779,13 +779,15 @@ func (q *Router) collect() {
|
|||||||
pc.Reset()
|
pc.Reset()
|
||||||
kq := &q.key.queue
|
kq := &q.key.queue
|
||||||
q.key.queue.Reset()
|
q.key.queue.Reset()
|
||||||
var t f32.Affine2D
|
t := f32.AffineId()
|
||||||
for encOp, ok := q.reader.Decode(); ok; encOp, ok = q.reader.Decode() {
|
for encOp, ok := q.reader.Decode(); ok; encOp, ok = q.reader.Decode() {
|
||||||
switch ops.OpType(encOp.Data[0]) {
|
switch ops.OpType(encOp.Data[0]) {
|
||||||
case ops.TypeSave:
|
case ops.TypeSave:
|
||||||
id := ops.DecodeSave(encOp.Data)
|
id := ops.DecodeSave(encOp.Data)
|
||||||
if extra := id - len(q.savedTrans) + 1; extra > 0 {
|
if extra := id - len(q.savedTrans) + 1; extra > 0 {
|
||||||
q.savedTrans = append(q.savedTrans, make([]f32.Affine2D, extra)...)
|
for range extra {
|
||||||
|
q.savedTrans = append(q.savedTrans, f32.AffineId())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
q.savedTrans[id] = t
|
q.savedTrans[id] = t
|
||||||
case ops.TypeLoad:
|
case ops.TypeLoad:
|
||||||
|
|||||||
Reference in New Issue
Block a user