github.com/Kintar/etxt@v0.0.0-20221224033739-2fc69f000137/esizer/impl_fixed.go (about) 1 package esizer 2 3 import "golang.org/x/image/font" 4 import "golang.org/x/image/font/sfnt" 5 import "golang.org/x/image/math/fixed" 6 7 import "github.com/Kintar/etxt/efixed" 8 9 // A [Sizer] with a fixed advance between glyphs. 10 type FixedSizer struct { 11 advance fixed.Int26_6 12 buffer sfnt.Buffer 13 } 14 15 // Sets the fixed advance between characters. 16 func (self *FixedSizer) SetAdvance(advance int) { 17 self.SetAdvanceFract(fixed.Int26_6(advance << 6)) 18 } 19 20 // Like [FixedSizer.SetAdvance], but expecting a float64 instead of an int. 21 func (self *FixedSizer) SetAdvanceFloat(advance float64) { 22 self.advance = efixed.FromFloat64RoundToZero(advance) 23 } 24 25 // Like [FixedSizer.SetAdvance], but expcting a fixed.Int26_6 instead of an int. 26 func (self *FixedSizer) SetAdvanceFract(advance fixed.Int26_6) { 27 self.advance = advance 28 } 29 30 // Satisfies the [Sizer] interface. 31 func (self *FixedSizer) Metrics(font *Font, size fixed.Int26_6) font.Metrics { 32 return DefaultMetricsFunc(font, size, &self.buffer) 33 } 34 35 // Satisfies the [Sizer] interface. 36 func (self *FixedSizer) Advance(*Font, GlyphIndex, fixed.Int26_6) fixed.Int26_6 { 37 return self.advance 38 } 39 40 // Satisfies the [Sizer] interface. 41 func (self *FixedSizer) Kern(*Font, GlyphIndex, GlyphIndex, fixed.Int26_6) fixed.Int26_6 { 42 return 0 43 }