package world import ( "image" "image/color" "testing" "github.com/stretchr/testify/require" ) type bgOffsetTheme struct { img image.Image scaleMode BackgroundScaleMode } func (t bgOffsetTheme) ID() string { return "bgscale" } func (t bgOffsetTheme) Name() string { return "bgscale" } func (t bgOffsetTheme) BackgroundColor() color.Color { return color.RGBA{A: 255} } func (t bgOffsetTheme) BackgroundImage() image.Image { return t.img } func (t bgOffsetTheme) BackgroundTileMode() BackgroundTileMode { return BackgroundTileNone } func (t bgOffsetTheme) BackgroundScaleMode() BackgroundScaleMode { return t.scaleMode } func (t bgOffsetTheme) BackgroundAnchorMode() BackgroundAnchorMode { return BackgroundAnchorViewport } func (t bgOffsetTheme) PointStyle() Style { return Style{FillColor: color.RGBA{A: 255}, PointRadiusPx: 2} } func (t bgOffsetTheme) LineStyle() Style { return Style{StrokeColor: color.RGBA{A: 255}, StrokeWidthPx: 1} } func (t bgOffsetTheme) CircleStyle() Style { return Style{FillColor: color.RGBA{A: 255}, StrokeColor: color.RGBA{A: 255}, StrokeWidthPx: 1} } func (t bgOffsetTheme) PointClassOverride(PointClassID) (StyleOverride, bool) { return StyleOverride{}, false } func (t bgOffsetTheme) LineClassOverride(LineClassID) (StyleOverride, bool) { return StyleOverride{}, false } func (t bgOffsetTheme) CircleClassOverride(CircleClassID) (StyleOverride, bool) { return StyleOverride{}, false } func TestRender_BackgroundScaleNone_UsesOffsetDrawImage(t *testing.T) { t.Parallel() w := NewWorld(10, 10) w.resetGrid(2 * SCALE) img := image.NewRGBA(image.Rect(0, 0, 4, 4)) w.SetTheme(bgOffsetTheme{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_UsesDrawOffsetImageScaled(t *testing.T) { t.Parallel() w := NewWorld(10, 10) w.resetGrid(2 * SCALE) img := image.NewRGBA(image.Rect(0, 0, 4, 4)) w.SetTheme(bgOffsetTheme{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")) }