github.com/Kintar/etxt@v0.0.0-20221224033739-2fc69f000137/esizer/impl_advance.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  // Like [HorzPaddingSizer], but adds the extra padding in the advance
     9  // instead of the kern.
    10  //
    11  // If you aren't modifying the glyphs, only padding them horizontally,
    12  // use [HorzPaddingSizer] instead. This sizer is intended to deal with
    13  // modified glyphs that have actually become wider.
    14  type AdvancePadSizer struct {
    15  	buffer  sfnt.Buffer
    16  	padding fixed.Int26_6
    17  }
    18  
    19  // Sets the configurable horizontal padding value, in pixels.
    20  func (self *AdvancePadSizer) SetPadding(value int) {
    21  	self.padding = fixed.Int26_6(value << 6)
    22  }
    23  
    24  // Like [AdvancePadSizer.SetPadding], but expecting a fixed.Int26_6 instead
    25  // of an int.
    26  func (self *AdvancePadSizer) SetPaddingFract(value fixed.Int26_6) {
    27  	self.padding = value
    28  }
    29  
    30  // Like [AdvancePadSizer.SetPadding], but expecting a float64 instead of
    31  // an int.
    32  func (self *AdvancePadSizer) SetPaddingFloat(value float64) {
    33  	self.padding = efixed.FromFloat64RoundToZero(value)
    34  }
    35  
    36  // Satisfies the [Sizer] interface.
    37  func (self *AdvancePadSizer) Metrics(f *Font, size fixed.Int26_6) font.Metrics {
    38  	return DefaultMetricsFunc(f, size, &self.buffer)
    39  }
    40  
    41  // Satisfies the [Sizer] interface.
    42  func (self *AdvancePadSizer) Advance(f *Font, glyphIndex GlyphIndex, size fixed.Int26_6) fixed.Int26_6 {
    43  	return DefaultAdvanceFunc(f, glyphIndex, size, &self.buffer) + self.padding
    44  }
    45  
    46  // Satisfies the [Sizer] interface.
    47  func (self *AdvancePadSizer) Kern(f *Font, prevGlyphIndex GlyphIndex, currGlyphIndex GlyphIndex, size fixed.Int26_6) fixed.Int26_6 {
    48  	return DefaultKernFunc(f, prevGlyphIndex, currGlyphIndex, size, &self.buffer)
    49  }