text/v2: refactoring: simplify implementation

This commit is contained in:
Hajime Hoshi 2023-11-13 13:04:55 +09:00
parent 29fe3f6d21
commit 4a84f3697c
2 changed files with 12 additions and 8 deletions

View File

@ -113,8 +113,8 @@ func (s *StdFace) appendGlyphs(glyphs []Glyph, text string, originX, originY flo
Rune: r, Rune: r,
IndexInBytes: i, IndexInBytes: i,
Image: img, Image: img,
X: imgX, X: float64(imgX),
Y: imgY, Y: float64(imgY),
}) })
} }
origin.X += a origin.X += a
@ -124,11 +124,15 @@ func (s *StdFace) appendGlyphs(glyphs []Glyph, text string, originX, originY flo
return glyphs return glyphs
} }
func (s *StdFace) glyphImage(r rune, origin fixed.Point26_6) (*ebiten.Image, float64, float64, fixed.Int26_6) { func (s *StdFace) glyphImage(r rune, origin fixed.Point26_6) (*ebiten.Image, int, int, fixed.Int26_6) {
// Assume that StdFace's direction is always horizontal.
origin.X = adjustGranularity(origin.X)
origin.Y &^= ((1 << 6) - 1)
b, a, _ := s.f.GlyphBounds(r) b, a, _ := s.f.GlyphBounds(r)
subpixelOffset := fixed.Point26_6{ subpixelOffset := fixed.Point26_6{
X: (adjustOffsetGranularity(origin.X) + b.Min.X) & ((1 << 6) - 1), X: (origin.X + b.Min.X) & ((1 << 6) - 1),
Y: b.Min.Y & ((1 << 6) - 1), Y: (origin.Y + b.Min.Y) & ((1 << 6) - 1),
} }
key := glyphImageCacheKey{ key := glyphImageCacheKey{
rune: r, rune: r,
@ -138,8 +142,8 @@ func (s *StdFace) glyphImage(r rune, origin fixed.Point26_6) (*ebiten.Image, flo
img := theGlyphImageCache.getOrCreate(s, key, func() *ebiten.Image { img := theGlyphImageCache.getOrCreate(s, key, func() *ebiten.Image {
return s.glyphImageImpl(r, subpixelOffset, b) return s.glyphImageImpl(r, subpixelOffset, b)
}) })
imgX := fixed26_6ToFloat64(origin.X + b.Min.X - subpixelOffset.X) imgX := (origin.X + b.Min.X).Floor()
imgY := fixed26_6ToFloat64(origin.Y + b.Min.Y - subpixelOffset.Y) imgY := (origin.Y + b.Min.Y).Floor()
return img, imgX, imgY, a return img, imgX, imgY, a
} }

View File

@ -84,7 +84,7 @@ func float64ToFixed26_6(x float64) fixed.Int26_6 {
const glyphVariationCount = 4 const glyphVariationCount = 4
func adjustOffsetGranularity(x fixed.Int26_6) fixed.Int26_6 { func adjustGranularity(x fixed.Int26_6) fixed.Int26_6 {
return x / ((1 << 6) / glyphVariationCount) * ((1 << 6) / glyphVariationCount) return x / ((1 << 6) / glyphVariationCount) * ((1 << 6) / glyphVariationCount)
} }