Fix horizontal positioning by making sure space advance is int

This commit is contained in:
bloeys
2022-07-10 21:43:04 +04:00
parent 254113c12e
commit f21e1ec201
2 changed files with 8 additions and 8 deletions

View File

@ -148,8 +148,8 @@ func NewFontAtlasFromFont(f *truetype.Font, face font.Face, pointSize uint) (*Fo
Img: image.NewRGBA(image.Rect(0, 0, atlasSizeX, atlasSizeY)), Img: image.NewRGBA(image.Rect(0, 0, atlasSizeX, atlasSizeY)),
Glyphs: make(map[rune]FontAtlasGlyph, len(glyphs)), Glyphs: make(map[rune]FontAtlasGlyph, len(glyphs)),
SpaceAdvance: I26_6ToF32(spaceAdv), SpaceAdvance: float32(spaceAdv.Ceil()),
LineHeight: I26_6ToF32(lineHeight), LineHeight: float32(lineHeight.Ceil()),
} }
//Clear background to black //Clear background to black
@ -167,7 +167,7 @@ func NewFontAtlasFromFont(f *truetype.Font, face font.Face, pointSize uint) (*Fo
const drawBoundingBoxes bool = false const drawBoundingBoxes bool = false
atlasSizeXFixed := fixed.I(atlasSizeX) atlasSizeXFixed := fixed.I(atlasSizeX)
// atlasSizeYFixed := fixed.I(atlasSizeY) atlasSizeYFixed := fixed.I(atlasSizeY)
for _, g := range glyphs { for _, g := range glyphs {
//Glyph metrics //Glyph metrics
@ -188,17 +188,17 @@ func NewFontAtlasFromFont(f *truetype.Font, face font.Face, pointSize uint) (*Fo
nextDotPosDeltaX := bearingXFixed + gWidthFixed + charPaddingXFixed nextDotPosDeltaX := bearingXFixed + gWidthFixed + charPaddingXFixed
if drawer.Dot.X+nextDotPosDeltaX >= atlasSizeXFixed { if drawer.Dot.X+nextDotPosDeltaX >= atlasSizeXFixed {
assert.T(drawer.Dot.Y+lineHeight < atlasSizeYFixed, "Failed to create atlas because it did not fit")
drawer.Dot.X = charPaddingXFixed drawer.Dot.X = charPaddingXFixed
if bearingXFixed < 0 { if bearingXFixed < 0 {
drawer.Dot.X += absI26_6(bearingXFixed) drawer.Dot.X += absI26_6(bearingXFixed)
} }
drawer.Dot.Y += lineHeight + charPaddingYFixed drawer.Dot.Y += lineHeight + charPaddingYFixed
// assert.T(drawer.Dot.Y+largestLineDescent+lineHeight < atlasSizeYFixed, "Failed to create atlas because it did not fit")
} }
drawer.Dot = fixed.P(drawer.Dot.X.Floor(), drawer.Dot.Y.Floor()) drawer.Dot = fixed.P(drawer.Dot.X.Round(), drawer.Dot.Y.Round())
//Build and insert glyph struct //Build and insert glyph struct
gTopLeft := image.Point{ gTopLeft := image.Point{

View File

@ -94,7 +94,7 @@ func (p *program) Init() {
fmt.Printf("DPI: %f, font size: %d\n", dpi, p.FontSize) fmt.Printf("DPI: %f, font size: %d\n", dpi, p.FontSize)
w, h := p.win.SDLWin.GetSize() w, h := p.win.SDLWin.GetSize()
p.GlyphRend, err = glyphs.NewGlyphRend("./res/fonts/alm-fixed.ttf", &truetype.Options{Size: float64(p.FontSize), DPI: p.Dpi, SubPixelsX: subPixelX, SubPixelsY: subPixelY, Hinting: hinting}, w, h) p.GlyphRend, err = glyphs.NewGlyphRend("./res/fonts/arabtype-variable.ttf", &truetype.Options{Size: float64(p.FontSize), DPI: p.Dpi, SubPixelsX: subPixelX, SubPixelsY: subPixelY, Hinting: hinting}, w, h)
if err != nil { if err != nil {
panic("Failed to create atlas from font file. Err: " + err.Error()) panic("Failed to create atlas from font file. Err: " + err.Error())
} }
@ -190,7 +190,7 @@ func (p *program) Update() {
var isDrawingBounds = false var isDrawingBounds = false
var drawManyLines = false var drawManyLines = false
var textToShow = " Hello there يا friend. اسمي عمر wow!" var textToShow = "Hello there يا friend. اسمي عمر wow!"
var xOff float32 = 0 var xOff float32 = 0
var yOff float32 = 0 var yOff float32 = 0