mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 18:58:54 +01:00
examples/font: Reimplement DrawTextOnImage for examples/keybaord/keybaord
This commit is contained in:
parent
522ec0c1bf
commit
7773aff3f7
@ -19,7 +19,7 @@ package common
|
|||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
//"image/draw"
|
"image/draw"
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
@ -55,6 +55,32 @@ func init() {
|
|||||||
ArcadeFont = &Font{eimg, img, 32, 16, 8, 8}
|
ArcadeFont = &Font{eimg, img, 32, 16, 8, 8}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type part struct {
|
||||||
|
sx, sy, dx0, dy0, dx1, dy1 int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *Font) parts(str string) []part {
|
||||||
|
ps := []part{}
|
||||||
|
x := 0
|
||||||
|
y := 0
|
||||||
|
for _, c := range str {
|
||||||
|
if c == '\n' {
|
||||||
|
x = 0
|
||||||
|
y += f.charHeight
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
sx := (int(c) % f.charNumPerLine) * f.charWidth
|
||||||
|
sy := ((int(c) - f.offset) / f.charNumPerLine) * f.charHeight
|
||||||
|
dx0 := x
|
||||||
|
dy0 := y
|
||||||
|
dx1 := dx0 + f.charWidth
|
||||||
|
dy1 := dy0 + f.charHeight
|
||||||
|
ps = append(ps, part{sx, sy, dx0, dy0, dx1, dy1})
|
||||||
|
x += f.charWidth
|
||||||
|
}
|
||||||
|
return ps
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color.Color) {
|
func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color.Color) {
|
||||||
op := &ebiten.DrawImageOptions{}
|
op := &ebiten.DrawImageOptions{}
|
||||||
ur, ug, ub, ua := c.RGBA()
|
ur, ug, ub, ua := c.RGBA()
|
||||||
@ -70,6 +96,7 @@ func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color
|
|||||||
}
|
}
|
||||||
op.ColorM.Scale(r, g, b, a)
|
op.ColorM.Scale(r, g, b, a)
|
||||||
|
|
||||||
|
// TODO: There is same logic in parts. Refactor this.
|
||||||
x := 0
|
x := 0
|
||||||
y := 0
|
y := 0
|
||||||
for _, c := range str {
|
for _, c := range str {
|
||||||
@ -91,13 +118,15 @@ func (f *Font) DrawText(rt *ebiten.Image, str string, ox, oy, scale int, c color
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*func (f *Font) DrawTextOnImage(rt draw.Image, str string, ox, oy int) {
|
func (f *Font) DrawTextOnImage(rt draw.Image, str string, ox, oy int) {
|
||||||
for i := 0; i < parts.Len(); i++ {
|
// TODO: This function is needed only by examples/keyboard/keyboard.
|
||||||
dx0, dy0, dx1, dy1 := parts.Dst(i)
|
// This is executed without Ebiten, so ebiten.Image can't be used.
|
||||||
sx0, sy0, _, _ := parts.Src(i)
|
// When ebiten.Image can be used without ebiten.Run, this function can be removed.
|
||||||
draw.Draw(rt, image.Rect(dx0+ox, dy0+oy, dx1+ox, dy1+oy), f.origImage, image.Pt(sx0, sy0), draw.Over)
|
for _, p := range f.parts(str) {
|
||||||
|
draw.Draw(rt, image.Rect(p.dx0+ox, p.dy0+oy, p.dx1+ox, p.dy1+oy),
|
||||||
|
f.origImage, image.Pt(p.sx, p.sy), draw.Over)
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
||||||
func (f *Font) DrawTextWithShadow(rt *ebiten.Image, str string, x, y, scale int, clr color.Color) {
|
func (f *Font) DrawTextWithShadow(rt *ebiten.Image, str string, x, y, scale int, clr color.Color) {
|
||||||
f.DrawText(rt, str, x+1, y+1, scale, color.NRGBA{0, 0, 0, 0x80})
|
f.DrawText(rt, str, x+1, y+1, scale, color.NRGBA{0, 0, 0, 0x80})
|
||||||
|
Loading…
Reference in New Issue
Block a user