draw: remove Go 1.8 support

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 <bradfitz@golang.org>
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 @@
 	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 @@
 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 @@
 		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 @@
 	})
 }
 
-// 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"