We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
I use Material icons as font for a project.
In the example below, the letters and icons are both drawn from the same origin, but the icons start with an unexpected offset:
Where:
.Dot
See the source code for more details:
package main import ( "fmt" "github.com/faiface/pixel" "github.com/faiface/pixel/imdraw" "github.com/faiface/pixel/pixelgl" "github.com/faiface/pixel/text" "github.com/golang/freetype/truetype" "golang.org/x/image/colornames" "golang.org/x/image/font/gofont/goregular" "image/color" "io/ioutil" "os" "path" ) const fontSize float64 = 64 const distance float64 = 100 var offset pixel.Vec = pixel.V(25, 25) func main() { pixelgl.Run(run) } func run() { cfg := pixelgl.WindowConfig{ Title: "Pixel Rocks!", Bounds: pixel.R(0, 0, 300, 300), } win, err := pixelgl.NewWindow(cfg) if err != nil { panic(err) } win.Clear(colornames.Lightgray) textFont, err := truetype.Parse(goregular.TTF) if err != nil { panic(err) } textFace := truetype.NewFace(textFont, &truetype.Options{Size: fontSize, GlyphCacheEntries: 1}) textAtlas := text.NewAtlas(textFace, text.ASCII) iconFont, err := getTTF("MaterialIcons-Regular.ttf") if err != nil { panic(err) } iconFace := truetype.NewFace(iconFont, &truetype.Options{Size: fontSize, GlyphCacheEntries: 1}) iconAtlas := text.NewAtlas(iconFace, []rune{'\ue313', '\ue314', '\ue315', '\ue316'}) north := pixel.V(1, 2).Scaled(distance).Add(offset) drawTxt(win, north, textAtlas, "n", colornames.Red, colornames.Pink) drawTxt(win, north, iconAtlas, string('\ue316'), colornames.Green, colornames.Lightgreen) drawDot(win, north, colornames.Blue) east := pixel.V(2, 1).Scaled(distance).Add(offset) drawTxt(win, east, textAtlas, "e", colornames.Red, colornames.Pink) drawTxt(win, east, iconAtlas, string('\ue315'), colornames.Green, colornames.Lightgreen) drawDot(win, east, colornames.Blue) south := pixel.V(1, 0).Scaled(distance).Add(offset) drawTxt(win, south, textAtlas, "s", colornames.Red, colornames.Pink) drawTxt(win, south, iconAtlas, string('\ue313'), colornames.Green, colornames.Lightgreen) drawDot(win, south, colornames.Blue) west := pixel.V(0, 1).Scaled(distance).Add(offset) drawTxt(win, west, textAtlas, "w", colornames.Red, colornames.Pink) drawTxt(win, west, iconAtlas, string('\ue314'), colornames.Green, colornames.Lightgreen) drawDot(win, west, colornames.Blue) for !win.Closed() { win.Update() } } func getTTF(fontName string) (*truetype.Font, error) { file, err := os.Open(path.Join("assets", fontName)) if err != nil { return nil, err } defer file.Close() bytes, err := ioutil.ReadAll(file) if err != nil { return nil, err } ttf, err := truetype.Parse(bytes) if err != nil { return nil, err } return ttf, nil } func drawTxt(win *pixelgl.Window, pos pixel.Vec, atlas *text.Atlas, txtContent string, color, bgColor color.Color) { txt := text.New(pos, atlas) txt.Color = color fmt.Fprint(txt, txtContent) drawDot(win, txt.Dot, color) drawRect(win, txt.Bounds(), bgColor) txt.Draw(win, pixel.IM) } func drawDot(win *pixelgl.Window, pos pixel.Vec, color color.Color) { drawRect(win, pixel.R(pos.X-3, pos.Y-3, pos.X+3, pos.Y+3), color) } func drawRect(win *pixelgl.Window, rect pixel.Rect, color color.Color) { imd := imdraw.New(nil) imd.Color = color imd.Push(rect.Min, rect.Max) imd.Rectangle(0) imd.Draw(win) }
import ( "fmt" "github.com/faiface/pixel" "github.com/faiface/pixel/imdraw" "github.com/faiface/pixel/pixelgl" "github.com/faiface/pixel/text" "github.com/golang/freetype/truetype" "golang.org/x/image/colornames" "golang.org/x/image/font/gofont/goregular" "image/color" "io/ioutil" "os" "path" )
const fontSize float64 = 64 const distance float64 = 100
var offset pixel.Vec = pixel.V(25, 25)
func main() { pixelgl.Run(run) }
func run() { cfg := pixelgl.WindowConfig{ Title: "Pixel Rocks!", Bounds: pixel.R(0, 0, 300, 300), }
win, err := pixelgl.NewWindow(cfg) if err != nil { panic(err) } win.Clear(colornames.Lightgray) textFont, err := truetype.Parse(goregular.TTF) if err != nil { panic(err) } textFace := truetype.NewFace(textFont, &truetype.Options{Size: fontSize, GlyphCacheEntries: 1}) textAtlas := text.NewAtlas(textFace, text.ASCII) iconFont, err := getTTF("MaterialIcons-Regular.ttf") if err != nil { panic(err) } iconFace := truetype.NewFace(iconFont, &truetype.Options{Size: fontSize, GlyphCacheEntries: 1}) iconAtlas := text.NewAtlas(iconFace, []rune{'\ue313', '\ue314', '\ue315', '\ue316'}) north := pixel.V(1, 2).Scaled(distance).Add(offset) drawTxt(win, north, textAtlas, "n", colornames.Red, colornames.Pink) drawTxt(win, north, iconAtlas, string('\ue316'), colornames.Green, colornames.Lightgreen) drawDot(win, north, colornames.Blue) east := pixel.V(2, 1).Scaled(distance).Add(offset) drawTxt(win, east, textAtlas, "e", colornames.Red, colornames.Pink) drawTxt(win, east, iconAtlas, string('\ue315'), colornames.Green, colornames.Lightgreen) drawDot(win, east, colornames.Blue) south := pixel.V(1, 0).Scaled(distance).Add(offset) drawTxt(win, south, textAtlas, "s", colornames.Red, colornames.Pink) drawTxt(win, south, iconAtlas, string('\ue313'), colornames.Green, colornames.Lightgreen) drawDot(win, south, colornames.Blue) west := pixel.V(0, 1).Scaled(distance).Add(offset) drawTxt(win, west, textAtlas, "w", colornames.Red, colornames.Pink) drawTxt(win, west, iconAtlas, string('\ue314'), colornames.Green, colornames.Lightgreen) drawDot(win, west, colornames.Blue) for !win.Closed() { win.Update() }
}
func getTTF(fontName string) (*truetype.Font, error) { file, err := os.Open(path.Join("assets", fontName)) if err != nil { return nil, err } defer file.Close()
bytes, err := ioutil.ReadAll(file) if err != nil { return nil, err } ttf, err := truetype.Parse(bytes) if err != nil { return nil, err } return ttf, nil
func drawTxt(win *pixelgl.Window, pos pixel.Vec, atlas *text.Atlas, txtContent string, color, bgColor color.Color) { txt := text.New(pos, atlas) txt.Color = color fmt.Fprint(txt, txtContent) drawDot(win, txt.Dot, color) drawRect(win, txt.Bounds(), bgColor) txt.Draw(win, pixel.IM) }
func drawDot(win *pixelgl.Window, pos pixel.Vec, color color.Color) { drawRect(win, pixel.R(pos.X-3, pos.Y-3, pos.X+3, pos.Y+3), color) }
func drawRect(win *pixelgl.Window, rect pixel.Rect, color color.Color) { imd := imdraw.New(nil) imd.Color = color imd.Push(rect.Min, rect.Max) imd.Rectangle(0) imd.Draw(win) }
Original issue: faiface/pixel#255
The text was updated successfully, but these errors were encountered:
No branches or pull requests
I use Material icons as font for a project.
In the example below, the letters and icons are both drawn from the same origin, but the icons start with an unexpected offset:
Where:
.Dot
;.Dot
;See the source code for more details:
source code (click to expand)
Original issue: faiface/pixel#255
The text was updated successfully, but these errors were encountered: