forked from joejulian/gio
text: [API] remove Text and Advances from Layout
These fields are no longer needed with the new text shaper. Advances is redundant to the glyph information, and Text should never be used during layout, as you should traverse the cluster list instead. This commit also removed the now-unused string field from the path LRU cache key. References: https://todo.sr.ht/~eliasnaur/gio/146 Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
This commit is contained in:
@@ -401,7 +401,6 @@ func (o output) ToLine() text.Line {
|
|||||||
advances = append(advances, glyph.XAdvance)
|
advances = append(advances, glyph.XAdvance)
|
||||||
}
|
}
|
||||||
layout := text.Layout{
|
layout := text.Layout{
|
||||||
Advances: advances,
|
|
||||||
Glyphs: toGioGlyphs(o.Shaped.Glyphs),
|
Glyphs: toGioGlyphs(o.Shaped.Glyphs),
|
||||||
Runes: o.RuneRange,
|
Runes: o.RuneRange,
|
||||||
Direction: toSystemDirection(o.Shaped.Direction),
|
Direction: toSystemDirection(o.Shaped.Direction),
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ type layoutKey struct {
|
|||||||
|
|
||||||
type pathKey struct {
|
type pathKey struct {
|
||||||
ppem fixed.Int26_6
|
ppem fixed.Int26_6
|
||||||
str string
|
|
||||||
gidHash uint64
|
gidHash uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -24,10 +24,10 @@ func TestLayoutLRU(t *testing.T) {
|
|||||||
func TestPathLRU(t *testing.T) {
|
func TestPathLRU(t *testing.T) {
|
||||||
c := new(pathCache)
|
c := new(pathCache)
|
||||||
put := func(i int) {
|
put := func(i int) {
|
||||||
c.Put(pathKey{str: strconv.Itoa(i), gidHash: uint64(i)}, Layout{Runes: Range{Count: i}}, clip.PathSpec{})
|
c.Put(pathKey{gidHash: uint64(i)}, Layout{Runes: Range{Count: i}}, clip.PathSpec{})
|
||||||
}
|
}
|
||||||
get := func(i int) bool {
|
get := func(i int) bool {
|
||||||
_, ok := c.Get(pathKey{str: strconv.Itoa(i), gidHash: uint64(i)}, Layout{Runes: Range{Count: i}})
|
_, ok := c.Get(pathKey{gidHash: uint64(i)}, Layout{Runes: Range{Count: i}})
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
testLRU(t, put, get)
|
testLRU(t, put, get)
|
||||||
|
|||||||
@@ -168,7 +168,6 @@ func (f *faceCache) shape(ppem fixed.Int26_6, layout Layout) clip.PathSpec {
|
|||||||
}
|
}
|
||||||
pk := pathKey{
|
pk := pathKey{
|
||||||
ppem: ppem,
|
ppem: ppem,
|
||||||
str: layout.Text,
|
|
||||||
gidHash: f.hashGIDs(layout),
|
gidHash: f.hashGIDs(layout),
|
||||||
}
|
}
|
||||||
if clip, ok := f.pathCache.Get(pk, layout); ok {
|
if clip, ok := f.pathCache.Get(pk, layout); ok {
|
||||||
|
|||||||
@@ -92,8 +92,6 @@ type Layout struct {
|
|||||||
// so the first cluster will describe the beginning of the text and may
|
// so the first cluster will describe the beginning of the text and may
|
||||||
// refer to the final glyphs in the Glyphs field if the text is RTL.
|
// refer to the final glyphs in the Glyphs field if the text is RTL.
|
||||||
Clusters []GlyphCluster
|
Clusters []GlyphCluster
|
||||||
Text string
|
|
||||||
Advances []fixed.Int26_6
|
|
||||||
// Runes describes the position of the text data this layout represents
|
// Runes describes the position of the text data this layout represents
|
||||||
// within the overall body of text being shaped.
|
// within the overall body of text being shaped.
|
||||||
Runes Range
|
Runes Range
|
||||||
|
|||||||
@@ -1476,8 +1476,6 @@ func nullLayout(rr io.RuneReader) ([]text.Line, error) {
|
|||||||
Runes: text.Range{
|
Runes: text.Range{
|
||||||
Count: n,
|
Count: n,
|
||||||
},
|
},
|
||||||
Text: buf.String(),
|
|
||||||
Advances: make([]fixed.Int26_6, n),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, rerr
|
}, rerr
|
||||||
|
|||||||
@@ -966,8 +966,14 @@ func (q *testQueue) Events(_ event.Tag) []event.Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printLines(e *Editor) {
|
func printLines(e *Editor) {
|
||||||
for n, line := range e.lines {
|
for _, line := range e.lines {
|
||||||
text := strings.TrimSuffix(line.Layout.Text, "\n")
|
start := e.runeOffset(line.Layout.Runes.Offset)
|
||||||
|
buf := make([]byte, 0, 4*line.Layout.Runes.Count)
|
||||||
|
e.Seek(int64(start), 0)
|
||||||
|
n, _ := e.Read(buf)
|
||||||
|
buf = buf[:n]
|
||||||
|
asStr := string([]rune(string(buf))[:line.Layout.Runes.Count])
|
||||||
|
text := strings.TrimSuffix(asStr, "\n")
|
||||||
fmt.Printf("%d: %s\n", n, text)
|
fmt.Printf("%d: %s\n", n, text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user