github.com/kintar/etxt@v0.0.9/esizer/impl_padder.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  import "github.com/kintar/etxt/efixed"
     7  
     8  // A [Sizer] that behaves like the default one, but with a configurable
     9  // horizontal padding factor that's added to the kern between glyphs.
    10  type HorzPaddingSizer struct {
    11  	horzPadding fixed.Int26_6
    12  	buffer      sfnt.Buffer
    13  }
    14  
    15  // Sets the configurable horizontal padding value, in pixels.
    16  func (self *HorzPaddingSizer) SetHorzPadding(value int) {
    17  	self.horzPadding = fixed.Int26_6(value << 6)
    18  }
    19  
    20  // Like [HorzPaddingSizer.SetHorzPadding], but expecting a fixed.Int26_6
    21  // instead of an int.
    22  func (self *HorzPaddingSizer) SetHorzPaddingFract(value fixed.Int26_6) {
    23  	self.horzPadding = value
    24  }
    25  
    26  // Like [HorzPaddingSizer.SetHorzPadding], but expecting a float64 instead
    27  // of an int.
    28  func (self *HorzPaddingSizer) SetHorzPaddingFloat(value float64) {
    29  	self.horzPadding = efixed.FromFloat64RoundToZero(value)
    30  }
    31  
    32  // Satisfies the [Sizer] interface.
    33  func (self *HorzPaddingSizer) Metrics(f *Font, size fixed.Int26_6) font.Metrics {
    34  	return DefaultMetricsFunc(f, size, &self.buffer)
    35  }
    36  
    37  // Satisfies the [Sizer] interface.
    38  func (self *HorzPaddingSizer) Advance(f *Font, glyphIndex GlyphIndex, size fixed.Int26_6) fixed.Int26_6 {
    39  	return DefaultAdvanceFunc(f, glyphIndex, size, &self.buffer)
    40  }
    41  
    42  // Satisfies the [Sizer] interface.
    43  func (self *HorzPaddingSizer) Kern(f *Font, prevGlyphIndex GlyphIndex, currGlyphIndex GlyphIndex, size fixed.Int26_6) fixed.Int26_6 {
    44  	return DefaultKernFunc(f, prevGlyphIndex, currGlyphIndex, size, &self.buffer) + self.horzPadding
    45  }