This initially supports reading two common system fonts. At some point there should be a more general Open function, but first I need to work out how to to turn font names into android file names. Fixes golang/go#9419. Change-Id: I8321df873315a5222c39dccf961f742f2e2a7a4c Reviewed-on: https://go-review.googlesource.com/2059 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
// Copyright 2014 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package debug provides GL-based debugging tools for apps.
|
|
package debug // import "golang.org/x/mobile/app/debug"
|
|
|
|
import (
|
|
"fmt"
|
|
"image"
|
|
"image/draw"
|
|
"log"
|
|
"math"
|
|
"sync"
|
|
"time"
|
|
|
|
"code.google.com/p/freetype-go/freetype"
|
|
"golang.org/x/mobile/font"
|
|
"golang.org/x/mobile/geom"
|
|
"golang.org/x/mobile/gl/glutil"
|
|
)
|
|
|
|
var lastDraw = time.Now()
|
|
|
|
var monofont = freetype.NewContext()
|
|
|
|
var fps struct {
|
|
sync.Once
|
|
*glutil.Image
|
|
}
|
|
|
|
// TODO(crawshaw): It looks like we need a gl.RegisterInit feature.
|
|
// TODO(crawshaw): The gldebug mode needs to complain loudly when GL functions
|
|
// are called before init, because often they fail silently.
|
|
func fpsInit() {
|
|
b := font.Monospace()
|
|
f, err := freetype.ParseFont(b)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
monofont.SetFont(f)
|
|
monofont.SetSrc(image.Black)
|
|
monofont.SetHinting(freetype.FullHinting)
|
|
|
|
toPx := func(x geom.Pt) int { return int(math.Ceil(float64(geom.Pt(x).Px()))) }
|
|
fps.Image = glutil.NewImage(toPx(50), toPx(12))
|
|
monofont.SetDst(fps.Image.RGBA)
|
|
monofont.SetClip(fps.Bounds())
|
|
monofont.SetDPI(72 * float64(geom.PixelsPerPt))
|
|
monofont.SetFontSize(12)
|
|
}
|
|
|
|
// DrawFPS draws the per second framerate in the bottom-left of the screen.
|
|
func DrawFPS() {
|
|
fps.Do(fpsInit)
|
|
|
|
now := time.Now()
|
|
diff := now.Sub(lastDraw)
|
|
str := fmt.Sprintf("%.0f FPS", float32(time.Second)/float32(diff))
|
|
draw.Draw(fps.Image, fps.Image.Rect, image.White, image.Point{}, draw.Src)
|
|
|
|
ftpt12 := freetype.Pt(0, int(12*geom.PixelsPerPt))
|
|
if _, err := monofont.DrawString(str, ftpt12); err != nil {
|
|
log.Printf("DrawFPS: %v", err)
|
|
return
|
|
}
|
|
|
|
fps.Upload()
|
|
fps.Draw(
|
|
geom.Point{0, geom.Height - 12},
|
|
geom.Point{50, geom.Height - 12},
|
|
geom.Point{0, geom.Height},
|
|
fps.Bounds(),
|
|
)
|
|
|
|
lastDraw = now
|
|
}
|