From 6651de58ad64db64542ebc402695bae89b64249f Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:06:08 +0200 Subject: [PATCH 01/28] go: Bump versions to current supported versions 1.25.x and 1.26.x --- .github/workflows/test.yml | 2 +- go.mod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3e404c7..108a397 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: test: strategy: matrix: - go-version: ['1.24.x', '1.23.x'] + go-version: ['1.26.x', '1.25.x'] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: diff --git a/go.mod b/go.mod index 2a09a17..cfa16d3 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ module github.com/peterhellberg/gfx -go 1.17 +go 1.25 From 4fb35cd3e2131c3f62244584c1d688d69ecba92e Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:12:23 +0200 Subject: [PATCH 02/28] rand: Replaced the deprecated rand.Seed call with a package-level *rand.Rand --- rand.go | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/rand.go b/rand.go index 26c83b8..1351e1f 100644 --- a/rand.go +++ b/rand.go @@ -1,24 +1,37 @@ -//go:build !tinygo -// +build !tinygo - package gfx -import "math/rand" +import ( + "math/rand" + "sync" +) + +var ( + randMu sync.Mutex + randGen = rand.New(rand.NewSource(1)) +) -// RandSeed uses the provided seed value to initialize the default Source to a -// deterministic state. If Seed is not called, the generator behaves as -// if seeded by Seed(1). Seed values that have the same remainder when -// divided by 2^31-1 generate the same pseudo-random sequence. -// RandSeed, unlike the Rand.Seed method, is safe for concurrent use. +// RandSeed uses the provided seed value to initialize the gfx random number +// generator to a deterministic state. If RandSeed is not called, the +// generator behaves as if seeded by RandSeed(1). +// +// RandSeed is safe for concurrent use. func RandSeed(seed int64) { - rand.Seed(seed) + randMu.Lock() + randGen.Seed(seed) + randMu.Unlock() } -// RandIntn returns, as an int, a non-negative pseudo-random number in [0,n) -// from the default Source. +// RandIntn returns, as an int, a non-negative pseudo-random number in [0,n). // It panics if n <= 0. -func RandIntn(n int) int { return rand.Intn(n) } +func RandIntn(n int) int { + randMu.Lock() + defer randMu.Unlock() + return randGen.Intn(n) +} -// RandFloat64 returns, as a float64, a pseudo-random number in [0.0,1.0) -// from the default Source. -func RandFloat64() float64 { return rand.Float64() } +// RandFloat64 returns, as a float64, a pseudo-random number in [0.0,1.0). +func RandFloat64() float64 { + randMu.Lock() + defer randMu.Unlock() + return randGen.Float64() +} From ef234114be02d517605dcd8e21b20594a0afcd3a Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:12:50 +0200 Subject: [PATCH 03/28] palette: Palette.Random now calls gfx.RandIntn instead of rand.Intn --- palette.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/palette.go b/palette.go index 45f07ee..37a0445 100644 --- a/palette.go +++ b/palette.go @@ -5,7 +5,6 @@ import ( "image/color" "image/draw" "math" - "math/rand" "sort" ) @@ -33,7 +32,7 @@ func (p Palette) Sort(less func(i, j int) bool) { // Random color from the palette. func (p Palette) Random() color.NRGBA { - return p[rand.Intn(p.Len())] + return p[RandIntn(p.Len())] } // Tile returns a new image based on the input image, but with colors from the palette. From f91ee3a0e4e42327ec79df244705d6563d7cfd6a Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:17:55 +0200 Subject: [PATCH 04/28] draw: Replaced the m.X != w / m.Y != h termination with r.Min.X < r.Max.X / r.Min.Y < r.Max.Y in both DrawPalettedImage and DrawPalettedLayer --- draw.go | 12 ++++-------- draw_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/draw.go b/draw.go index dd94d8e..da789ff 100644 --- a/draw.go +++ b/draw.go @@ -33,10 +33,8 @@ func DrawOver(dst draw.Image, r image.Rectangle, src image.Image, sp image.Point // DrawPalettedImage draws a PalettedImage over a PalettedDrawImage. func DrawPalettedImage(dst PalettedDrawImage, r image.Rectangle, src PalettedImage) { - w, h, m := r.Dx(), r.Dy(), r.Min - - for x := m.X; x != w; x++ { - for y := m.Y; y != h; y++ { + for x := r.Min.X; x < r.Max.X; x++ { + for y := r.Min.Y; y < r.Max.Y; y++ { if src.AlphaAt(x, y) > 0 { dst.SetColorIndex(x, y, src.ColorIndexAt(x, y)) } @@ -47,10 +45,8 @@ func DrawPalettedImage(dst PalettedDrawImage, r image.Rectangle, src PalettedIma // DrawPalettedLayer draws a *Layer over a *Paletted. // (slightly faster than using the generic DrawPalettedImage) func DrawPalettedLayer(dst *Paletted, r image.Rectangle, src *Layer) { - w, h, m := r.Dx(), r.Dy(), r.Min - - for x := m.X; x != w; x++ { - for y := m.Y; y != h; y++ { + for x := r.Min.X; x < r.Max.X; x++ { + for y := r.Min.Y; y < r.Max.Y; y++ { if src.AlphaAt(x, y) > 0 { dst.SetColorIndex(x, y, src.ColorIndexAt(x, y)) } diff --git a/draw_test.go b/draw_test.go index 4122c0b..e896e7a 100644 --- a/draw_test.go +++ b/draw_test.go @@ -36,6 +36,54 @@ func TestDrawLayerOverPaletted(t *testing.T) { DrawPalettedLayer(dst, dst.Bounds(), src) } +func TestDrawPalettedImageNonOriginRect(t *testing.T) { + src := NewPaletted(8, 16, PaletteEN4) + for i := range src.Pix { + src.Pix[i] = 1 + } + + dst := NewPaletted(8, 16, PaletteEN4) + r := IR(2, 4, 6, 10) + + DrawPalettedImage(dst, r, src) + + for y := 0; y < 16; y++ { + for x := 0; x < 8; x++ { + inside := x >= r.Min.X && x < r.Max.X && y >= r.Min.Y && y < r.Max.Y + got := dst.ColorIndexAt(x, y) + want := uint8(0) + if inside { + want = 1 + } + if got != want { + t.Fatalf("dst.ColorIndexAt(%d, %d) = %d, want %d (inside=%v)", x, y, got, want, inside) + } + } + } +} + +func TestDrawPalettedLayerNonOriginRect(t *testing.T) { + src := newTestLayer() + dst := NewPaletted(16, 12, PaletteEN4) + r := IR(4, 4, 12, 8) + + DrawPalettedLayer(dst, r, src) + + for y := 0; y < 12; y++ { + for x := 0; x < 16; x++ { + inside := x >= r.Min.X && x < r.Max.X && y >= r.Min.Y && y < r.Max.Y + got := dst.ColorIndexAt(x, y) + if inside { + if want := src.ColorIndexAt(x, y); got != want { + t.Fatalf("dst.ColorIndexAt(%d, %d) = %d, want %d (from src)", x, y, got, want) + } + } else if got != 0 { + t.Fatalf("dst.ColorIndexAt(%d, %d) = %d, want 0 (outside r)", x, y, got) + } + } + } +} + func TestDrawLine(t *testing.T) { dst := NewImage(32, 32) From 95d898239cac0ec75c9f2cf3890b9cc27c680611 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:20:37 +0200 Subject: [PATCH 05/28] =?UTF-8?q?draw:=20Renamed=20DrawCicleFast=20?= =?UTF-8?q?=E2=86=92=20DrawCircleFast?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- draw.go | 4 ++-- draw_test.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/draw.go b/draw.go index da789ff..c48bbf7 100644 --- a/draw.go +++ b/draw.go @@ -119,8 +119,8 @@ func DrawCircleFilled(dst draw.Image, u Vec, radius float64, c color.Color) { }) } -// DrawCicleFast draws a (crude) filled circle. -func DrawCicleFast(dst draw.Image, u Vec, radius float64, c color.Color) { +// DrawCircleFast draws a (crude) filled circle. +func DrawCircleFast(dst draw.Image, u Vec, radius float64, c color.Color) { ir := int(radius) r2 := ir * ir pt := u.Pt() diff --git a/draw_test.go b/draw_test.go index e896e7a..8dbd23d 100644 --- a/draw_test.go +++ b/draw_test.go @@ -133,10 +133,10 @@ func TestDrawFilledCircle(t *testing.T) { DrawCircleFilled(dst, V(16, 16), 8, ColorMagenta) } -func TestDrawFastFilledCircle(t *testing.T) { +func TestDrawCircleFast(t *testing.T) { dst := NewImage(32, 32) - DrawCicleFast(dst, V(16, 16), 8, ColorMagenta) + DrawCircleFast(dst, V(16, 16), 8, ColorMagenta) } func TestDrawPointCircle(t *testing.T) { From ac9042ec3366a62c7004c4b2244d3fd0978e86bf Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:29:21 +0200 Subject: [PATCH 06/28] gfx: Replace interface{} with any --- errors.go | 2 +- file.go | 4 ++-- json.go | 2 +- log.go | 10 +++++----- sort.go | 2 +- vertex.go | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/errors.go b/errors.go index 665c114..40089e6 100644 --- a/errors.go +++ b/errors.go @@ -12,6 +12,6 @@ func (e Error) Error() string { } // Errorf constructs a formatted error. -func Errorf(format string, a ...interface{}) error { +func Errorf(format string, a ...any) error { return Error(Sprintf(format, a...)) } diff --git a/file.go b/file.go index 7c22150..7f0cdc5 100644 --- a/file.go +++ b/file.go @@ -65,7 +65,7 @@ func ReadFile(fn string, rf ReadFunc) error { } // ReadJSON opens and decodes a JSON file. -func ReadJSON(fn string, v interface{}) error { +func ReadJSON(fn string, v any) error { return ReadFile(fn, DecodeJSONFunc(v)) } @@ -73,7 +73,7 @@ func ReadJSON(fn string, v interface{}) error { type ReadFunc func(r io.Reader) error // DecodeJSONFunc returns a function that takes a reader, and decodes into the given value. -func DecodeJSONFunc(v interface{}) ReadFunc { +func DecodeJSONFunc(v any) ReadFunc { return func(r io.Reader) error { return json.NewDecoder(r).Decode(v) } diff --git a/json.go b/json.go index 82ebdd7..afb7573 100644 --- a/json.go +++ b/json.go @@ -27,6 +27,6 @@ func NewJSONEncoder(w io.Writer, options ...func(*json.Encoder)) *json.Encoder { } // EncodeJSON creates a new JSON encoder and encodes the provided value. -func EncodeJSON(w io.Writer, v interface{}, options ...func(*json.Encoder)) error { +func EncodeJSON(w io.Writer, v any, options ...func(*json.Encoder)) error { return NewJSONEncoder(w, options...).Encode(v) } diff --git a/log.go b/log.go index 26359cc..a1d5d29 100644 --- a/log.go +++ b/log.go @@ -13,29 +13,29 @@ var ( ) // Log to standard output. -func Log(format string, a ...interface{}) { +func Log(format string, a ...any) { fmt.Printf(format+"\n", a...) } // Fatal prints to os.Stderr, followed by a call to os.Exit(1). -func Fatal(v ...interface{}) { +func Fatal(v ...any) { fmt.Fprintln(Stderr, v...) os.Exit(1) } // Dump all of the arguments to standard output. -func Dump(a ...interface{}) { +func Dump(a ...any) { for _, v := range a { Log("%+v", v) } } // Printf formats according to a format specifier and writes to standard output. -func Printf(format string, a ...interface{}) (n int, err error) { +func Printf(format string, a ...any) (n int, err error) { return fmt.Printf(format, a...) } // Sprintf formats according to a format specifier and returns the resulting string. -func Sprintf(format string, a ...interface{}) string { +func Sprintf(format string, a ...any) string { return fmt.Sprintf(format, a...) } diff --git a/sort.go b/sort.go index edf23fd..6dd74c9 100644 --- a/sort.go +++ b/sort.go @@ -6,6 +6,6 @@ package gfx import "sort" // SortSlice sorts the provided slice given the provided less function. -func SortSlice(slice interface{}, less func(i, j int) bool) { +func SortSlice(slice any, less func(i, j int) bool) { sort.Slice(slice, less) } diff --git a/vertex.go b/vertex.go index 143fa87..14b089f 100644 --- a/vertex.go +++ b/vertex.go @@ -11,7 +11,7 @@ type Vertex struct { } // NewVertex returns a new vertex with the given position. -func NewVertex(pos Vec, args ...interface{}) Vertex { +func NewVertex(pos Vec, args ...any) Vertex { vx := Vertex{Position: pos} for _, a := range args { @@ -29,6 +29,6 @@ func NewVertex(pos Vec, args ...interface{}) Vertex { } // Vx returns a new vertex with the given coordinates. -func Vx(pos Vec, args ...interface{}) Vertex { +func Vx(pos Vec, args ...any) Vertex { return NewVertex(pos, args...) } From 97f4be0fd38b71f4ce01a0ecbd269d8401fd90af Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:31:52 +0200 Subject: [PATCH 07/28] draw_int: Removed bare return statements in DrawIntRectangle and DrawIntFilledRectangle --- draw_int.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/draw_int.go b/draw_int.go index b30a1bf..69d5068 100644 --- a/draw_int.go +++ b/draw_int.go @@ -84,8 +84,6 @@ func DrawIntRectangle(dst draw.Image, x, y, w, h int, c color.Color) { DrawIntLine(dst, x, y, x, y+h-1, c) DrawIntLine(dst, x+w-1, y, x+w-1, y+h-1, c) DrawIntLine(dst, x, y+h-1, x+w-1, y+h-1, c) - - return } // DrawIntFilledRectangle draws a filled rectangle given a point, width and height @@ -97,8 +95,6 @@ func DrawIntFilledRectangle(dst draw.Image, x, y, w, h int, c color.Color) { for i := x; i < x+w; i++ { DrawIntLine(dst, i, y, i, y+h-1, c) } - - return } // DrawIntCircle draws a circle given a point and radius From 9ee3ca77373346c28caf191449a173a9fb2dd577 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:35:22 +0200 Subject: [PATCH 08/28] image: Replaced the per-pixel DrawColorOver path with an inline premultiplied-alpha blend --- image.go | 23 +++++++++++++++++++---- image_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/image.go b/image.go index 565a623..4411ccd 100644 --- a/image.go +++ b/image.go @@ -60,15 +60,30 @@ func IR(x0, y0, x1, y1 int) image.Rectangle { } // Mix the current pixel color at x and y with the given color. +// +// The blend is "source over destination" using premultiplied alpha, +// matching the result of draw.Draw with draw.Over for a single pixel +// but without allocating an image.Uniform per call. func Mix(m draw.Image, x, y int, c color.Color) { - _, _, _, a := c.RGBA() + sr, sg, sb, sa := c.RGBA() - switch a { + switch sa { case 0xFFFF: m.Set(x, y, c) - default: - DrawColorOver(m, IR(x, y, x+1, y+1), c) + return + case 0: + return } + + dr, dg, db, da := m.At(x, y).RGBA() + a := 0xFFFF - sa + + m.Set(x, y, color.RGBA64{ + R: uint16(sr + dr*a/0xFFFF), + G: uint16(sg + dg*a/0xFFFF), + B: uint16(sb + db*a/0xFFFF), + A: uint16(sa + da*a/0xFFFF), + }) } // MixPoint the current pixel color at the image.Point with the given color. diff --git a/image_test.go b/image_test.go index 3df55d2..2d35584 100644 --- a/image_test.go +++ b/image_test.go @@ -2,6 +2,8 @@ package gfx import ( "image" + "image/color" + "image/draw" "testing" ) @@ -23,3 +25,34 @@ func TestIR(t *testing.T) { t.Fatalf("IR(%d, %d, %d, %d) = %v, want %v", x0, y0, x1, y1, got, want) } } + +// TestMixMatchesDrawOver verifies that Mix produces the same pixel as +// draw.Draw with draw.Over for a range of source/destination alpha +// combinations, so the inlined blend stays bit-equivalent to the stdlib. +func TestMixMatchesDrawOver(t *testing.T) { + cases := []color.RGBA{ + {255, 0, 0, 255}, + {0, 255, 0, 128}, + {0, 0, 255, 64}, + {200, 100, 50, 200}, + {12, 34, 56, 1}, + {0, 0, 0, 0}, + } + + for _, dstColor := range cases { + for _, srcColor := range cases { + got := image.NewRGBA(image.Rect(0, 0, 1, 1)) + got.SetRGBA(0, 0, dstColor) + Mix(got, 0, 0, srcColor) + + want := image.NewRGBA(image.Rect(0, 0, 1, 1)) + want.SetRGBA(0, 0, dstColor) + draw.Draw(want, want.Bounds(), image.NewUniform(srcColor), image.Point{}, draw.Over) + + if got.RGBAAt(0, 0) != want.RGBAAt(0, 0) { + t.Fatalf("Mix(dst=%v, src=%v) = %v, want %v", + dstColor, srcColor, got.RGBAAt(0, 0), want.RGBAAt(0, 0)) + } + } + } +} From edd364226b161d1a798d461b957ac999a1cdd8be Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:44:20 +0200 Subject: [PATCH 09/28] gfx: Moved HTTP related code into new gfxhttp package --- README.md | 13 ++- geo.go | 53 ---------- gfxhttp/client.go | 136 +++++++++++++++++++++++++ http_test.go => gfxhttp/client_test.go | 20 +++- gfxhttp/tileserver.go | 64 ++++++++++++ http.go | 68 ------------- 6 files changed, 229 insertions(+), 125 deletions(-) create mode 100644 gfxhttp/client.go rename http_test.go => gfxhttp/client_test.go (78%) create mode 100644 gfxhttp/tileserver.go delete mode 100644 http.go diff --git a/README.md b/README.md index ff39acf..047f6ea 100644 --- a/README.md +++ b/README.md @@ -411,7 +411,18 @@ The `gfx.Error` type is a string that implements the `error` interface. ## HTTP -You can use `gfx.GetPNG` to download and decode a PNG given an URL. +HTTP helpers live in the `gfxhttp` subpackage so that importers of `gfx` +who do not need them are not forced to pull in `net/http` (and its +transitive `crypto/tls`, `crypto/x509`, `net`, etc.). + +```go +import "github.com/peterhellberg/gfx/gfxhttp" + +img, err := gfxhttp.GetPNG("https://example.com/sprite.png") +``` + +`gfxhttp.NewClient` accepts options like `WithUserAgent`, `WithTimeout` and +`WithHTTPClient`. Map tile servers are available through `gfxhttp.TileServer`. ## Log diff --git a/geo.go b/geo.go index 6d90080..88a9640 100644 --- a/geo.go +++ b/geo.go @@ -196,14 +196,8 @@ func (gt GeoTile) NW() GeoTile { return gt } -// GetImage for the tile. -func (gt GeoTile) GetImage(format string) (image.Image, error) { - return GetImage(gt.Rawurl(format)) -} - // Draw the tile on dst. func (gt GeoTile) Draw(dst draw.Image, gp GeoPoint, src image.Image) { - Draw(dst, gt.Bounds(dst, gp, src.Bounds().Dx()), src) } @@ -213,50 +207,3 @@ func (gt GeoTile) Bounds(dst image.Image, gp GeoPoint, tileSize int) image.Recta return dst.Bounds().Add(c.Pt()).Sub(gp.In(gt, tileSize).Pt()) } - -// GeoTileServer represents a tile server. -type GeoTileServer struct { - Format string -} - -// GTS creates a GeoTileServer. -func GTS(format string) GeoTileServer { - return GeoTileServer{Format: format} -} - -// GetImage for the given GeoTile from the tile server. -func (gts GeoTileServer) GetImage(gt GeoTile) (image.Image, error) { - return gt.GetImage(gts.Format) -} - -// DrawTileAndNeighbors on dst. -func (gts GeoTileServer) DrawTileAndNeighbors(dst draw.Image, gt GeoTile, gp GeoPoint) error { - if err := gts.DrawTile(dst, gt, gp); err != nil { - return nil - } - - return gts.DrawNeighbors(dst, gt, gp) -} - -// DrawTile on dst. -func (gts GeoTileServer) DrawTile(dst draw.Image, gt GeoTile, gp GeoPoint) error { - src, err := gts.GetImage(gt) - if err != nil { - return err - } - - gt.Draw(dst, gp, src) - - return nil -} - -// DrawNeighbors on dst. -func (gts GeoTileServer) DrawNeighbors(dst draw.Image, gt GeoTile, gp GeoPoint) error { - for _, n := range gt.Neighbors() { - if err := gts.DrawTile(dst, n, gp); err != nil { - return err - } - } - - return nil -} diff --git a/gfxhttp/client.go b/gfxhttp/client.go new file mode 100644 index 0000000..07f77ce --- /dev/null +++ b/gfxhttp/client.go @@ -0,0 +1,136 @@ +// Package gfxhttp provides HTTP helpers for fetching images, tilesets, +// and map tiles using the gfx package. +// +// It lives in a subpackage so that importers of github.com/peterhellberg/gfx +// who do not need HTTP support are not forced to pull in net/http and its +// transitive dependencies (crypto/tls, crypto/x509, net, etc.). +package gfxhttp + +import ( + "image" + "net/http" + "time" + + "github.com/peterhellberg/gfx" +) + +// DefaultTimeout is the timeout used by clients created with NewClient +// when no explicit timeout has been configured. +const DefaultTimeout = 30 * time.Second + +// DefaultUserAgent is the User-Agent header sent by clients created with +// NewClient when no explicit user agent has been configured. +const DefaultUserAgent = "gfx.gfxhttp.Client" + +// Client performs HTTP requests for the gfx package. +type Client struct { + httpClient *http.Client + userAgent string +} + +// Option configures a Client. +type Option func(*Client) + +// WithTimeout sets the request timeout on the underlying *http.Client. +func WithTimeout(d time.Duration) Option { + return func(c *Client) { + c.httpClient.Timeout = d + } +} + +// WithUserAgent sets the User-Agent header sent on each request. +func WithUserAgent(ua string) Option { + return func(c *Client) { + c.userAgent = ua + } +} + +// WithHTTPClient replaces the underlying *http.Client. Use this to share +// a client across packages, install custom transports, etc. +func WithHTTPClient(hc *http.Client) Option { + return func(c *Client) { + if hc != nil { + c.httpClient = hc + } + } +} + +// NewClient creates a new Client with the given options applied. +// A fresh *http.Client with DefaultTimeout is used unless WithHTTPClient +// is provided. +func NewClient(opts ...Option) *Client { + c := &Client{ + httpClient: &http.Client{Timeout: DefaultTimeout}, + userAgent: DefaultUserAgent, + } + + for _, opt := range opts { + opt(c) + } + + return c +} + +// Default is the package-level Client used by the Get, GetPNG, GetImage +// and GetTileset top-level functions. +var Default = NewClient() + +// Get performs an HTTP GET request. +func (c *Client) Get(rawurl string) (*http.Response, error) { + req, err := http.NewRequest(http.MethodGet, rawurl, nil) + if err != nil { + return nil, err + } + + req.Header.Set("User-Agent", c.userAgent) + + return c.httpClient.Do(req) +} + +// GetPNG retrieves and decodes a remote PNG. +func (c *Client) GetPNG(rawurl string) (image.Image, error) { + resp, err := c.Get(rawurl) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + return gfx.DecodePNG(resp.Body) +} + +// GetImage retrieves and decodes a remote image. The image format +// (GIF / JPEG / PNG) is auto-detected via image.Decode; the caller is +// responsible for importing the relevant decoders. +func (c *Client) GetImage(rawurl string) (image.Image, error) { + resp, err := c.Get(rawurl) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + return gfx.DecodeImage(resp.Body) +} + +// GetTileset retrieves a remote PNG and turns it into a *gfx.Tileset. +func (c *Client) GetTileset(p gfx.Palette, tileSize image.Point, rawurl string) (*gfx.Tileset, error) { + m, err := c.GetPNG(rawurl) + if err != nil { + return nil, err + } + + return gfx.NewTilesetFromImage(p, tileSize, m), nil +} + +// Get performs an HTTP GET request using the Default client. +func Get(rawurl string) (*http.Response, error) { return Default.Get(rawurl) } + +// GetPNG retrieves and decodes a remote PNG using the Default client. +func GetPNG(rawurl string) (image.Image, error) { return Default.GetPNG(rawurl) } + +// GetImage retrieves and decodes a remote image using the Default client. +func GetImage(rawurl string) (image.Image, error) { return Default.GetImage(rawurl) } + +// GetTileset retrieves a remote tileset using the Default client. +func GetTileset(p gfx.Palette, tileSize image.Point, rawurl string) (*gfx.Tileset, error) { + return Default.GetTileset(p, tileSize, rawurl) +} diff --git a/http_test.go b/gfxhttp/client_test.go similarity index 78% rename from http_test.go rename to gfxhttp/client_test.go index 78e9596..11e1ffe 100644 --- a/http_test.go +++ b/gfxhttp/client_test.go @@ -1,10 +1,13 @@ -package gfx +package gfxhttp import ( "image" "net/http" "net/http/httptest" "testing" + "time" + + "github.com/peterhellberg/gfx" ) func TestGetPNG(t *testing.T) { @@ -18,7 +21,7 @@ func TestGetPNG(t *testing.T) { p := m.(image.PalettedImage) - if got, want := p.Bounds(), IR(0, 0, 6, 6); !got.Eq(want) { + if got, want := p.Bounds(), gfx.IR(0, 0, 6, 6); !got.Eq(want) { t.Fatalf("p.Bounds() = %v, want %v", got, want) } @@ -40,7 +43,7 @@ func TestGetTileset(t *testing.T) { ts := testServer(palettedPNGHandler) defer ts.Close() - tileset, err := GetTileset(PaletteAmmo8, Pt(3, 3), ts.URL) + tileset, err := GetTileset(gfx.PaletteAmmo8, gfx.Pt(3, 3), ts.URL) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -50,6 +53,17 @@ func TestGetTileset(t *testing.T) { } } +func TestNewClientOptions(t *testing.T) { + c := NewClient(WithUserAgent("ua"), WithTimeout(0)) + + if got, want := c.userAgent, "ua"; got != want { + t.Fatalf("userAgent = %q, want %q", got, want) + } + if got, want := c.httpClient.Timeout, time.Duration(0); got != want { + t.Fatalf("Timeout = %v, want %v", got, want) + } +} + func testServer(hf http.HandlerFunc) *httptest.Server { return httptest.NewServer(hf) } diff --git a/gfxhttp/tileserver.go b/gfxhttp/tileserver.go new file mode 100644 index 0000000..70a8e7c --- /dev/null +++ b/gfxhttp/tileserver.go @@ -0,0 +1,64 @@ +package gfxhttp + +import ( + "image" + "image/draw" + + "github.com/peterhellberg/gfx" +) + +// TileServer represents a map tile server. Format is a Sprintf format +// string that takes zoom, x, y in that order (matching gfx.GeoTile.Rawurl). +type TileServer struct { + Format string + Client *Client +} + +// NewTileServer creates a TileServer that uses the Default client. +func NewTileServer(format string) *TileServer { + return &TileServer{Format: format, Client: Default} +} + +// GetImage fetches the image for the given GeoTile. +func (ts *TileServer) GetImage(gt gfx.GeoTile) (image.Image, error) { + return ts.Client.GetImage(gt.Rawurl(ts.Format)) +} + +// TileImage fetches the image for the given GeoTile using the Default client. +func TileImage(gt gfx.GeoTile, format string) (image.Image, error) { + return Default.GetImage(gt.Rawurl(format)) +} + +// DrawTile fetches and draws the given GeoTile on dst. +func (ts *TileServer) DrawTile(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { + src, err := ts.GetImage(gt) + if err != nil { + return err + } + + gt.Draw(dst, gp, src) + + return nil +} + +// DrawNeighbors fetches and draws the 8 neighbors of the given GeoTile. +func (ts *TileServer) DrawNeighbors(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { + for _, n := range gt.Neighbors() { + if err := ts.DrawTile(dst, n, gp); err != nil { + return err + } + } + + return nil +} + +// DrawTileAndNeighbors draws the given GeoTile and its 8 neighbors on dst. +// If drawing the central tile fails the neighbors are still drawn, matching +// the prior behavior of gfx.GeoTileServer. +func (ts *TileServer) DrawTileAndNeighbors(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { + if err := ts.DrawTile(dst, gt, gp); err != nil { + return nil + } + + return ts.DrawNeighbors(dst, gt, gp) +} diff --git a/http.go b/http.go deleted file mode 100644 index 82c5a02..0000000 --- a/http.go +++ /dev/null @@ -1,68 +0,0 @@ -//go:build !tinygo -// +build !tinygo - -package gfx - -import ( - "image" - "net/http" - "time" -) - -// HTTP is the HTTP client and user agent used by the gfx package. -type HTTP struct { - *http.Client - UserAgent string -} - -// HTTPClient is the default client used by Get/GetPNG/GetTileset, etc. -var HTTPClient = HTTP{ - Client: &http.Client{ - Timeout: 30 * time.Second, - }, - UserAgent: "gfx.HTTPClient", -} - -// Get performs a HTTP GET request using the DefaultClient. -func Get(rawurl string) (*http.Response, error) { - req, err := http.NewRequest(http.MethodGet, rawurl, nil) - if err != nil { - return nil, err - } - - req.Header.Set("User-Agent", HTTPClient.UserAgent) - - return HTTPClient.Do(req) -} - -// GetPNG retrieves a remote PNG using DefaultClient -func GetPNG(rawurl string) (image.Image, error) { - resp, err := Get(rawurl) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - return DecodePNG(resp.Body) -} - -// GetImage retrieves a remote image using DefaultClient -func GetImage(rawurl string) (image.Image, error) { - resp, err := Get(rawurl) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - return DecodeImage(resp.Body) -} - -// GetTileset retrieves a remote tileset using GetPNG. -func GetTileset(p Palette, tileSize image.Point, rawurl string) (*Tileset, error) { - m, err := GetPNG(rawurl) - if err != nil { - return nil, err - } - - return NewTilesetFromImage(p, tileSize, m), nil -} From 1cb418960c1aa33e8cd55d56cb8898b646192d7d Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 18:57:17 +0200 Subject: [PATCH 10/28] gfxhttp: Thread context.Context through all requests --- README.md | 5 +- gfxhttp/client.go | 94 +++++++++++++++++++++++++++------ gfxhttp/client_test.go | 114 ++++++++++++++++++++++++++++++++++++++++- gfxhttp/tileserver.go | 29 ++++++----- 4 files changed, 208 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index 047f6ea..00cb95e 100644 --- a/README.md +++ b/README.md @@ -418,11 +418,12 @@ transitive `crypto/tls`, `crypto/x509`, `net`, etc.). ```go import "github.com/peterhellberg/gfx/gfxhttp" -img, err := gfxhttp.GetPNG("https://example.com/sprite.png") +img, err := gfxhttp.GetPNG(ctx, "https://example.com/sprite.png") ``` `gfxhttp.NewClient` accepts options like `WithUserAgent`, `WithTimeout` and -`WithHTTPClient`. Map tile servers are available through `gfxhttp.TileServer`. +`WithHTTPClient`. Non-2xx responses are returned as `*gfxhttp.StatusError`. +Map tile servers are available through `gfxhttp.TileServer`. ## Log diff --git a/gfxhttp/client.go b/gfxhttp/client.go index 07f77ce..e8a068d 100644 --- a/gfxhttp/client.go +++ b/gfxhttp/client.go @@ -7,7 +7,10 @@ package gfxhttp import ( + "context" + "fmt" "image" + "maps" "net/http" "time" @@ -22,10 +25,29 @@ const DefaultTimeout = 30 * time.Second // NewClient when no explicit user agent has been configured. const DefaultUserAgent = "gfx.gfxhttp.Client" +// StatusError is returned by GetPNG, GetImage and GetTileset when the +// HTTP response has a non-2xx status code. It carries the requested URL +// along with the status line and status code so callers can branch on +// the failure mode. +type StatusError struct { + URL string + Status string + Code int +} + +func (e *StatusError) Error() string { + return fmt.Sprintf("gfxhttp: GET %s: %s", e.URL, e.Status) +} + // Client performs HTTP requests for the gfx package. +// +// A Client is safe for concurrent use after construction. Option funcs +// must not be applied to a Client that is already in use by another +// goroutine. type Client struct { httpClient *http.Client userAgent string + headers http.Header } // Option configures a Client. @@ -45,8 +67,9 @@ func WithUserAgent(ua string) Option { } } -// WithHTTPClient replaces the underlying *http.Client. Use this to share -// a client across packages, install custom transports, etc. +// WithHTTPClient replaces the underlying *http.Client. Passing a nil +// *http.Client is a no-op so that callers can compose options without +// having to nil-check beforehand. func WithHTTPClient(hc *http.Client) Option { return func(c *Client) { if hc != nil { @@ -55,6 +78,19 @@ func WithHTTPClient(hc *http.Client) Option { } } +// WithHeader adds a header that is sent on every request the Client +// makes. Repeated calls with the same key replace the previous value. +// User-Agent set via WithHeader is overridden by WithUserAgent (and by +// the default user agent if neither option is supplied). +func WithHeader(key, value string) Option { + return func(c *Client) { + if c.headers == nil { + c.headers = http.Header{} + } + c.headers.Set(key, value) + } +} + // NewClient creates a new Client with the given options applied. // A fresh *http.Client with DefaultTimeout is used unless WithHTTPClient // is provided. @@ -75,21 +111,25 @@ func NewClient(opts ...Option) *Client { // and GetTileset top-level functions. var Default = NewClient() -// Get performs an HTTP GET request. -func (c *Client) Get(rawurl string) (*http.Response, error) { - req, err := http.NewRequest(http.MethodGet, rawurl, nil) +// Get performs an HTTP GET request. The response status is not checked; +// callers are responsible for inspecting resp.StatusCode and closing +// resp.Body. The convenience methods GetPNG, GetImage and GetTileset +// do check the status and return a *StatusError on non-2xx responses. +func (c *Client) Get(ctx context.Context, rawurl string) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, rawurl, nil) if err != nil { return nil, err } + maps.Copy(req.Header, c.headers) req.Header.Set("User-Agent", c.userAgent) return c.httpClient.Do(req) } // GetPNG retrieves and decodes a remote PNG. -func (c *Client) GetPNG(rawurl string) (image.Image, error) { - resp, err := c.Get(rawurl) +func (c *Client) GetPNG(ctx context.Context, rawurl string) (image.Image, error) { + resp, err := c.get(ctx, rawurl) if err != nil { return nil, err } @@ -101,8 +141,8 @@ func (c *Client) GetPNG(rawurl string) (image.Image, error) { // GetImage retrieves and decodes a remote image. The image format // (GIF / JPEG / PNG) is auto-detected via image.Decode; the caller is // responsible for importing the relevant decoders. -func (c *Client) GetImage(rawurl string) (image.Image, error) { - resp, err := c.Get(rawurl) +func (c *Client) GetImage(ctx context.Context, rawurl string) (image.Image, error) { + resp, err := c.get(ctx, rawurl) if err != nil { return nil, err } @@ -112,8 +152,8 @@ func (c *Client) GetImage(rawurl string) (image.Image, error) { } // GetTileset retrieves a remote PNG and turns it into a *gfx.Tileset. -func (c *Client) GetTileset(p gfx.Palette, tileSize image.Point, rawurl string) (*gfx.Tileset, error) { - m, err := c.GetPNG(rawurl) +func (c *Client) GetTileset(ctx context.Context, p gfx.Palette, tileSize image.Point, rawurl string) (*gfx.Tileset, error) { + m, err := c.GetPNG(ctx, rawurl) if err != nil { return nil, err } @@ -121,16 +161,38 @@ func (c *Client) GetTileset(p gfx.Palette, tileSize image.Point, rawurl string) return gfx.NewTilesetFromImage(p, tileSize, m), nil } +// get performs Get and verifies that the response status is 2xx, +// closing the body and returning a *StatusError otherwise. +func (c *Client) get(ctx context.Context, rawurl string) (*http.Response, error) { + resp, err := c.Get(ctx, rawurl) + if err != nil { + return nil, err + } + + if resp.StatusCode/100 != 2 { + resp.Body.Close() + return nil, &StatusError{URL: rawurl, Status: resp.Status, Code: resp.StatusCode} + } + + return resp, nil +} + // Get performs an HTTP GET request using the Default client. -func Get(rawurl string) (*http.Response, error) { return Default.Get(rawurl) } +func Get(ctx context.Context, rawurl string) (*http.Response, error) { + return Default.Get(ctx, rawurl) +} // GetPNG retrieves and decodes a remote PNG using the Default client. -func GetPNG(rawurl string) (image.Image, error) { return Default.GetPNG(rawurl) } +func GetPNG(ctx context.Context, rawurl string) (image.Image, error) { + return Default.GetPNG(ctx, rawurl) +} // GetImage retrieves and decodes a remote image using the Default client. -func GetImage(rawurl string) (image.Image, error) { return Default.GetImage(rawurl) } +func GetImage(ctx context.Context, rawurl string) (image.Image, error) { + return Default.GetImage(ctx, rawurl) +} // GetTileset retrieves a remote tileset using the Default client. -func GetTileset(p gfx.Palette, tileSize image.Point, rawurl string) (*gfx.Tileset, error) { - return Default.GetTileset(p, tileSize, rawurl) +func GetTileset(ctx context.Context, p gfx.Palette, tileSize image.Point, rawurl string) (*gfx.Tileset, error) { + return Default.GetTileset(ctx, p, tileSize, rawurl) } diff --git a/gfxhttp/client_test.go b/gfxhttp/client_test.go index 11e1ffe..8bc48fd 100644 --- a/gfxhttp/client_test.go +++ b/gfxhttp/client_test.go @@ -1,6 +1,8 @@ package gfxhttp import ( + "context" + "errors" "image" "net/http" "net/http/httptest" @@ -14,7 +16,7 @@ func TestGetPNG(t *testing.T) { ts := testServer(palettedPNGHandler) defer ts.Close() - m, err := GetPNG(ts.URL) + m, err := GetPNG(context.Background(), ts.URL) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -43,7 +45,7 @@ func TestGetTileset(t *testing.T) { ts := testServer(palettedPNGHandler) defer ts.Close() - tileset, err := GetTileset(gfx.PaletteAmmo8, gfx.Pt(3, 3), ts.URL) + tileset, err := GetTileset(context.Background(), gfx.PaletteAmmo8, gfx.Pt(3, 3), ts.URL) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -53,6 +55,114 @@ func TestGetTileset(t *testing.T) { } } +func TestGetPNGStatusError(t *testing.T) { + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "nope", http.StatusNotFound) + }) + defer ts.Close() + + _, err := GetPNG(context.Background(), ts.URL) + if err == nil { + t.Fatalf("expected error, got nil") + } + + var se *StatusError + if !errors.As(err, &se) { + t.Fatalf("expected *StatusError, got %T: %v", err, err) + } + if se.Code != http.StatusNotFound { + t.Fatalf("StatusError.Code = %d, want %d", se.Code, http.StatusNotFound) + } + if se.URL != ts.URL { + t.Fatalf("StatusError.URL = %q, want %q", se.URL, ts.URL) + } +} + +func TestGetContextCancellation(t *testing.T) { + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + <-r.Context().Done() + }) + defer ts.Close() + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + _, err := GetPNG(ctx, ts.URL) + if err == nil { + t.Fatalf("expected error from cancelled context, got nil") + } + if !errors.Is(err, context.Canceled) { + t.Fatalf("expected context.Canceled, got %v", err) + } +} + +func TestWithHeader(t *testing.T) { + var seenAuth, seenAccept string + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + seenAuth = r.Header.Get("Authorization") + seenAccept = r.Header.Get("Accept") + w.Write(palettedPNGData) + }) + defer ts.Close() + + c := NewClient( + WithHeader("Authorization", "Bearer secret"), + WithHeader("Accept", "image/png"), + ) + + if _, err := c.GetPNG(context.Background(), ts.URL); err != nil { + t.Fatalf("unexpected error: %v", err) + } + if seenAuth != "Bearer secret" { + t.Fatalf("Authorization = %q, want %q", seenAuth, "Bearer secret") + } + if seenAccept != "image/png" { + t.Fatalf("Accept = %q, want %q", seenAccept, "image/png") + } +} + +func TestWithUserAgentBeatsWithHeader(t *testing.T) { + var seenUA string + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + seenUA = r.Header.Get("User-Agent") + w.Write(palettedPNGData) + }) + defer ts.Close() + + c := NewClient( + WithHeader("User-Agent", "via-header"), + WithUserAgent("via-option"), + ) + + if _, err := c.GetPNG(context.Background(), ts.URL); err != nil { + t.Fatalf("unexpected error: %v", err) + } + if seenUA != "via-option" { + t.Fatalf("User-Agent = %q, want %q", seenUA, "via-option") + } +} + +func TestWithHeaderReplaces(t *testing.T) { + var seen string + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + seen = r.Header.Get("X-Token") + w.Write(palettedPNGData) + }) + defer ts.Close() + + c := NewClient( + WithHeader("X-Token", "first"), + WithHeader("X-Token", "second"), + ) + + if _, err := c.GetPNG(context.Background(), ts.URL); err != nil { + t.Fatalf("unexpected error: %v", err) + } + if seen != "second" { + t.Fatalf("X-Token = %q, want %q", seen, "second") + } +} + func TestNewClientOptions(t *testing.T) { c := NewClient(WithUserAgent("ua"), WithTimeout(0)) diff --git a/gfxhttp/tileserver.go b/gfxhttp/tileserver.go index 70a8e7c..66c6688 100644 --- a/gfxhttp/tileserver.go +++ b/gfxhttp/tileserver.go @@ -1,6 +1,7 @@ package gfxhttp import ( + "context" "image" "image/draw" @@ -20,18 +21,18 @@ func NewTileServer(format string) *TileServer { } // GetImage fetches the image for the given GeoTile. -func (ts *TileServer) GetImage(gt gfx.GeoTile) (image.Image, error) { - return ts.Client.GetImage(gt.Rawurl(ts.Format)) +func (ts *TileServer) GetImage(ctx context.Context, gt gfx.GeoTile) (image.Image, error) { + return ts.Client.GetImage(ctx, gt.Rawurl(ts.Format)) } // TileImage fetches the image for the given GeoTile using the Default client. -func TileImage(gt gfx.GeoTile, format string) (image.Image, error) { - return Default.GetImage(gt.Rawurl(format)) +func TileImage(ctx context.Context, gt gfx.GeoTile, format string) (image.Image, error) { + return Default.GetImage(ctx, gt.Rawurl(format)) } // DrawTile fetches and draws the given GeoTile on dst. -func (ts *TileServer) DrawTile(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { - src, err := ts.GetImage(gt) +func (ts *TileServer) DrawTile(ctx context.Context, dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { + src, err := ts.GetImage(ctx, gt) if err != nil { return err } @@ -42,9 +43,9 @@ func (ts *TileServer) DrawTile(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) } // DrawNeighbors fetches and draws the 8 neighbors of the given GeoTile. -func (ts *TileServer) DrawNeighbors(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { +func (ts *TileServer) DrawNeighbors(ctx context.Context, dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { for _, n := range gt.Neighbors() { - if err := ts.DrawTile(dst, n, gp); err != nil { + if err := ts.DrawTile(ctx, dst, n, gp); err != nil { return err } } @@ -53,12 +54,12 @@ func (ts *TileServer) DrawNeighbors(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPo } // DrawTileAndNeighbors draws the given GeoTile and its 8 neighbors on dst. -// If drawing the central tile fails the neighbors are still drawn, matching -// the prior behavior of gfx.GeoTileServer. -func (ts *TileServer) DrawTileAndNeighbors(dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { - if err := ts.DrawTile(dst, gt, gp); err != nil { - return nil +// If drawing the central tile fails its error is returned and the neighbors +// are not drawn. +func (ts *TileServer) DrawTileAndNeighbors(ctx context.Context, dst draw.Image, gt gfx.GeoTile, gp gfx.GeoPoint) error { + if err := ts.DrawTile(ctx, dst, gt, gp); err != nil { + return err } - return ts.DrawNeighbors(dst, gt, gp) + return ts.DrawNeighbors(ctx, dst, gt, gp) } From f215358f3dae3804169c47280c15e787a8441d30 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:06:16 +0200 Subject: [PATCH 11/28] math: Make Sign, Clamp, and Lerp generic via new Numeric, Signed, and cmp.Ordered constraints --- math.go | 31 +++++++++++++++++++++++++------ math_test.go | 44 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/math.go b/math.go index 87da68f..bd95570 100644 --- a/math.go +++ b/math.go @@ -1,6 +1,23 @@ package gfx -import "math" +import ( + "cmp" + "math" +) + +// Numeric is a type constraint that permits any built-in numeric type +// (integer or floating point). It is exported so callers can reuse it +// when building on top of the generic helpers below. +type Numeric interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 | + ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr | + ~float32 | ~float64 +} + +// Signed is a type constraint that permits any signed numeric type. +type Signed interface { + ~int | ~int8 | ~int16 | ~int32 | ~int64 | ~float32 | ~float64 +} // Mathematical constants. const ( @@ -88,7 +105,7 @@ func MathRound(x float64) float64 { } // Sign returns -1 for values < 0, 0 for 0, and 1 for values > 0. -func Sign(x float64) float64 { +func Sign[T Signed](x T) T { switch { case x < 0: return -1 @@ -103,7 +120,7 @@ func Sign(x float64) float64 { // // If x is less than min, min is returned. If x is more than max, max is returned. Otherwise, x is // returned. -func Clamp(x, min, max float64) float64 { +func Clamp[T cmp.Ordered](x, min, max T) T { if x < min { return min } @@ -113,7 +130,9 @@ func Clamp(x, min, max float64) float64 { return x } -// Lerp does linear interpolation between two values. -func Lerp(a, b, t float64) float64 { - return a + (b-a)*t +// Lerp does linear interpolation between two values. The interpolation +// is computed in float64; when T is an integer type the result is +// truncated toward zero on the way back. +func Lerp[T Numeric](a, b T, t float64) T { + return T(float64(a) + (float64(b)-float64(a))*t) } diff --git a/math_test.go b/math_test.go index 679920a..7592308 100644 --- a/math_test.go +++ b/math_test.go @@ -1,5 +1,43 @@ package gfx +import "testing" + +func TestClampInt(t *testing.T) { + cases := []struct { + x, lo, hi, want int + }{ + {-5, 0, 10, 0}, + {5, 0, 10, 5}, + {15, 0, 10, 10}, + } + for _, tc := range cases { + if got := Clamp(tc.x, tc.lo, tc.hi); got != tc.want { + t.Fatalf("Clamp(%d, %d, %d) = %d, want %d", tc.x, tc.lo, tc.hi, got, tc.want) + } + } +} + +func TestSignInt(t *testing.T) { + if got := Sign(-3); got != -1 { + t.Fatalf("Sign(-3) = %d, want -1", got) + } + if got := Sign(0); got != 0 { + t.Fatalf("Sign(0) = %d, want 0", got) + } + if got := Sign(7); got != 1 { + t.Fatalf("Sign(7) = %d, want 1", got) + } +} + +func TestLerpInt(t *testing.T) { + if got := Lerp(0, 10, 0.5); got != 5 { + t.Fatalf("Lerp(0, 10, 0.5) = %d, want 5", got) + } + if got := Lerp(0, 100, 0.25); got != 25 { + t.Fatalf("Lerp(0, 100, 0.25) = %d, want 25", got) + } +} + func ExampleMathMin() { Dump( MathMin(-1, 1), @@ -149,9 +187,9 @@ func ExampleClamp() { func ExampleLerp() { Dump( - Lerp(0, 2, 0.1), - Lerp(1, 10, 0.5), - Lerp(2, 4, 0.5), + Lerp(0.0, 2.0, 0.1), + Lerp(1.0, 10.0, 0.5), + Lerp(2.0, 4.0, 0.5), ) // Output: From 82af7ddaeb538044c9ed0d9ffa1157022874dced Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:08:20 +0200 Subject: [PATCH 12/28] sort: Replace SortSlice reflection wrapper with generic slices.SortFunc-backed implementation --- sort.go | 14 +++++++------- sort_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 sort_test.go diff --git a/sort.go b/sort.go index 6dd74c9..bee171f 100644 --- a/sort.go +++ b/sort.go @@ -1,11 +1,11 @@ -//go:build !tinygo -// +build !tinygo - package gfx -import "sort" +import "slices" -// SortSlice sorts the provided slice given the provided less function. -func SortSlice(slice any, less func(i, j int) bool) { - sort.Slice(slice, less) +// SortSlice sorts s in place using the provided comparison function. +// cmp must return a negative number when a is less than b, zero when +// a equals b, and a positive number when a is greater than b — the +// same convention as slices.SortFunc and cmp.Compare. +func SortSlice[S ~[]E, E any](s S, cmp func(a, b E) int) { + slices.SortFunc(s, cmp) } diff --git a/sort_test.go b/sort_test.go new file mode 100644 index 0000000..36ccd4e --- /dev/null +++ b/sort_test.go @@ -0,0 +1,37 @@ +package gfx + +import ( + "cmp" + "slices" + "testing" +) + +func TestSortSliceInts(t *testing.T) { + s := []int{3, 1, 4, 1, 5, 9, 2, 6} + + SortSlice(s, cmp.Compare[int]) + + if want := []int{1, 1, 2, 3, 4, 5, 6, 9}; !slices.Equal(s, want) { + t.Fatalf("SortSlice = %v, want %v", s, want) + } +} + +func TestSortSliceCustom(t *testing.T) { + type item struct { + Key string + Value int + } + s := []item{ + {"b", 2}, + {"a", 1}, + {"c", 3}, + } + + SortSlice(s, func(a, b item) int { + return cmp.Compare(a.Key, b.Key) + }) + + if s[0].Key != "a" || s[1].Key != "b" || s[2].Key != "c" { + t.Fatalf("SortSlice = %v, want sorted by Key", s) + } +} From f3d27925ac23a0e5c4eb22245519214ea97cca8a Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:36:18 +0200 Subject: [PATCH 13/28] license: Update copyright year --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 44b44b3..e98227d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2019-2025 Peter Hellberg - https://c7.se +Copyright (c) 2019-2026 Peter Hellberg - https://c7.se Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the From 1991273f2a668131a7febf589c61ad313cf9d637 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:38:41 +0200 Subject: [PATCH 14/28] doc: Update copyright year --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 00cb95e..db2636c 100644 --- a/README.md +++ b/README.md @@ -433,9 +433,13 @@ when experimenting with graphical effects, so I've included `gfx.Log`, ## Math -I have included a few functions that call functions in the `math` package. +I have included a few functions that call functions in the `math` package +(`gfx.MathMin`, `gfx.MathMax`, `gfx.MathAbs`, `gfx.MathSqrt`, …) so that you +don't have to import `math` yourself. -There is also `gfx.Sign`, `gfx.Clamp` and `gfx.Lerp` functions for `float64`. +`gfx.Sign`, `gfx.Clamp` and `gfx.Lerp` are generic: `gfx.Sign` and `gfx.Lerp` +work on any numeric type (the `gfx.Numeric`/`gfx.Signed` constraints) and +`gfx.Clamp` works on any `cmp.Ordered` type. ## Cmplx @@ -593,7 +597,7 @@ func main() { ## License (MIT) -Copyright (c) 2019-2025 [Peter Hellberg](https://c7.se) +Copyright (c) 2019-2026 [Peter Hellberg](https://c7.se) > Permission is hereby granted, free of charge, to any person obtaining > a copy of this software and associated documentation files (the From b30e03af353410fab42fa6ec352a6f1e1a9be256 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:38:56 +0200 Subject: [PATCH 15/28] examples: Update examples --- .../gfx-example-animation.gif | Bin 23489 -> 23489 bytes .../gfx-example-blocks/gfx-example-blocks.png | Bin 5356 -> 5361 bytes .../gfx-example-domain-coloring.png | Bin 254501 -> 255159 bytes .../gfx-example-triangles.png | Bin 6248 -> 6261 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/gfx-example-animation/gfx-example-animation.gif b/examples/gfx-example-animation/gfx-example-animation.gif index c4e241864d235679465e2f9568683c90daa0669a..c282cfb0a81f01706dddbbe91b4627413bd6f1dd 100644 GIT binary patch literal 23489 zcmeI(>rc~H9LI5nX0{5gLt+GG5htz`R=LQnuxd46%cWz$h+IY}lv{DYShhLX*vhcB zRLae*<01pA5j%xUz$vK(9CIx~*_fFQ7$O-#Zbc^<<-S9j{2uKe*vYp~n)KI)ue|fg z@8q1|1^f968Z1UE(8pNqDN$dl>5<)zJ^mbQ{S(YM>?^Uc4BhsP#W*R<)m za(>kNmK()o)!lPcRbAVVymd&kVkH^pibiFOiQb#Ws(VwR4}F{`|Lk9Eqa>IlJrU1H zbcS-5u$)}V691~sQ@4sfdo=P-)=Y1gQ0W)LR~o$99eRTAOe#$>Mb6O2OWKry$;oXx zCp!0*z|YikV9Z3abMfcJW_}`@YNA*EF||atzinp|C(2j**NA(E@~?JGGXh*K-~LeV{6u<`xIe`+3a(M z2Cc!!?4#|Rcg|tC4-aO% z=d+tN`I*n>TxSlA#T0E*F;3kwHuV%g@nFxIz8?>-e9NhMWXdxwtj0HfdbZl;=`WSR zRTAOy!r?r%*X0=N37zJVw75?j>CipreEY+B=HN$Z@9}c?H>QRg`QKtb$Ma`@2zKFti8GV*TT$jXW5a?^|jTN70m`U z=?hB=H%a_5O`24+ovBOulENklif#B@!I|BOQh~%iTPHY6D(gqpwdC}=JOeNN!bhXB^!j|GKK)pxLCsM%}^=W+cPg!-aPqVxCz<*tQf!zxUs@*ZZ?vA@Bj;N18%Hvqcvid zZM$O7dv_?>~k?e@tP{0kivBFKrW{QphZorKdZgaDdZ2O=9 zzzw*u!j0C5SvK``Kfn#RvBFKrwm$S8;0D}S;YMo&H575!7rXd!qR?;0D}S z;U;ANBt8ka0XJ5-&CN!#&%Xo5?{HZGugeN(jhJO8d%Huqq1;%Nn~)vs=S|pSk%8gaI(HcR`MzTK-kN|GLjTLS}c3WaA;0E0PW84A%0>kMe AIRF3v literal 23489 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 literal 5356 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 Y?EGF;cdcfH7Lgct*DdU;&b;IQ1&_--ga7~l diff --git a/examples/gfx-example-domain-coloring/gfx-example-domain-coloring.png b/examples/gfx-example-domain-coloring/gfx-example-domain-coloring.png index 5f8acc90db7b3b84a0ceb90e737ad7c169a3cc1e..4f788a1ef77bc854ae0be4f7065c8a975ad6a84a 100644 GIT binary patch delta 148629 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 DfqY-p delta 147914 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

F=A*`V?m!4S#xR)_kd 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 Jt6!OY`X8%IkU#(c diff --git a/examples/gfx-example-triangles/gfx-example-triangles.png b/examples/gfx-example-triangles/gfx-example-triangles.png index 05953c32e42279d19d645bf36c3e4dc11754190d..736d82c1172e697c2b27526022f42e6bf8820d0a 100644 GIT binary patch delta 4882 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 delta 4861 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 x+1_Qjq*pynbEA^? Date: Thu, 28 May 2026 19:39:41 +0200 Subject: [PATCH 16/28] block: Color every vertex in Block.Triangles so faces render uniformly instead of partially black --- block.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/block.go b/block.go index 711dfa3..e610193 100644 --- a/block.go +++ b/block.go @@ -80,12 +80,12 @@ func (b Block) Triangles(origin Vec3) []Triangle { c, l, m, d := b.Corners(origin), b.Color.Light, b.Color.Medium, b.Color.Dark return []Triangle{ - T(Vx(c.FrontUp, d), Vx(c.LeftDown), Vx(c.LeftUp)), - T(Vx(c.FrontUp, d), Vx(c.FrontDown), Vx(c.LeftDown)), - T(Vx(c.FrontUp, m), Vx(c.FrontDown), Vx(c.RightDown)), - T(Vx(c.FrontUp, m), Vx(c.RightUp), Vx(c.RightDown)), - T(Vx(c.FrontUp, l), Vx(c.BackUp), Vx(c.LeftUp)), - T(Vx(c.FrontUp, l), Vx(c.BackUp), Vx(c.RightUp)), + T(Vx(c.FrontUp, d), Vx(c.LeftDown, d), Vx(c.LeftUp, d)), + T(Vx(c.FrontUp, d), Vx(c.FrontDown, d), Vx(c.LeftDown, d)), + T(Vx(c.FrontUp, m), Vx(c.FrontDown, m), Vx(c.RightDown, m)), + T(Vx(c.FrontUp, m), Vx(c.RightUp, m), Vx(c.RightDown, m)), + T(Vx(c.FrontUp, l), Vx(c.BackUp, l), Vx(c.LeftUp, l)), + T(Vx(c.FrontUp, l), Vx(c.BackUp, l), Vx(c.RightUp, l)), } } From d7c2d82767ed5576bc9a70e56200b399f1748e89 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:40:24 +0200 Subject: [PATCH 17/28] triangle: Round Triangle.Bounds Max up so adjacent triangles meet without gaps and right/bottom edge pixels aren't skipped --- triangle.go | 18 ++++++++++++++++-- triangle_test.go | 6 +++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/triangle.go b/triangle.go index e9cd878..6066d03 100644 --- a/triangle.go +++ b/triangle.go @@ -40,9 +40,23 @@ func (t Triangle) Colors() (color.NRGBA, color.NRGBA, color.NRGBA) { return t[0].Color, t[1].Color, t[2].Color } -// Bounds returns the bounds of the triangle. +// Bounds returns the integer bounding box of the triangle. Min is rounded +// down and Max is rounded up so every pixel that can be inside the triangle +// is included in the iteration range — otherwise the right/bottom edge can +// lose a column or row when a vertex falls between pixel centers, leaving +// thin gaps between adjacent triangles that share an edge. func (t Triangle) Bounds() image.Rectangle { - return t.Rect().Bounds() + a, b, c := t.Positions() + + minX := math.Min(a.X, math.Min(b.X, c.X)) + minY := math.Min(a.Y, math.Min(b.Y, c.Y)) + maxX := math.Max(a.X, math.Max(b.X, c.X)) + maxY := math.Max(a.Y, math.Max(b.Y, c.Y)) + + return image.Rectangle{ + Min: image.Point{X: int(math.Floor(minX)), Y: int(math.Floor(minY))}, + Max: image.Point{X: int(math.Floor(maxX)) + 1, Y: int(math.Floor(maxY)) + 1}, + } } // Rect returns the triangle Rect. diff --git a/triangle_test.go b/triangle_test.go index babe3e8..681eb81 100644 --- a/triangle_test.go +++ b/triangle_test.go @@ -117,7 +117,11 @@ func TestTriangleBounds(t *testing.T) { {Position: V(2, 4)}, }) - if got, want := tri.Bounds(), IR(0, 0, 2, 4); got != want { + // Max is rounded up so the iteration range includes the integer pixel + // column/row that the rightmost / bottom vertex falls on (using image.Rectangle's + // exclusive Max convention). With vertices at (0,0), (1,0), (2,4) the + // triangle covers pixel columns 0..2 and rows 0..4, so Max is (3, 5). + if got, want := tri.Bounds(), IR(0, 0, 3, 5); got != want { t.Fatalf("tri.Bounds() = %v, want %v", got, want) } } From 140828d24b5035154277eaa596ad6e5410a91eed Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:44:59 +0200 Subject: [PATCH 18/28] paletted: Honor Rect.Min in Paletted.PixOffset so non-origin Paletted images index Pix correctly --- paletted_image.go | 7 ++++--- paletted_image_test.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/paletted_image.go b/paletted_image.go index f23a32c..395dbae 100644 --- a/paletted_image.go +++ b/paletted_image.go @@ -130,10 +130,11 @@ func (p *Paletted) Pixels() []uint8 { } // PixOffset returns the index of the first element of Pix -// that corresponds to the pixel at (x, y). +// that corresponds to the pixel at (x, y). It honors Rect.Min so +// that a Paletted whose bounds do not start at the origin (for +// example one produced by SubImage) indexes correctly into Pix. func (p *Paletted) PixOffset(x, y int) int { - return y*p.Stride + x - //return (y-p.Rect.Min.Y)*p.Stride + (x-p.Rect.Min.X)*1 + return (y-p.Rect.Min.Y)*p.Stride + (x - p.Rect.Min.X) } // Set changes the color at (x, y). diff --git a/paletted_image_test.go b/paletted_image_test.go index 8610224..b56f0d4 100644 --- a/paletted_image_test.go +++ b/paletted_image_test.go @@ -73,8 +73,32 @@ func TestPalettedSubImage(t *testing.T) { t.Fatalf("sm.Bounds() = %v, want %v", got, want) } - if got, want := sm.Index(0, 0), uint8(2); got != want { - t.Fatalf("sm.Index(0,0) = %d, want %d", got, want) + // The sub-image shares storage with the parent. Reading at (1, 1) + // — the same coordinate Put was called with — must return 2. + if got, want := sm.Index(1, 1), uint8(2); got != want { + t.Fatalf("sm.Index(1,1) = %d, want %d", got, want) + } +} + +func TestPalettedNonOriginRect(t *testing.T) { + m := NewPalettedImage(IR(10, 20, 14, 24), PaletteEN4) + + m.SetColorIndex(10, 20, 1) // top-left + m.SetColorIndex(13, 23, 3) // bottom-right + m.SetColorIndex(11, 22, 2) // somewhere in the middle + + for _, tc := range []struct { + x, y int + want uint8 + }{ + {10, 20, 1}, + {13, 23, 3}, + {11, 22, 2}, + {12, 21, 0}, + } { + if got := m.ColorIndexAt(tc.x, tc.y); got != tc.want { + t.Fatalf("ColorIndexAt(%d, %d) = %d, want %d", tc.x, tc.y, got, tc.want) + } } } From 4c180411b8f03192146864806a940eb58692f7a0 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:46:34 +0200 Subject: [PATCH 19/28] gfx: Drop legacy // +build directives now that go.mod is on Go 1.25 --- animation.go | 1 - base64.go | 1 - batch.go | 1 - block.go | 1 - blocks.go | 1 - box.go | 1 - cie_lab.go | 1 - decode.go | 1 - draw_target.go | 1 - draw_test.go | 1 - drawer.go | 1 - geo.go | 1 - hsl.go | 1 - hsv.go | 1 - hunter_lab.go | 1 - imdraw.go | 1 - int.go | 1 - js.go | 1 - json.go | 1 - linear_scaler.go | 1 - playground.go | 1 - signed_distance.go | 1 - xyz.go | 1 - 23 files changed, 23 deletions(-) diff --git a/animation.go b/animation.go index 1c02a43..ceb0809 100644 --- a/animation.go +++ b/animation.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/base64.go b/base64.go index 0abf338..6de0ffb 100644 --- a/base64.go +++ b/base64.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/batch.go b/batch.go index 5fac43c..9e3aefc 100644 --- a/batch.go +++ b/batch.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/block.go b/block.go index e610193..8124508 100644 --- a/block.go +++ b/block.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/blocks.go b/blocks.go index 245e2df..bcc3de7 100644 --- a/blocks.go +++ b/blocks.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/box.go b/box.go index 47dbea0..49d5209 100644 --- a/box.go +++ b/box.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/cie_lab.go b/cie_lab.go index ad1cc4d..25b2a07 100644 --- a/cie_lab.go +++ b/cie_lab.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/decode.go b/decode.go index 5f3e943..d51d858 100644 --- a/decode.go +++ b/decode.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/draw_target.go b/draw_target.go index 73e20d7..b45b1cc 100644 --- a/draw_target.go +++ b/draw_target.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/draw_test.go b/draw_test.go index 8dbd23d..dbf0470 100644 --- a/draw_test.go +++ b/draw_test.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/drawer.go b/drawer.go index 127fe81..2fd67e2 100644 --- a/drawer.go +++ b/drawer.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/geo.go b/geo.go index 88a9640..d0461bb 100644 --- a/geo.go +++ b/geo.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/hsl.go b/hsl.go index 8aa3bfd..b032c4e 100644 --- a/hsl.go +++ b/hsl.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/hsv.go b/hsv.go index 159a5ae..77a25e8 100644 --- a/hsv.go +++ b/hsv.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/hunter_lab.go b/hunter_lab.go index 99de3ae..67063fd 100644 --- a/hunter_lab.go +++ b/hunter_lab.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/imdraw.go b/imdraw.go index a9ad86d..0b2782f 100644 --- a/imdraw.go +++ b/imdraw.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/int.go b/int.go index 5a70146..d81d29c 100644 --- a/int.go +++ b/int.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/js.go b/js.go index bac1922..7925983 100644 --- a/js.go +++ b/js.go @@ -1,5 +1,4 @@ //go:build !tinygo && js && wasm -// +build !tinygo,js,wasm package gfx diff --git a/json.go b/json.go index afb7573..362e10b 100644 --- a/json.go +++ b/json.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/linear_scaler.go b/linear_scaler.go index e7bd5fc..a39cc89 100644 --- a/linear_scaler.go +++ b/linear_scaler.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/playground.go b/playground.go index 67a4969..92b82d2 100644 --- a/playground.go +++ b/playground.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/signed_distance.go b/signed_distance.go index fcfd684..2b6581a 100644 --- a/signed_distance.go +++ b/signed_distance.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx diff --git a/xyz.go b/xyz.go index 2fa3956..2617df7 100644 --- a/xyz.go +++ b/xyz.go @@ -1,5 +1,4 @@ //go:build !tinygo -// +build !tinygo package gfx From 4218a5b8bcf0e4d7fd31b06fde7815ef39e1c75d Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:49:27 +0200 Subject: [PATCH 20/28] examples: Use gfx.V and keyed SignedDistance literals to satisfy go vet, and re-embed README snippets --- README.md | 22 +++++++++---------- .../gfx-example-matrix/gfx-example-matrix.go | 10 ++++----- .../gfx-example-polygon.go | 10 ++++----- examples/gfx-example-sdf/gfx-example-sdf.go | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index db2636c..f62254c 100644 --- a/README.md +++ b/README.md @@ -61,11 +61,11 @@ var edg32 = gfx.PaletteEDG32 func main() { m := gfx.NewNRGBA(gfx.IR(0, 0, 1024, 256)) p := gfx.Polygon{ - {80, 40}, - {440, 60}, - {700, 200}, - {250, 230}, - {310, 140}, + gfx.V(80, 40), + gfx.V(440, 60), + gfx.V(700, 200), + gfx.V(250, 230), + gfx.V(310, 140), } p.EachPixel(m, func(x, y int) { @@ -141,7 +141,7 @@ func main() { m := gfx.NewImage(1024, 256, c(5)) gfx.EachPixel(m.Bounds(), func(x, y int) { - sd := gfx.SignedDistance{gfx.IV(x, y)} + sd := gfx.SignedDistance{Vec: gfx.IV(x, y)} if d := sd.OpRepeat(gfx.V(128, 128), func(sd gfx.SignedDistance) float64 { return sd.OpSubtraction(sd.Circle(50), sd.Line(gfx.V(0, 0), gfx.V(64, 64))) @@ -369,11 +369,11 @@ func main() { c := gfx.V(128, 128) p := gfx.Polygon{ - {50, 50}, - {50, 206}, - {128, 96}, - {206, 206}, - {206, 50}, + gfx.V(50, 50), + gfx.V(50, 206), + gfx.V(128, 96), + gfx.V(206, 206), + gfx.V(206, 50), } for d := 0.0; d < 360; d += 2 { diff --git a/examples/gfx-example-matrix/gfx-example-matrix.go b/examples/gfx-example-matrix/gfx-example-matrix.go index 0a68206..52f5376 100644 --- a/examples/gfx-example-matrix/gfx-example-matrix.go +++ b/examples/gfx-example-matrix/gfx-example-matrix.go @@ -10,11 +10,11 @@ func main() { c := gfx.V(128, 128) p := gfx.Polygon{ - {50, 50}, - {50, 206}, - {128, 96}, - {206, 206}, - {206, 50}, + gfx.V(50, 50), + gfx.V(50, 206), + gfx.V(128, 96), + gfx.V(206, 206), + gfx.V(206, 50), } for d := 0.0; d < 360; d += 2 { diff --git a/examples/gfx-example-polygon/gfx-example-polygon.go b/examples/gfx-example-polygon/gfx-example-polygon.go index 54cc516..90f1835 100644 --- a/examples/gfx-example-polygon/gfx-example-polygon.go +++ b/examples/gfx-example-polygon/gfx-example-polygon.go @@ -7,11 +7,11 @@ var edg32 = gfx.PaletteEDG32 func main() { m := gfx.NewNRGBA(gfx.IR(0, 0, 1024, 256)) p := gfx.Polygon{ - {80, 40}, - {440, 60}, - {700, 200}, - {250, 230}, - {310, 140}, + gfx.V(80, 40), + gfx.V(440, 60), + gfx.V(700, 200), + gfx.V(250, 230), + gfx.V(310, 140), } p.EachPixel(m, func(x, y int) { diff --git a/examples/gfx-example-sdf/gfx-example-sdf.go b/examples/gfx-example-sdf/gfx-example-sdf.go index 1ad6280..0f91e53 100644 --- a/examples/gfx-example-sdf/gfx-example-sdf.go +++ b/examples/gfx-example-sdf/gfx-example-sdf.go @@ -7,7 +7,7 @@ func main() { m := gfx.NewImage(1024, 256, c(5)) gfx.EachPixel(m.Bounds(), func(x, y int) { - sd := gfx.SignedDistance{gfx.IV(x, y)} + sd := gfx.SignedDistance{Vec: gfx.IV(x, y)} if d := sd.OpRepeat(gfx.V(128, 128), func(sd gfx.SignedDistance) float64 { return sd.OpSubtraction(sd.Circle(50), sd.Line(gfx.V(0, 0), gfx.V(64, 64))) From befd7c9ffcf03fc1f9ecc24f0b4d24c428db0a78 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:51:14 +0200 Subject: [PATCH 21/28] gfx: Modernize counted for loops to range-over-int (go fix) --- README.md | 4 ++-- draw_test.go | 8 ++++---- .../gfx-example-domain-coloring.go | 4 ++-- polygon.go | 2 +- resize.go | 4 ++-- simplex.go | 6 +++--- tiles.go | 6 +++--- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f62254c..57b55e9 100644 --- a/README.md +++ b/README.md @@ -193,10 +193,10 @@ func main() { m = gfx.NewImage(w, h) ) - for py := 0; py < h; py++ { + for py := range h { x := p0.X - for px := 0; px < w; px++ { + for px := range w { cc := p.CmplxPhaseAt(gfx.CmplxCos(gfx.CmplxSin(0.42 / complex(y*x, x*x)))) m.Set(px, py, cc) diff --git a/draw_test.go b/draw_test.go index dbf0470..3e709e1 100644 --- a/draw_test.go +++ b/draw_test.go @@ -46,8 +46,8 @@ func TestDrawPalettedImageNonOriginRect(t *testing.T) { DrawPalettedImage(dst, r, src) - for y := 0; y < 16; y++ { - for x := 0; x < 8; x++ { + for y := range 16 { + for x := range 8 { inside := x >= r.Min.X && x < r.Max.X && y >= r.Min.Y && y < r.Max.Y got := dst.ColorIndexAt(x, y) want := uint8(0) @@ -68,8 +68,8 @@ func TestDrawPalettedLayerNonOriginRect(t *testing.T) { DrawPalettedLayer(dst, r, src) - for y := 0; y < 12; y++ { - for x := 0; x < 16; x++ { + for y := range 12 { + for x := range 16 { inside := x >= r.Min.X && x < r.Max.X && y >= r.Min.Y && y < r.Max.Y got := dst.ColorIndexAt(x, y) if inside { diff --git a/examples/gfx-example-domain-coloring/gfx-example-domain-coloring.go b/examples/gfx-example-domain-coloring/gfx-example-domain-coloring.go index 138d010..b54469c 100644 --- a/examples/gfx-example-domain-coloring/gfx-example-domain-coloring.go +++ b/examples/gfx-example-domain-coloring/gfx-example-domain-coloring.go @@ -29,10 +29,10 @@ func main() { m = gfx.NewImage(w, h) ) - for py := 0; py < h; py++ { + for py := range h { x := p0.X - for px := 0; px < w; px++ { + for px := range w { cc := p.CmplxPhaseAt(gfx.CmplxCos(gfx.CmplxSin(0.42 / complex(y*x, x*x)))) m.Set(px, py, cc) diff --git a/polygon.go b/polygon.go index 492c2ea..9bfda4f 100644 --- a/polygon.go +++ b/polygon.go @@ -19,7 +19,7 @@ func DrawPolygon(dst draw.Image, p Polygon, thickness float64, c color.Color) { case thickness < 1: p.Fill(dst, c) default: - for i := 0; i < n; i++ { + for i := range n { if i+1 == n { polylineFromTo(p[n-1], p[0], thickness).Fill(dst, c) } else { diff --git a/resize.go b/resize.go index 30dd5dc..d87ffb6 100644 --- a/resize.go +++ b/resize.go @@ -53,8 +53,8 @@ func ResizeImage(dst draw.Image, src image.Image) { xRatio := src.Bounds().Dx()<<16/w + 1 yRatio := src.Bounds().Dy()<<16/h + 1 - for x := 0; x < w; x++ { - for y := 0; y < h; y++ { + for x := range w { + for y := range h { sx := ((x * xRatio) >> 16) sy := ((y * yRatio) >> 16) diff --git a/simplex.go b/simplex.go index 27dc89f..ca9851b 100644 --- a/simplex.go +++ b/simplex.go @@ -30,20 +30,20 @@ func NewSimplexNoise(seed int64) *SimplexNoise { perm := make([]uint8, 512) permMod12 := make([]uint8, 512) - for i := 0; i < 256; i++ { + for i := range 256 { p[i] = uint8(i) } r := rand.New(rand.NewSource(seed)) - for i := 0; i < 256; i++ { + for i := range 256 { si := r.Int() & 255 p[i], p[si] = p[si], p[i] } // To remove the need for index wrapping, double the permutation table length - for i := 0; i < 512; i++ { + for i := range 512 { perm[i] = p[i&255] permMod12[i] = perm[i] % 12 } diff --git a/tiles.go b/tiles.go index 63901a8..5346770 100644 --- a/tiles.go +++ b/tiles.go @@ -19,7 +19,7 @@ type TilesetData [][]uint8 func NewTileset(p Palette, s image.Point, td TilesetData) *Tileset { ts := &Tileset{Palette: p, Size: s} - for i := 0; i < len(td); i++ { + for i := range td { ts.Tiles = append(ts.Tiles, NewTile(p, s.X, td[i])) } @@ -33,8 +33,8 @@ func NewTilesetFromImage(p Palette, tileSize image.Point, src image.Image) *Tile tiles := make(Tiles, cols*rows) - for row := 0; row < rows; row++ { - for col := 0; col < cols; col++ { + for row := range rows { + for col := range cols { t := NewPaletted(tileSize.X, tileSize.Y, p) DrawSrc(t, t.Bounds(), src, Pt(col*tileSize.X, row*tileSize.Y)) From a1e4ddf97b19e9ade36182fca8de10131b57f0ec Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:54:02 +0200 Subject: [PATCH 22/28] examples/gfx-example-animation: Slice 5 palette colors so the flower stem renders instead of falling back to the background --- README.md | 2 +- .../gfx-example-animation.gif | Bin 23489 -> 37281 bytes .../gfx-example-animation.go | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 57b55e9..2fd2789 100644 --- a/README.md +++ b/README.md @@ -242,7 +242,7 @@ func main() { } for i := 0; i < len(p)-4; i++ { - t := gfx.NewTile(p[i:i+4], 8, fireflower) + t := gfx.NewTile(p[i:i+5], 8, fireflower) a.AddPalettedImage(gfx.NewScaledPalettedImage(t, 20)) } diff --git a/examples/gfx-example-animation/gfx-example-animation.gif b/examples/gfx-example-animation/gfx-example-animation.gif index c282cfb0a81f01706dddbbe91b4627413bd6f1dd..0432dd048d03d1f78041e52e54a4a9f04a518975 100644 GIT binary patch literal 37281 zcmeI*Yc!O390zdH#br_GB*_fr8WKxl)5RuqOfA}Eog`asTdD0>ED1G2Q7$7h?&A{1 z3^O9*mg~5)$O?^HiODTeOELS@oSic-_I1yj-}7e9d1hXJ&iDJ9^Z);jTUi(%a7hyy z5<(tjt_1Fwy`A}yQ^)jm^+bffyjor_s*ikXfBF8)&q4-A-jFF(Zr+hNyK4tbe*W_Q z>m$MyWe)AsYq83&G=AG&{^`7i&#xXSkJYJ^*eY-Blb2t1_)=YcFtg9F9mfMiqnm86 ziCLPYZo9O_y1+X8Ic1U4<9}y}{Rc&2u*p5KjBq8VZ+~ghdbjpD(u#OzG$$x9SSILJ zNXTt09)A}T5oUL4T}*6TJR#vxB9W976Q!1%o zicc#FnL8?La;p_;8#C&+vsxL=+uFJkIy(P)UeF`g*Vn&w;Q7!CcGrmP*!Zh06K#`I z9M<&a*}3_J#(CkTT6~_!>Ka!_L|oCbFs&wZ)&8f^u)_4Zu+3b}dvRJB4UzJ)Qe+1$ zE}0d*QQgc%l%8qz5NAnrO5Ac$CSKe1=#B98*=?jv9!f>wjGV*CM}1cm^NMcY*kW%QTHq9U zqxzME&(*86s+-q@rGE3$8+E`-Gps4bbGeOor;eP{_M?xVB%ImTq3CJghD$l*C9b0& zJJn6Vk+U=Xmke)EO`rJKTx_l!xOZ=e9Yd;_Rj&->;$#A9yvG_yiicvHmKU(?si9W7 zJ5822rWvk#e-HfhV3z&-mbA3F>9YJpXSF3wX~U-vYV5ikgPUfn6AfaM!=2UDTrO8= zA#C_o%?9_8;Eghmu_~fQlUQL13kO!H+(wPjJ1+K*U4rC&n(Fb`qm!d|58i&N9IjDv zJ_D~=B3~P^m8sz>qGxM7eqX5fA8eEXXA&E&ztWF=per7ZeW;`0hmFzHO2o$QHt|r7 z+hr|=jX&);g&`<;mZ>Jl`!_2;+7_XSO_U*)VTc}inkpo5=CWFnNQ;$Q(iOHjuPpHV|)X|=?2fV2D*4rrs+&s0nuju6p zZz&JE{Lju5>z(t;D(S~J%`m!sei<*dj@d)KKWZ^JUG^f|tDt;3MRcxYu`zO%*(T*h z3!e~wF;`_bmQSs!C1}u|&8d8LP1_`!M61!(S1hW1ZyS(Vzpqb%+Hm4R0Ig2MJn3D! zY-mzpvqbC<`Yl@-0YxpCNJY9N*60kQ@%5OZUb<>)0KHRlu|mH~M|PFowXY{&I#P1a zKymj5^Mmg*PewDp7u{c1LGD<)zM9&8n!HljYh@7gq;&^*HM8%?j^vU-uU(aftOGrj zjGlwBs|@yKJ4wA~=ed@~YQ9;Ghf_o^C)^DA&BI9GX25XXrg zZ|bj0t@K}tR${WUuSWTEQtE1$)Qsx2l3{vjmBmcnrf}1=r=3=Aa}{%J_4zspn)*A| zjv)1g);-+vMQ?p>z)X#ubH!4#>u|+~p4M}fAO8+@c3Ss8770S6w%g=CiiE%-um~&y zi@v2r{6vI6B)1t07C|n8Tm-oYm0ZNDW;}@g>~sQ)z#^~+EJDR1WJbh?=oIM$SOgY< zMPLys770S6>v#E5`;*Wz5o`1MPLzFgo;JTj0mY_NFqWYI@1}u8U=dgZ z7NKGhKM^4iy{7ttMPLzF1QwxU5wDu@AZiG90E@sPum~(d#Uf-z#D^&EG@Jo}`-|ZI zBDlW@o%@RfA-Z6w2e}Ax5#%DsMX2N=WJZKkGb9lq5LqZ=z#^~+ECP#Au}Bc21amF0 z2rL4Nz#>#E;wK^mqSxLUU=dgZ7J)^mSj4MlJcvG0_Jc)W5m*Ekp<)p-BjQ8!Y1j)a z0*k;Rum}~41R+{WAb~|-5m*Ekp<)p-BSNYfl86w9W^B)bMPLzF1QwxUksw6%+D2dz zSOgYB3WWRa@yBc9vBkXE~U5(#zS0k^Q@gOpkga7p53<#V7fiocJ zoB=^*M0|*BcG*HlgN_Cr4LTYs9Ze9TAX7Y81QvlsU=b=7Au}SRnjwh@fvET#11tiI bz#^~+6^jHR8o%EM7J)@z5m@vMEHeEUzdgW7 literal 23489 zcmeI(>rc~H9LI5nX0{5gLt+GG5htz`R=LQnuxd46%cWz$h+IY}lv{DYShhLX*vhcB zRLae*<01pA5j%xUz$vK(9CIx~*_fFQ7$O-#Zbc^<<-S9j{2uKe*vYp~n)KI)ue|fg z@8q1|1^f968Z1UE(8pNqDN$dl>5<)zJ^mbQ{S(YM>?^Uc4BhsP#W*R<)m za(>kNmK()o)!lPcRbAVVymd&kVkH^pibiFOiQb#Ws(VwR4}F{`|Lk9Eqa>IlJrU1H zbcS-5u$)}V691~sQ@4sfdo=P-)=Y1gQ0W)LR~o$99eRTAOe#$>Mb6O2OWKry$;oXx zCp!0*z|YikV9Z3abMfcJW_}`@YNA*EF||atzinp|C(2j**NA(E@~?JGGXh*K-~LeV{6u<`xIe`+3a(M z2Cc!!?4#|Rcg|tC4-aO% z=d+tN`I*n>TxSlA#T0E*F;3kwHuV%g@nFxIz8?>-e9NhMWXdxwtj0HfdbZl;=`WSR zRTAOy!r?r%*X0=N37zJVw75?j>CipreEY+B=HN$Z@9}c?H>QRg`QKtb$Ma`@2zKFti8GV*TT$jXW5a?^|jTN70m`U z=?hB=H%a_5O`24+ovBOulENklif#B@!I|BOQh~%iTPHY6D(gqpwdC}=JOeNN!bhXB^!j|GKK)pxLCsM%}^=W+cPg!-aPqVxCz<*tQf!zxUs@*ZZ?vA@Bj;N18%Hvqcvid zZM$O7dv_?>~k?e@tP{0kivBFKrW{QphZorKdZgaDdZ2O=9 zzzw*u!j0C5SvK``Kfn#RvBFKrwm$S8;0D}S;YMo&H575!7rXd!qR?;0D}S z;U;ANBt8ka0XJ5-&CN!#&%Xo5?{HZGugeN(jhJO8d%Huqq1;%Nn~)vs=S|pSk%8gaI(HcR`MzTK-kN|GLjTLS}c3WaA;0E0PW84A%0>kMe AIRF3v diff --git a/examples/gfx-example-animation/gfx-example-animation.go b/examples/gfx-example-animation/gfx-example-animation.go index bfdabe1..0541167 100644 --- a/examples/gfx-example-animation/gfx-example-animation.go +++ b/examples/gfx-example-animation/gfx-example-animation.go @@ -21,7 +21,7 @@ func main() { } for i := 0; i < len(p)-4; i++ { - t := gfx.NewTile(p[i:i+4], 8, fireflower) + t := gfx.NewTile(p[i:i+5], 8, fireflower) a.AddPalettedImage(gfx.NewScaledPalettedImage(t, 20)) } From 123a884d300c5dc2deaeb3de6078b5b09342a75c Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 19:58:39 +0200 Subject: [PATCH 23/28] draw: Use the triangle's first vertex color in DrawTrianglesWireframe instead of looking up the color at world origin --- draw.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/draw.go b/draw.go index c48bbf7..32b48f5 100644 --- a/draw.go +++ b/draw.go @@ -79,10 +79,12 @@ func DrawTrianglesOver(dst draw.Image, triangles []Triangle) { } } -// DrawTrianglesWireframe draws triangles on dst. +// DrawTrianglesWireframe draws triangles on dst using each triangle's +// first vertex color. func DrawTrianglesWireframe(dst draw.Image, triangles []Triangle) { for _, t := range triangles { - t.DrawWireframe(dst, t.Color(V(0, 0))) + a, _, _ := t.Colors() + t.DrawWireframe(dst, a) } } From 9c0c846216abb98e9783346edc685dc9edb7aa42 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 20:02:29 +0200 Subject: [PATCH 24/28] paletted: Bounds-check ColorIndexAt and SetColorIndex so out-of-range coordinates return 0 / no-op instead of panicking --- paletted_image.go | 14 ++++++++++---- paletted_image_test.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/paletted_image.go b/paletted_image.go index 395dbae..98d06db 100644 --- a/paletted_image.go +++ b/paletted_image.go @@ -159,16 +159,22 @@ func (p *Paletted) Put(x, y int, index uint8) { } // ColorIndexAt returns the color index at (x, y). +// Returns 0 when (x, y) is outside the image bounds. func (p *Paletted) ColorIndexAt(x, y int) uint8 { - if o := p.PixOffset(x, y); o < len(p.Pix) { - return p.Pix[o] + if !(image.Point{x, y}.In(p.Rect)) { + return 0 } - return 0 + return p.Pix[p.PixOffset(x, y)] } -// SetColorIndex changes the color index at (x, y). +// SetColorIndex changes the color index at (x, y). It is a no-op when +// (x, y) is outside the image bounds, matching the behavior of Set. func (p *Paletted) SetColorIndex(x, y int, index uint8) { + if !(image.Point{x, y}.In(p.Rect)) { + return + } + p.Pix[p.PixOffset(x, y)] = index } diff --git a/paletted_image_test.go b/paletted_image_test.go index b56f0d4..fd47f40 100644 --- a/paletted_image_test.go +++ b/paletted_image_test.go @@ -1,6 +1,7 @@ package gfx import ( + "image" "image/color" "testing" ) @@ -80,6 +81,40 @@ func TestPalettedSubImage(t *testing.T) { } } +func TestPalettedOutOfBoundsAccess(t *testing.T) { + m := NewPalettedImage(IR(10, 20, 14, 24), PaletteEN4) + + m.SetColorIndex(11, 21, 2) + + // Reads outside the bounds return 0 instead of panicking. + for _, p := range []image.Point{ + {0, 0}, // negative offset (left and above) + {9, 19}, // one step before Min + {14, 24}, // exactly at Max (exclusive) + {50, 50}, // far past Max + } { + if got := m.ColorIndexAt(p.X, p.Y); got != 0 { + t.Fatalf("ColorIndexAt(%v) = %d outside bounds, want 0", p, got) + } + } + + // Writes outside the bounds are no-ops instead of panicking. + for _, p := range []image.Point{ + {0, 0}, + {9, 19}, + {14, 24}, + {50, 50}, + } { + m.SetColorIndex(p.X, p.Y, 3) + m.Put(p.X, p.Y, 3) + } + + // The in-bounds write from before should be untouched. + if got := m.ColorIndexAt(11, 21); got != 2 { + t.Fatalf("ColorIndexAt(11, 21) = %d, want 2 (in-bounds pixel disturbed)", got) + } +} + func TestPalettedNonOriginRect(t *testing.T) { m := NewPalettedImage(IR(10, 20, 14, 24), PaletteEN4) From 28c9ac96ac89cf329066fecc0e5d3cf004a332b1 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 20:04:40 +0200 Subject: [PATCH 25/28] block: Round Block.DrawBounds Max up so fractional Rect edges don't lose a column or row to int() truncation --- block.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/block.go b/block.go index 8124508..613b840 100644 --- a/block.go +++ b/block.go @@ -127,14 +127,23 @@ func (b Block) DrawRectangles(dst draw.Image, origin Vec3) { func (b Block) DrawBounds(dst draw.Image, origin Vec3) { r := b.Rect(origin) + // Round Min down and Max up so the rectangle covers every pixel + // the float Rect touches — otherwise a fractional right/bottom edge + // loses a column or row through int() truncation. + minX := int(math.Floor(r.Min.X)) + minY := int(math.Floor(r.Min.Y)) + maxX := int(math.Floor(r.Max.X)) + 1 + maxY := int(math.Floor(r.Max.Y)) + 1 + if r.Area() < 20 { - DrawColor(dst, r.Bounds(), b.Color.Medium) + DrawColor(dst, IR(minX, minY, maxX, maxY), b.Color.Medium) return } rw6 := r.W() / 6 + topMaxY := int(math.Floor(r.Max.Y-rw6)) + 1 - DrawColor(dst, IR(int(r.Min.X), int(r.Min.Y), int(r.Max.X), int(r.Max.Y-rw6)), b.Color.Light) + DrawColor(dst, IR(minX, minY, maxX, topMaxY), b.Color.Light) DrawLineBresenham(dst, r.Min, V(r.Max.X, r.Min.Y), b.Color.Medium) DrawLineBresenham(dst, r.Min, V(r.Min.X, r.Max.Y-rw6), b.Color.Dark) From 77f6bc3c977a7a8c4518c4fd59aacbd555f4737c Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 20:08:07 +0200 Subject: [PATCH 26/28] gfxhttp: Add tests for raw Get response, GetImage decode path, WithHTTPClient(nil) no-op, and TileServer.DrawTile --- gfxhttp/client_test.go | 111 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 104 insertions(+), 7 deletions(-) diff --git a/gfxhttp/client_test.go b/gfxhttp/client_test.go index 8bc48fd..2b993c5 100644 --- a/gfxhttp/client_test.go +++ b/gfxhttp/client_test.go @@ -4,6 +4,7 @@ import ( "context" "errors" "image" + "io" "net/http" "net/http/httptest" "testing" @@ -16,7 +17,7 @@ func TestGetPNG(t *testing.T) { ts := testServer(palettedPNGHandler) defer ts.Close() - m, err := GetPNG(context.Background(), ts.URL) + m, err := GetPNG(t.Context(), ts.URL) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -45,7 +46,7 @@ func TestGetTileset(t *testing.T) { ts := testServer(palettedPNGHandler) defer ts.Close() - tileset, err := GetTileset(context.Background(), gfx.PaletteAmmo8, gfx.Pt(3, 3), ts.URL) + tileset, err := GetTileset(t.Context(), gfx.PaletteAmmo8, gfx.Pt(3, 3), ts.URL) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -61,7 +62,7 @@ func TestGetPNGStatusError(t *testing.T) { }) defer ts.Close() - _, err := GetPNG(context.Background(), ts.URL) + _, err := GetPNG(t.Context(), ts.URL) if err == nil { t.Fatalf("expected error, got nil") } @@ -84,7 +85,7 @@ func TestGetContextCancellation(t *testing.T) { }) defer ts.Close() - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) cancel() _, err := GetPNG(ctx, ts.URL) @@ -110,7 +111,7 @@ func TestWithHeader(t *testing.T) { WithHeader("Accept", "image/png"), ) - if _, err := c.GetPNG(context.Background(), ts.URL); err != nil { + if _, err := c.GetPNG(t.Context(), ts.URL); err != nil { t.Fatalf("unexpected error: %v", err) } if seenAuth != "Bearer secret" { @@ -134,7 +135,7 @@ func TestWithUserAgentBeatsWithHeader(t *testing.T) { WithUserAgent("via-option"), ) - if _, err := c.GetPNG(context.Background(), ts.URL); err != nil { + if _, err := c.GetPNG(t.Context(), ts.URL); err != nil { t.Fatalf("unexpected error: %v", err) } if seenUA != "via-option" { @@ -155,7 +156,7 @@ func TestWithHeaderReplaces(t *testing.T) { WithHeader("X-Token", "second"), ) - if _, err := c.GetPNG(context.Background(), ts.URL); err != nil { + if _, err := c.GetPNG(t.Context(), ts.URL); err != nil { t.Fatalf("unexpected error: %v", err) } if seen != "second" { @@ -163,6 +164,102 @@ func TestWithHeaderReplaces(t *testing.T) { } } +func TestClientGetRawResponse(t *testing.T) { + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("X-Test", "value") + w.WriteHeader(http.StatusOK) + w.Write([]byte("hello")) + }) + defer ts.Close() + + resp, err := Get(t.Context(), ts.URL) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + t.Fatalf("StatusCode = %d, want %d", resp.StatusCode, http.StatusOK) + } + if got := resp.Header.Get("X-Test"); got != "value" { + t.Fatalf("X-Test header = %q, want %q", got, "value") + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + t.Fatalf("ReadAll: %v", err) + } + if string(body) != "hello" { + t.Fatalf("body = %q, want %q", body, "hello") + } +} + +func TestClientGetRawDoesNotErrOnNon2xx(t *testing.T) { + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "boom", http.StatusInternalServerError) + }) + defer ts.Close() + + resp, err := Get(t.Context(), ts.URL) + if err != nil { + t.Fatalf("Get returned an error on 500: %v (raw Get should leave status checks to the caller)", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusInternalServerError { + t.Fatalf("StatusCode = %d, want %d", resp.StatusCode, http.StatusInternalServerError) + } +} + +func TestGetImage(t *testing.T) { + ts := testServer(palettedPNGHandler) + defer ts.Close() + + m, err := GetImage(t.Context(), ts.URL) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if got, want := m.Bounds(), gfx.IR(0, 0, 6, 6); !got.Eq(want) { + t.Fatalf("m.Bounds() = %v, want %v", got, want) + } +} + +func TestWithHTTPClientNilIsNoOp(t *testing.T) { + c := NewClient(WithHTTPClient(nil)) + + if c.httpClient == nil { + t.Fatalf("httpClient is nil after WithHTTPClient(nil); expected the default *http.Client to be kept") + } + if got, want := c.httpClient.Timeout, DefaultTimeout; got != want { + t.Fatalf("httpClient.Timeout = %v, want %v (default kept)", got, want) + } +} + +func TestTileServerDrawTile(t *testing.T) { + var requested string + ts := testServer(func(w http.ResponseWriter, r *http.Request) { + requested = r.URL.Path + w.Write(palettedPNGData) + }) + defer ts.Close() + + // Pretend the URL pattern is "///"; Rawurl uses + // the gt's Zoom, X, Y in that order. + server := &TileServer{Format: ts.URL + "/%d/%d/%d", Client: NewClient()} + + dst := gfx.NewImage(16, 16) + gt := gfx.GT(3, 4, 5) + gp := gfx.GP(0, 0) + + if err := server.DrawTile(t.Context(), dst, gt, gp); err != nil { + t.Fatalf("DrawTile: %v", err) + } + + if want := "/3/4/5"; requested != want { + t.Fatalf("requested path = %q, want %q", requested, want) + } +} + func TestNewClientOptions(t *testing.T) { c := NewClient(WithUserAgent("ua"), WithTimeout(0)) From 51ccd75344b1b7f0b1849fa28dbb9086161e7067 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 20:11:15 +0200 Subject: [PATCH 27/28] doc: List WithHeader alongside the other gfxhttp options --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2fd2789..601bf21 100644 --- a/README.md +++ b/README.md @@ -421,9 +421,10 @@ import "github.com/peterhellberg/gfx/gfxhttp" img, err := gfxhttp.GetPNG(ctx, "https://example.com/sprite.png") ``` -`gfxhttp.NewClient` accepts options like `WithUserAgent`, `WithTimeout` and -`WithHTTPClient`. Non-2xx responses are returned as `*gfxhttp.StatusError`. -Map tile servers are available through `gfxhttp.TileServer`. +`gfxhttp.NewClient` accepts options like `WithUserAgent`, `WithTimeout`, +`WithHTTPClient` and `WithHeader`. Non-2xx responses are returned as +`*gfxhttp.StatusError`. Map tile servers are available through +`gfxhttp.TileServer`. ## Log From e04f05bc2395ed2283c266f97df635f96d26c790 Mon Sep 17 00:00:00 2001 From: Peter Hellberg Date: Thu, 28 May 2026 20:46:37 +0200 Subject: [PATCH 28/28] gfx: Drop !tinygo build constraints from files whose imports TinyGo now supports --- animation.go | 2 -- base64.go | 2 -- batch.go | 2 -- block.go | 2 -- blocks.go | 2 -- box.go | 2 -- cie_lab.go | 2 -- decode.go | 2 -- draw_target.go | 2 -- drawer.go | 2 -- geo.go | 2 -- hsl.go | 2 -- hsv.go | 2 -- hunter_lab.go | 2 -- imdraw.go | 2 -- int.go | 2 -- json.go | 2 -- linear_scaler.go | 2 -- playground.go | 2 -- signed_distance.go | 2 -- xyz.go | 2 -- 21 files changed, 42 deletions(-) diff --git a/animation.go b/animation.go index ceb0809..7aceffa 100644 --- a/animation.go +++ b/animation.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/base64.go b/base64.go index 6de0ffb..0d0d86b 100644 --- a/base64.go +++ b/base64.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/batch.go b/batch.go index 9e3aefc..814b5f9 100644 --- a/batch.go +++ b/batch.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import "image/color" diff --git a/block.go b/block.go index 613b840..26cad6d 100644 --- a/block.go +++ b/block.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/blocks.go b/blocks.go index bcc3de7..e1c115f 100644 --- a/blocks.go +++ b/blocks.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/box.go b/box.go index 49d5209..77c3123 100644 --- a/box.go +++ b/box.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx // Box is a 3D cuboid with a min and max Vec3 diff --git a/cie_lab.go b/cie_lab.go index 25b2a07..fb2e4ce 100644 --- a/cie_lab.go +++ b/cie_lab.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import "math" diff --git a/decode.go b/decode.go index d51d858..476ac16 100644 --- a/decode.go +++ b/decode.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/draw_target.go b/draw_target.go index b45b1cc..716e23f 100644 --- a/draw_target.go +++ b/draw_target.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/drawer.go b/drawer.go index 2fd67e2..b6f8686 100644 --- a/drawer.go +++ b/drawer.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx // Drawer glues all the fundamental interfaces (Target, Triangles, Picture) into a coherent and the diff --git a/geo.go b/geo.go index d0461bb..95bc9d3 100644 --- a/geo.go +++ b/geo.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/hsl.go b/hsl.go index b032c4e..fd22bb3 100644 --- a/hsl.go +++ b/hsl.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/hsv.go b/hsv.go index 77a25e8..a63893c 100644 --- a/hsv.go +++ b/hsv.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/hunter_lab.go b/hunter_lab.go index 67063fd..c2c4148 100644 --- a/hunter_lab.go +++ b/hunter_lab.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import "math" diff --git a/imdraw.go b/imdraw.go index 0b2782f..de47465 100644 --- a/imdraw.go +++ b/imdraw.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/int.go b/int.go index d81d29c..ec90e5a 100644 --- a/int.go +++ b/int.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx // IntAbs returns the absolute value of x. diff --git a/json.go b/json.go index 362e10b..dadc2dc 100644 --- a/json.go +++ b/json.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import ( diff --git a/linear_scaler.go b/linear_scaler.go index a39cc89..2da4b56 100644 --- a/linear_scaler.go +++ b/linear_scaler.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import "sort" diff --git a/playground.go b/playground.go index 92b82d2..b1df60d 100644 --- a/playground.go +++ b/playground.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import "image" diff --git a/signed_distance.go b/signed_distance.go index 2b6581a..98ed54a 100644 --- a/signed_distance.go +++ b/signed_distance.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import "math" diff --git a/xyz.go b/xyz.go index 2617df7..c11ee73 100644 --- a/xyz.go +++ b/xyz.go @@ -1,5 +1,3 @@ -//go:build !tinygo - package gfx import (