mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
parent
6056fc59eb
commit
df266e8acf
@ -122,7 +122,7 @@ func (g *Game) Update() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *Game) Draw(screen *ebiten.Image) {
|
func (g *Game) Draw(screen *ebiten.Image) {
|
||||||
ebitenutil.DebugPrint(screen, "Press O to show/hide origins")
|
ebitenutil.DebugPrint(screen, "Press O to show/hide origins.\nRed points are the original origin positions.\nThe green points are the origin positions after applying the offset.")
|
||||||
|
|
||||||
gray := color.RGBA{0x80, 0x80, 0x80, 0xff}
|
gray := color.RGBA{0x80, 0x80, 0x80, 0xff}
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
Size: 24,
|
Size: 24,
|
||||||
Language: language.Arabic,
|
Language: language.Arabic,
|
||||||
}
|
}
|
||||||
x, y := screenWidth-20, 40
|
x, y := screenWidth-20, 50
|
||||||
w, h := text.Measure(arabicText, f, 0)
|
w, h := text.Measure(arabicText, f, 0)
|
||||||
// The left upper point is not x but x-w, since the text runs in the rigth-to-left direction.
|
// The left upper point is not x but x-w, since the text runs in the rigth-to-left direction.
|
||||||
vector.DrawFilledRect(screen, float32(x)-float32(w), float32(y), float32(w), float32(h), gray, false)
|
vector.DrawFilledRect(screen, float32(x)-float32(w), float32(y), float32(w), float32(h), gray, false)
|
||||||
@ -145,6 +145,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
if g.showOrigins {
|
if g.showOrigins {
|
||||||
op := &text.LayoutOptions{}
|
op := &text.LayoutOptions{}
|
||||||
for _, g := range text.AppendGlyphs(nil, arabicText, f, op) {
|
for _, g := range text.AppendGlyphs(nil, arabicText, f, op) {
|
||||||
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX+g.OriginOffsetX), float32(y)+float32(g.OriginY+g.OriginOffsetY), 2, color.RGBA{0, 0xff, 0, 0xff}, true)
|
||||||
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,7 +157,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
Size: 24,
|
Size: 24,
|
||||||
Language: language.Hindi,
|
Language: language.Hindi,
|
||||||
}
|
}
|
||||||
x, y := 20, 100
|
x, y := 20, 110
|
||||||
w, h := text.Measure(hindiText, f, 0)
|
w, h := text.Measure(hindiText, f, 0)
|
||||||
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
||||||
op := &text.DrawOptions{}
|
op := &text.DrawOptions{}
|
||||||
@ -166,6 +167,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
if g.showOrigins {
|
if g.showOrigins {
|
||||||
op := &text.LayoutOptions{}
|
op := &text.LayoutOptions{}
|
||||||
for _, g := range text.AppendGlyphs(nil, hindiText, f, op) {
|
for _, g := range text.AppendGlyphs(nil, hindiText, f, op) {
|
||||||
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX+g.OriginOffsetX), float32(y)+float32(g.OriginY+g.OriginOffsetY), 2, color.RGBA{0, 0xff, 0, 0xff}, true)
|
||||||
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,7 +179,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
Size: 24,
|
Size: 24,
|
||||||
Language: language.Burmese,
|
Language: language.Burmese,
|
||||||
}
|
}
|
||||||
x, y := 20, 160
|
x, y := 20, 170
|
||||||
w, h := text.Measure(myanmarText, f, 0)
|
w, h := text.Measure(myanmarText, f, 0)
|
||||||
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
||||||
op := &text.DrawOptions{}
|
op := &text.DrawOptions{}
|
||||||
@ -187,6 +189,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
if g.showOrigins {
|
if g.showOrigins {
|
||||||
op := &text.LayoutOptions{}
|
op := &text.LayoutOptions{}
|
||||||
for _, g := range text.AppendGlyphs(nil, myanmarText, f, op) {
|
for _, g := range text.AppendGlyphs(nil, myanmarText, f, op) {
|
||||||
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX+g.OriginOffsetX), float32(y)+float32(g.OriginY+g.OriginOffsetY), 2, color.RGBA{0, 0xff, 0, 0xff}, true)
|
||||||
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -198,7 +201,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
Size: 24,
|
Size: 24,
|
||||||
Language: language.Thai,
|
Language: language.Thai,
|
||||||
}
|
}
|
||||||
x, y := 20, 220
|
x, y := 20, 230
|
||||||
w, h := text.Measure(thaiText, f, 0)
|
w, h := text.Measure(thaiText, f, 0)
|
||||||
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
||||||
op := &text.DrawOptions{}
|
op := &text.DrawOptions{}
|
||||||
@ -208,6 +211,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
if g.showOrigins {
|
if g.showOrigins {
|
||||||
op := &text.LayoutOptions{}
|
op := &text.LayoutOptions{}
|
||||||
for _, g := range text.AppendGlyphs(nil, thaiText, f, op) {
|
for _, g := range text.AppendGlyphs(nil, thaiText, f, op) {
|
||||||
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX+g.OriginOffsetX), float32(y)+float32(g.OriginY+g.OriginOffsetY), 2, color.RGBA{0, 0xff, 0, 0xff}, true)
|
||||||
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -223,7 +227,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
Script: language.MustParseScript("Mong"),
|
Script: language.MustParseScript("Mong"),
|
||||||
}
|
}
|
||||||
const lineSpacing = 48
|
const lineSpacing = 48
|
||||||
x, y := 20, 280
|
x, y := 20, 290
|
||||||
w, h := text.Measure(mongolianText, f, lineSpacing)
|
w, h := text.Measure(mongolianText, f, lineSpacing)
|
||||||
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
vector.DrawFilledRect(screen, float32(x), float32(y), float32(w), float32(h), gray, false)
|
||||||
op := &text.DrawOptions{}
|
op := &text.DrawOptions{}
|
||||||
@ -235,6 +239,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
op := &text.LayoutOptions{}
|
op := &text.LayoutOptions{}
|
||||||
op.LineSpacing = lineSpacing
|
op.LineSpacing = lineSpacing
|
||||||
for _, g := range text.AppendGlyphs(nil, mongolianText, f, op) {
|
for _, g := range text.AppendGlyphs(nil, mongolianText, f, op) {
|
||||||
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX+g.OriginOffsetX), float32(y)+float32(g.OriginY+g.OriginOffsetY), 2, color.RGBA{0, 0xff, 0, 0xff}, true)
|
||||||
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -248,7 +253,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
Language: language.Japanese,
|
Language: language.Japanese,
|
||||||
}
|
}
|
||||||
const lineSpacing = 48
|
const lineSpacing = 48
|
||||||
x, y := screenWidth-20, 280
|
x, y := screenWidth-20, 290
|
||||||
w, h := text.Measure(japaneseText, f, lineSpacing)
|
w, h := text.Measure(japaneseText, f, lineSpacing)
|
||||||
// The left upper point is not x but x-w, since the text runs in the rigth-to-left direction as the secondary direction.
|
// The left upper point is not x but x-w, since the text runs in the rigth-to-left direction as the secondary direction.
|
||||||
vector.DrawFilledRect(screen, float32(x)-float32(w), float32(y), float32(w), float32(h), gray, false)
|
vector.DrawFilledRect(screen, float32(x)-float32(w), float32(y), float32(w), float32(h), gray, false)
|
||||||
@ -262,6 +267,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
|
|||||||
op.LineSpacing = lineSpacing
|
op.LineSpacing = lineSpacing
|
||||||
for _, g := range text.AppendGlyphs(nil, japaneseText, f, op) {
|
for _, g := range text.AppendGlyphs(nil, japaneseText, f, op) {
|
||||||
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX), float32(y)+float32(g.OriginY), 2, color.RGBA{0xff, 0, 0, 0xff}, true)
|
||||||
|
vector.DrawFilledCircle(screen, float32(x)+float32(g.OriginX+g.OriginOffsetX), float32(y)+float32(g.OriginY+g.OriginOffsetY), 2, color.RGBA{0, 0xff, 0, 0xff}, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -318,8 +318,10 @@ func (g *GoTextFace) appendGlyphsForLine(glyphs []Glyph, line string, indexOffse
|
|||||||
Image: img,
|
Image: img,
|
||||||
X: float64(imgX),
|
X: float64(imgX),
|
||||||
Y: float64(imgY),
|
Y: float64(imgY),
|
||||||
OriginX: fixed26_6ToFloat64(o.X),
|
OriginX: fixed26_6ToFloat64(origin.X),
|
||||||
OriginY: fixed26_6ToFloat64(o.Y),
|
OriginY: fixed26_6ToFloat64(origin.Y),
|
||||||
|
OriginOffsetX: fixed26_6ToFloat64(glyph.shapingGlyph.XOffset),
|
||||||
|
OriginOffsetY: fixed26_6ToFloat64(-glyph.shapingGlyph.YOffset),
|
||||||
})
|
})
|
||||||
origin = origin.Add(fixed.Point26_6{
|
origin = origin.Add(fixed.Point26_6{
|
||||||
X: glyph.shapingGlyph.XAdvance,
|
X: glyph.shapingGlyph.XAdvance,
|
||||||
|
@ -126,6 +126,8 @@ func (s *GoXFace) appendGlyphsForLine(glyphs []Glyph, line string, indexOffset i
|
|||||||
Y: float64(imgY),
|
Y: float64(imgY),
|
||||||
OriginX: fixed26_6ToFloat64(origin.X),
|
OriginX: fixed26_6ToFloat64(origin.X),
|
||||||
OriginY: fixed26_6ToFloat64(origin.Y),
|
OriginY: fixed26_6ToFloat64(origin.Y),
|
||||||
|
OriginOffsetX: 0,
|
||||||
|
OriginOffsetY: 0,
|
||||||
})
|
})
|
||||||
origin.X += a
|
origin.X += a
|
||||||
prevR = r
|
prevR = r
|
||||||
|
@ -147,6 +147,14 @@ type Glyph struct {
|
|||||||
|
|
||||||
// OriginY is the Y position of the origin of this glyph.
|
// OriginY is the Y position of the origin of this glyph.
|
||||||
OriginY float64
|
OriginY float64
|
||||||
|
|
||||||
|
// OriginOffsetX is the adjustment value to the X position of the origin of this glyph.
|
||||||
|
// OriginOffsetX is usually 0, but can be non-zero for some special glyphs or glyphs in the vertical text layout.
|
||||||
|
OriginOffsetX float64
|
||||||
|
|
||||||
|
// OriginOffsetY is the adjustment value to the Y position of the origin of this glyph.
|
||||||
|
// OriginOffsetY is usually 0, but can be non-zero for some special glyphs or glyphs in the vertical text layout.
|
||||||
|
OriginOffsetY float64
|
||||||
}
|
}
|
||||||
|
|
||||||
// Advance returns the advanced distance from the origin position when rendering the given text with the given face.
|
// Advance returns the advanced distance from the origin position when rendering the given text with the given face.
|
||||||
|
Loading…
Reference in New Issue
Block a user