84 lines
1.8 KiB
Go
84 lines
1.8 KiB
Go
|
package main
|
||
|
|
||
|
import "math"
|
||
|
import "image"
|
||
|
import "math/rand"
|
||
|
import "image/color"
|
||
|
import "git.tebibyte.media/tomo/x"
|
||
|
import "git.tebibyte.media/tomo/tomo"
|
||
|
|
||
|
func main () {
|
||
|
tomo.Register(0, x.NewBackend)
|
||
|
err := tomo.Run(run)
|
||
|
if err != nil { panic(err) }
|
||
|
}
|
||
|
|
||
|
func run () {
|
||
|
window, err := tomo.NewWindow(image.Rect(0, 0, 256, 256))
|
||
|
if err != nil { panic(err) }
|
||
|
|
||
|
texture := tomo.NewTexture(coolTexture())
|
||
|
|
||
|
box := tomo.NewBox()
|
||
|
box.SetColor(color.Black)
|
||
|
box.SetTextureCenter(texture)
|
||
|
box.SetBorder (
|
||
|
tomo.Border {
|
||
|
Color: [4] color.Color {
|
||
|
color.Black, color.Black,
|
||
|
color.Black, color.Black },
|
||
|
Width: tomo.I(2),
|
||
|
},
|
||
|
tomo.Border {
|
||
|
Color: [4] color.Color {
|
||
|
color.White, color.White,
|
||
|
color.White, color.White },
|
||
|
Width: tomo.I(2),
|
||
|
})
|
||
|
|
||
|
window.SetRoot(box)
|
||
|
window.OnClose(tomo.Stop)
|
||
|
window.SetVisible(true)
|
||
|
}
|
||
|
|
||
|
func coolTexture () image.Image {
|
||
|
// this picture IS COOL because i spent AN HOUR on it when i could have
|
||
|
// been FIXING BUGS!
|
||
|
speedX := 0.015
|
||
|
speedY := 0.035
|
||
|
bitmap := image.NewRGBA (image.Rect(0, 0, 200, 200))
|
||
|
for y := bitmap.Bounds().Min.Y; y < bitmap.Bounds().Max.Y; y++ {
|
||
|
for x := bitmap.Bounds().Min.X; x < bitmap.Bounds().Max.X; x++ {
|
||
|
value := ((
|
||
|
math.Sin(float64(y) * speedY) +
|
||
|
math.Cos(float64(x) * speedX)) + 2) / 4
|
||
|
value *= 0.7
|
||
|
|
||
|
r := value * 0.7 + 0.3
|
||
|
g := math.Sin(value * 7) * 0.7
|
||
|
b := (1 - value) * 0.7
|
||
|
|
||
|
noise := math.Mod(rand.Float64(), 1)
|
||
|
noise = math.Pow(noise, 2) + noise * 0.5
|
||
|
noise *= 0.05
|
||
|
|
||
|
channel := func (f float64) uint8 {
|
||
|
contrast := 1.4
|
||
|
f = f * (contrast) - ((contrast - 1) / 2)
|
||
|
|
||
|
if f < 0 { f = 0 }
|
||
|
if f > 1 { f = 1 }
|
||
|
|
||
|
return uint8(f * 255)
|
||
|
}
|
||
|
|
||
|
bitmap.Set(x, y, color.RGBA {
|
||
|
R: channel(r + noise),
|
||
|
G: channel(g + noise),
|
||
|
B: channel(b + noise),
|
||
|
A: 255,
|
||
|
})
|
||
|
}}
|
||
|
return bitmap
|
||
|
}
|