// 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

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
