mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
parent
245cbc2f4d
commit
e687865c8c
10
colorm.go
10
colorm.go
@ -76,6 +76,16 @@ func (c *ColorM) Scale(r, g, b, a float64) {
|
|||||||
c.impl = c.affineColorM().Scale(float32(r), float32(g), float32(b), float32(a))
|
c.impl = c.affineColorM().Scale(float32(r), float32(g), float32(b), float32(a))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ScaleWithColor scales the matrix by clr.
|
||||||
|
func (c *ColorM) ScaleWithColor(clr color.Color) {
|
||||||
|
cr, cg, cb, ca := clr.RGBA()
|
||||||
|
if ca == 0 {
|
||||||
|
c.Scale(0, 0, 0, 0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.Scale(float64(cr)/float64(ca), float64(cg)/float64(ca), float64(cb)/float64(ca), float64(ca)/0xffff)
|
||||||
|
}
|
||||||
|
|
||||||
// Translate translates the matrix by (r, g, b, a).
|
// Translate translates the matrix by (r, g, b, a).
|
||||||
func (c *ColorM) Translate(r, g, b, a float64) {
|
func (c *ColorM) Translate(r, g, b, a float64) {
|
||||||
c.impl = c.affineColorM().Translate(float32(r), float32(g), float32(b), float32(a))
|
c.impl = c.affineColorM().Translate(float32(r), float32(g), float32(b), float32(a))
|
||||||
|
@ -31,14 +31,6 @@ func init() {
|
|||||||
emptyImage.Fill(color.White)
|
emptyImage.Fill(color.White)
|
||||||
}
|
}
|
||||||
|
|
||||||
func colorToScale(clr color.Color) (float64, float64, float64, float64) {
|
|
||||||
cr, cg, cb, ca := clr.RGBA()
|
|
||||||
if ca == 0 {
|
|
||||||
return 0, 0, 0, 0
|
|
||||||
}
|
|
||||||
return float64(cr) / float64(ca), float64(cg) / float64(ca), float64(cb) / float64(ca), float64(ca) / 0xffff
|
|
||||||
}
|
|
||||||
|
|
||||||
// DrawLine draws a line segment on the given destination dst.
|
// DrawLine draws a line segment on the given destination dst.
|
||||||
//
|
//
|
||||||
// DrawLine is intended to be used mainly for debugging or prototyping purpose.
|
// DrawLine is intended to be used mainly for debugging or prototyping purpose.
|
||||||
@ -49,7 +41,7 @@ func DrawLine(dst *ebiten.Image, x1, y1, x2, y2 float64, clr color.Color) {
|
|||||||
op.GeoM.Scale(length, 1)
|
op.GeoM.Scale(length, 1)
|
||||||
op.GeoM.Rotate(math.Atan2(y2-y1, x2-x1))
|
op.GeoM.Rotate(math.Atan2(y2-y1, x2-x1))
|
||||||
op.GeoM.Translate(x1, y1)
|
op.GeoM.Translate(x1, y1)
|
||||||
op.ColorM.Scale(colorToScale(clr))
|
op.ColorM.ScaleWithColor(clr)
|
||||||
// Filter must be 'nearest' filter (default).
|
// Filter must be 'nearest' filter (default).
|
||||||
// Linear filtering would make edges blurred.
|
// Linear filtering would make edges blurred.
|
||||||
dst.DrawImage(emptySubImage, op)
|
dst.DrawImage(emptySubImage, op)
|
||||||
@ -62,7 +54,7 @@ func DrawRect(dst *ebiten.Image, x, y, width, height float64, clr color.Color) {
|
|||||||
op := &ebiten.DrawImageOptions{}
|
op := &ebiten.DrawImageOptions{}
|
||||||
op.GeoM.Scale(width, height)
|
op.GeoM.Scale(width, height)
|
||||||
op.GeoM.Translate(x, y)
|
op.GeoM.Translate(x, y)
|
||||||
op.ColorM.Scale(colorToScale(clr))
|
op.ColorM.ScaleWithColor(clr)
|
||||||
// Filter must be 'nearest' filter (default).
|
// Filter must be 'nearest' filter (default).
|
||||||
// Linear filtering would make edges blurred.
|
// Linear filtering would make edges blurred.
|
||||||
dst.DrawImage(emptyImage.SubImage(image.Rect(1, 1, 2, 2)).(*ebiten.Image), op)
|
dst.DrawImage(emptyImage.SubImage(image.Rect(1, 1, 2, 2)).(*ebiten.Image), op)
|
||||||
|
@ -129,8 +129,7 @@ func (b *Board) Draw(boardImage *ebiten.Image) {
|
|||||||
x := i*tileSize + (i+1)*tileMargin
|
x := i*tileSize + (i+1)*tileMargin
|
||||||
y := j*tileSize + (j+1)*tileMargin
|
y := j*tileSize + (j+1)*tileMargin
|
||||||
op.GeoM.Translate(float64(x), float64(y))
|
op.GeoM.Translate(float64(x), float64(y))
|
||||||
r, g, b, a := colorToScale(tileBackgroundColor(v))
|
op.ColorM.ScaleWithColor(tileBackgroundColor(v))
|
||||||
op.ColorM.Scale(r, g, b, a)
|
|
||||||
boardImage.DrawImage(tileImage, op)
|
boardImage.DrawImage(tileImage, op)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -322,21 +322,6 @@ func (t *Tile) Update() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func colorToScale(clr color.Color) (float64, float64, float64, float64) {
|
|
||||||
r, g, b, a := clr.RGBA()
|
|
||||||
rf := float64(r) / 0xffff
|
|
||||||
gf := float64(g) / 0xffff
|
|
||||||
bf := float64(b) / 0xffff
|
|
||||||
af := float64(a) / 0xffff
|
|
||||||
// Convert to non-premultiplied alpha components.
|
|
||||||
if 0 < af {
|
|
||||||
rf /= af
|
|
||||||
gf /= af
|
|
||||||
bf /= af
|
|
||||||
}
|
|
||||||
return rf, gf, bf, af
|
|
||||||
}
|
|
||||||
|
|
||||||
func mean(a, b int, rate float64) int {
|
func mean(a, b int, rate float64) int {
|
||||||
return int(float64(a)*(1-rate) + float64(b)*rate)
|
return int(float64(a)*(1-rate) + float64(b)*rate)
|
||||||
}
|
}
|
||||||
@ -398,8 +383,7 @@ func (t *Tile) Draw(boardImage *ebiten.Image) {
|
|||||||
op.GeoM.Translate(float64(tileSize/2), float64(tileSize/2))
|
op.GeoM.Translate(float64(tileSize/2), float64(tileSize/2))
|
||||||
}
|
}
|
||||||
op.GeoM.Translate(float64(x), float64(y))
|
op.GeoM.Translate(float64(x), float64(y))
|
||||||
r, g, b, a := colorToScale(tileBackgroundColor(v))
|
op.ColorM.ScaleWithColor(tileBackgroundColor(v))
|
||||||
op.ColorM.Scale(r, g, b, a)
|
|
||||||
boardImage.DrawImage(tileImage, op)
|
boardImage.DrawImage(tileImage, op)
|
||||||
str := strconv.Itoa(v)
|
str := strconv.Itoa(v)
|
||||||
|
|
||||||
|
11
image.go
11
image.go
@ -100,16 +100,7 @@ func (i *Image) Fill(clr color.Color) {
|
|||||||
|
|
||||||
op := &DrawImageOptions{}
|
op := &DrawImageOptions{}
|
||||||
op.GeoM.Scale(float64(w), float64(h))
|
op.GeoM.Scale(float64(w), float64(h))
|
||||||
|
op.ColorM.ScaleWithColor(clr)
|
||||||
r, g, b, a := clr.RGBA()
|
|
||||||
var rf, gf, bf, af float64
|
|
||||||
if a > 0 {
|
|
||||||
rf = float64(r) / float64(a)
|
|
||||||
gf = float64(g) / float64(a)
|
|
||||||
bf = float64(b) / float64(a)
|
|
||||||
af = float64(a) / 0xffff
|
|
||||||
}
|
|
||||||
op.ColorM.Scale(rf, gf, bf, af)
|
|
||||||
op.CompositeMode = CompositeModeCopy
|
op.CompositeMode = CompositeModeCopy
|
||||||
|
|
||||||
i.DrawImage(emptySubImage, op)
|
i.DrawImage(emptySubImage, op)
|
||||||
|
@ -179,14 +179,9 @@ var textM sync.Mutex
|
|||||||
//
|
//
|
||||||
// Draw is concurrent-safe.
|
// Draw is concurrent-safe.
|
||||||
func Draw(dst *ebiten.Image, text string, face font.Face, x, y int, clr color.Color) {
|
func Draw(dst *ebiten.Image, text string, face font.Face, x, y int, clr color.Color) {
|
||||||
cr, cg, cb, ca := clr.RGBA()
|
|
||||||
if ca == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
op := &ebiten.DrawImageOptions{}
|
op := &ebiten.DrawImageOptions{}
|
||||||
op.GeoM.Translate(float64(x), float64(y))
|
op.GeoM.Translate(float64(x), float64(y))
|
||||||
op.ColorM.Scale(float64(cr)/float64(ca), float64(cg)/float64(ca), float64(cb)/float64(ca), float64(ca)/0xffff)
|
op.ColorM.ScaleWithColor(clr)
|
||||||
DrawWithOptions(dst, text, face, op)
|
DrawWithOptions(dst, text, face, op)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user