xgb-render: slightly simplify
This commit is contained in:
parent
30f2366f9a
commit
32beda3c90
|
@ -11,6 +11,7 @@ import (
|
||||||
"golang.org/x/image/font/gofont/goregular"
|
"golang.org/x/image/font/gofont/goregular"
|
||||||
"golang.org/x/image/math/fixed"
|
"golang.org/x/image/math/fixed"
|
||||||
"image"
|
"image"
|
||||||
|
"image/draw"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
)
|
)
|
||||||
|
@ -223,33 +224,13 @@ func main() {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := freetype.NewContext()
|
opts := &truetype.Options{
|
||||||
c.SetDPI(96) // TODO: Take this from the screen or monitor.
|
|
||||||
c.SetFont(f)
|
|
||||||
c.SetFontSize(9)
|
|
||||||
c.SetSrc(image.White)
|
|
||||||
c.SetHinting(font.HintingFull)
|
|
||||||
// TODO: Seems like we want to use NRGBA. Or RGBA if the A is always 1.
|
|
||||||
// Or implement our own image.Image for direct gamma-corrected RGB!
|
|
||||||
nrgb := image.NewRGBA(image.Rect(0, 0, 36, 36))
|
|
||||||
c.SetClip(nrgb.Bounds())
|
|
||||||
c.SetDst(nrgb)
|
|
||||||
|
|
||||||
bounds := f.Bounds(c.PointToFixed(9 /* FIXME: Duplication. */))
|
|
||||||
log.Println("+%v", bounds)
|
|
||||||
|
|
||||||
// FIXME: Duplication.
|
|
||||||
opts := truetype.Options{
|
|
||||||
Size: 9,
|
Size: 9,
|
||||||
DPI: 96,
|
DPI: 96, // TODO: Take this from the screen or monitor.
|
||||||
|
Hinting: font.HintingFull,
|
||||||
}
|
}
|
||||||
|
face := truetype.NewFace(f, opts)
|
||||||
|
|
||||||
// TODO: Seems this satisfies the sfnt interface, DrawString just adds
|
|
||||||
// kerning and DrawMask on top.
|
|
||||||
face := truetype.NewFace(f, &opts)
|
|
||||||
_ = face
|
|
||||||
|
|
||||||
// TODO: Figure out a way to load glyphs into XRender.
|
|
||||||
var rgbFormat render.Pictformat
|
var rgbFormat render.Pictformat
|
||||||
for _, pf := range pformats.Formats {
|
for _, pf := range pformats.Formats {
|
||||||
// Hopefully. Might want to check ARGB/BGRA.
|
// Hopefully. Might want to check ARGB/BGRA.
|
||||||
|
@ -268,17 +249,28 @@ func main() {
|
||||||
// NOTE: A depth of 24 will not work, the server always rejects it.
|
// NOTE: A depth of 24 will not work, the server always rejects it.
|
||||||
_ = render.CreateGlyphSet(X, gsid, rgbFormat)
|
_ = render.CreateGlyphSet(X, gsid, rgbFormat)
|
||||||
|
|
||||||
|
//bounds := f.Bounds(c.PointToFixed(opts.Size))
|
||||||
|
//log.Println("+%v", bounds)
|
||||||
|
|
||||||
|
// TODO: Seems like we want to use NRGBA. Or RGBA if the A is always 1.
|
||||||
|
// Or implement our own image.Image for direct gamma-corrected RGB!
|
||||||
|
nrgb := image.NewRGBA(image.Rect(0, 0, 36, 36))
|
||||||
|
//nrgb.Bounds()
|
||||||
|
|
||||||
for r := rune(32); r < 128; r++ {
|
for r := rune(32); r < 128; r++ {
|
||||||
|
dr, mask, maskp, advance, ok := face.Glyph(
|
||||||
|
fixed.P(0, 18) /* subpixel destination location */, r)
|
||||||
|
if !ok {
|
||||||
|
log.Println("skip")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
for i := 0; i < len(nrgb.Pix); i++ {
|
for i := 0; i < len(nrgb.Pix); i++ {
|
||||||
nrgb.Pix[i] = 0
|
nrgb.Pix[i] = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
advance, err := c.DrawString(string(r), fixed.P(18, 18))
|
draw.Draw(nrgb, dr, mask, maskp, draw.Src)
|
||||||
_, _ = advance, err
|
_ = advance
|
||||||
if err != nil {
|
|
||||||
log.Println("skip")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
_ = render.AddGlyphs(X, gsid, 1, []uint32{uint32(r)},
|
_ = render.AddGlyphs(X, gsid, 1, []uint32{uint32(r)},
|
||||||
[]render.Glyphinfo{{
|
[]render.Glyphinfo{{
|
||||||
|
|
Loading…
Reference in New Issue