themes and styles
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
package world
|
||||
|
||||
import (
|
||||
"image"
|
||||
"image/color"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
type bgScaleTheme struct {
|
||||
img image.Image
|
||||
scaleMode BackgroundScaleMode
|
||||
}
|
||||
|
||||
func (t bgScaleTheme) ID() string { return "bgscale" }
|
||||
func (t bgScaleTheme) Name() string { return "bgscale" }
|
||||
|
||||
func (t bgScaleTheme) BackgroundColor() color.Color { return color.RGBA{A: 255} }
|
||||
func (t bgScaleTheme) BackgroundImage() image.Image { return t.img }
|
||||
|
||||
func (t bgScaleTheme) BackgroundTileMode() BackgroundTileMode { return BackgroundTileNone }
|
||||
func (t bgScaleTheme) BackgroundScaleMode() BackgroundScaleMode { return t.scaleMode }
|
||||
func (t bgScaleTheme) BackgroundAnchorMode() BackgroundAnchorMode { return BackgroundAnchorViewport }
|
||||
|
||||
func (t bgScaleTheme) PointStyle() Style {
|
||||
return Style{FillColor: color.RGBA{A: 255}, PointRadiusPx: 2}
|
||||
}
|
||||
func (t bgScaleTheme) LineStyle() Style {
|
||||
return Style{StrokeColor: color.RGBA{A: 255}, StrokeWidthPx: 1}
|
||||
}
|
||||
func (t bgScaleTheme) CircleStyle() Style {
|
||||
return Style{FillColor: color.RGBA{A: 255}, StrokeColor: color.RGBA{A: 255}, StrokeWidthPx: 1}
|
||||
}
|
||||
|
||||
func (t bgScaleTheme) PointClassOverride(PointClassID) (StyleOverride, bool) {
|
||||
return StyleOverride{}, false
|
||||
}
|
||||
func (t bgScaleTheme) LineClassOverride(LineClassID) (StyleOverride, bool) {
|
||||
return StyleOverride{}, false
|
||||
}
|
||||
func (t bgScaleTheme) CircleClassOverride(CircleClassID) (StyleOverride, bool) {
|
||||
return StyleOverride{}, false
|
||||
}
|
||||
|
||||
func TestRender_BackgroundScaleNone_UsesDrawImage(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
w := NewWorld(10, 10)
|
||||
w.resetGrid(2 * SCALE)
|
||||
|
||||
img := image.NewRGBA(image.Rect(0, 0, 4, 4))
|
||||
w.SetTheme(bgScaleTheme{img: img, scaleMode: BackgroundScaleNone})
|
||||
|
||||
params := RenderParams{
|
||||
ViewportWidthPx: 10,
|
||||
ViewportHeightPx: 10,
|
||||
MarginXPx: 2,
|
||||
MarginYPx: 2,
|
||||
CameraXWorldFp: 5 * SCALE,
|
||||
CameraYWorldFp: 5 * SCALE,
|
||||
CameraZoom: 1.0,
|
||||
}
|
||||
|
||||
d := &fakePrimitiveDrawer{}
|
||||
require.NoError(t, w.Render(d, params))
|
||||
|
||||
require.NotEmpty(t, d.CommandsByName("DrawImage"))
|
||||
require.Empty(t, d.CommandsByName("DrawImageScaled"))
|
||||
}
|
||||
|
||||
func TestRender_BackgroundScaleFit_UsesDrawImageScaled(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
w := NewWorld(10, 10)
|
||||
w.resetGrid(2 * SCALE)
|
||||
|
||||
img := image.NewRGBA(image.Rect(0, 0, 4, 4))
|
||||
w.SetTheme(bgScaleTheme{img: img, scaleMode: BackgroundScaleFit})
|
||||
|
||||
params := RenderParams{
|
||||
ViewportWidthPx: 10,
|
||||
ViewportHeightPx: 10,
|
||||
MarginXPx: 2,
|
||||
MarginYPx: 2,
|
||||
CameraXWorldFp: 5 * SCALE,
|
||||
CameraYWorldFp: 5 * SCALE,
|
||||
CameraZoom: 1.0,
|
||||
}
|
||||
|
||||
d := &fakePrimitiveDrawer{}
|
||||
require.NoError(t, w.Render(d, params))
|
||||
|
||||
require.NotEmpty(t, d.CommandsByName("DrawImageScaled"))
|
||||
}
|
||||
Reference in New Issue
Block a user