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")) }