From a3f9a0009f0cced419c639bc9ef0732531ceb148 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Thu, 8 Nov 2018 15:15:35 -0500 Subject: [PATCH] draw: remove Go 1.8 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change removes support for Go 1.8 and older, as they're no longer supported per release policy¹. This brings back a simpler file layout that was here prior to CL 36730, but keeps using type aliases for the exported names from the standard library's image/draw package. Don't keep the comment motivating type alias use, since that feature is no longer new, and commonly understood by now. ¹ https://tip.golang.org/doc/devel/release.html#policy Change-Id: I5fab71162cf6daa5985a048ed06011efacddf886 Reviewed-on: https://go-review.googlesource.com/c/148567 Reviewed-by: Brad Fitzpatrick --- draw/draw.go | 24 ++++++++++++++++--- draw/go1_8.go | 49 -------------------------------------- draw/go1_9.go | 57 --------------------------------------------- draw/scale_test.go | 17 +------------- draw/stdlib_test.go | 7 ------ 5 files changed, 22 insertions(+), 132 deletions(-) delete mode 100644 draw/go1_8.go delete mode 100644 draw/go1_9.go diff --git a/draw/draw.go b/draw/draw.go index dfaa7fc..cd5aaba 100644 --- a/draw/draw.go +++ b/draw/draw.go @@ -11,9 +11,8 @@ // package in the standard library. package draw -// This file, and the go1_*.go files, just contains the API exported by the -// image/draw package in the standard library. Other files in this package -// provide additional features. +// This file just contains the API exported by the image/draw package in the +// standard library. Other files in this package provide additional features. import ( "image" @@ -32,6 +31,9 @@ func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mas draw.DrawMask(dst, r, src, sp, mask, mp, draw.Op(op)) } +// Drawer contains the Draw method. +type Drawer = draw.Drawer + // FloydSteinberg is a Drawer that is the Src Op with Floyd-Steinberg error // diffusion. var FloydSteinberg Drawer = floydSteinberg{} @@ -41,3 +43,19 @@ type floydSteinberg struct{} func (floydSteinberg) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) { draw.FloydSteinberg.Draw(dst, r, src, sp) } + +// Image is an image.Image with a Set method to change a single pixel. +type Image = draw.Image + +// Op is a Porter-Duff compositing operator. +type Op = draw.Op + +const ( + // Over specifies ``(src in mask) over dst''. + Over Op = draw.Over + // Src specifies ``src in mask''. + Src Op = draw.Src +) + +// Quantizer produces a palette for an image. +type Quantizer = draw.Quantizer diff --git a/draw/go1_8.go b/draw/go1_8.go deleted file mode 100644 index ec192b7..0000000 --- a/draw/go1_8.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.9,!go1.8.typealias - -package draw - -import ( - "image" - "image/color" - "image/draw" -) - -// Drawer contains the Draw method. -type Drawer interface { - // Draw aligns r.Min in dst with sp in src and then replaces the - // rectangle r in dst with the result of drawing src on dst. - Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) -} - -// Image is an image.Image with a Set method to change a single pixel. -type Image interface { - image.Image - Set(x, y int, c color.Color) -} - -// Op is a Porter-Duff compositing operator. -type Op int - -const ( - // Over specifies ``(src in mask) over dst''. - Over Op = Op(draw.Over) - // Src specifies ``src in mask''. - Src Op = Op(draw.Src) -) - -// Draw implements the Drawer interface by calling the Draw function with -// this Op. -func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) { - (draw.Op(op)).Draw(dst, r, src, sp) -} - -// Quantizer produces a palette for an image. -type Quantizer interface { - // Quantize appends up to cap(p) - len(p) colors to p and returns the - // updated palette suitable for converting m to a paletted image. - Quantize(p color.Palette, m image.Image) color.Palette -} diff --git a/draw/go1_9.go b/draw/go1_9.go deleted file mode 100644 index fc548e9..0000000 --- a/draw/go1_9.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.9 go1.8.typealias - -package draw - -import ( - "image/draw" -) - -// We use type aliases (new in Go 1.9) for the exported names from the standard -// library's image/draw package. This is not merely syntactic sugar for -// -// type Drawer draw.Drawer -// -// as aliasing means that the types in this package, such as draw.Image and -// draw.Op, are identical to the corresponding draw.Image and draw.Op types in -// the standard library. In comparison, prior to Go 1.9, the code in go1_8.go -// defines new types that mimic the old but are different types. -// -// The package documentation, in draw.go, explicitly gives the intent of this -// package: -// -// This package is a superset of and a drop-in replacement for the -// image/draw package in the standard library. -// -// Drop-in replacement means that I can replace all of my "image/draw" imports -// with "golang.org/x/image/draw", to access additional features in this -// package, and no further changes are required. That's mostly true, but not -// completely true unless we use type aliases. -// -// Without type aliases, users might need to import both "image/draw" and -// "golang.org/x/image/draw" in order to convert from two conceptually -// equivalent but different (from the compiler's point of view) types, such as -// from one draw.Op type to another draw.Op type, to satisfy some other -// interface or function signature. - -// Drawer contains the Draw method. -type Drawer = draw.Drawer - -// Image is an image.Image with a Set method to change a single pixel. -type Image = draw.Image - -// Op is a Porter-Duff compositing operator. -type Op = draw.Op - -const ( - // Over specifies ``(src in mask) over dst''. - Over Op = draw.Over - // Src specifies ``src in mask''. - Src Op = draw.Src -) - -// Quantizer produces a palette for an image. -type Quantizer = draw.Quantizer diff --git a/draw/scale_test.go b/draw/scale_test.go index ea41940..042a82d 100644 --- a/draw/scale_test.go +++ b/draw/scale_test.go @@ -519,9 +519,7 @@ func TestRectDstMask(t *testing.T) { for _, dstMaskP := range dstMaskPs { dstInside := mk(q, nil, image.Point{}) for _, wrap := range []bool{false, true} { - // TODO: replace "rectImage(rect)" with "rect" once Go 1.5 is - // released, where an image.Rectangle implements image.Image. - dstMask := image.Image(rectImage(rect)) + dstMask := image.Image(rect) if wrap { dstMask = srcWrapper{dstMask} } @@ -562,19 +560,6 @@ func TestDstMaskSameSizeCopy(t *testing.T) { }) } -// TODO: delete this wrapper type once Go 1.5 is released, where an -// image.Rectangle implements image.Image. -type rectImage image.Rectangle - -func (r rectImage) ColorModel() color.Model { return color.Alpha16Model } -func (r rectImage) Bounds() image.Rectangle { return image.Rectangle(r) } -func (r rectImage) At(x, y int) color.Color { - if (image.Point{x, y}).In(image.Rectangle(r)) { - return color.Opaque - } - return color.Transparent -} - // The fooWrapper types wrap the dst or src image to avoid triggering the // type-specific fast path implementations. type ( diff --git a/draw/stdlib_test.go b/draw/stdlib_test.go index 9015bfd..7ee8770 100644 --- a/draw/stdlib_test.go +++ b/draw/stdlib_test.go @@ -2,15 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build go1.9 - package draw -// This file contains tests that depend on the exact behavior of the -// image/color package in the standard library. The color conversion formula -// from YCbCr to RGBA changed between Go 1.4 and Go 1.5, and between Go 1.8 and -// Go 1.9, so this file's tests are only enabled for Go 1.9 and above. - import ( "bytes" "image"