func (s *ScannerGV) SetClip(rect image.Rectangle) {
	s.clipImage.clip = rect
	if s.Source == &s.clipImage.ColorFuncImage.Uniform {
		s.SetColor(s.clipImage.ColorFuncImage.Uniform.C)
	} else {
		s.SetColor(s.clipImage.ColorFuncImage.colorFunc)
	}
}
SetClip sets an optional clipping rectangle to restrict rendering only to
that region -- if size is 0 then ignored (set to image.ZR to clear)
package rasterx
import (
	"image"
	"math"
	"image/color"
	"image/draw"
	"golang.org/x/image/math/fixed"
	"golang.org/x/image/vector"
)
func (c *ColorFuncImage) At(x, y int) color.Color {
	return c.colorFunc(x, y)
}
type (
	ColorFuncImage struct {
		image.Uniform
		colorFunc ColorFunc
	}
	ScannerGV struct {
		r vector.Rasterizer
		Dest                   draw.Image
		Targ                   image.Rectangle
		clipImage              *ClipImage
		Source                 image.Image
		Offset                 image.Point
		minX, minY, maxX, maxY fixed.Int26_6  
	}
)
type ClipImage struct {
	ColorFuncImage
	clip image.Rectangle
}
var noApha = color.RGBA{0, 0, 0, 0}
func (s *ScannerGV) GetPathExtent() fixed.Rectangle26_6 {
	return fixed.Rectangle26_6{Min: fixed.Point26_6{X: s.minX, Y: s.minY}, Max: fixed.Point26_6{X: s.maxX, Y: s.maxY}}
}
func (c *ClipImage) At(x, y int) color.Color {
	p := image.Point{x, y}
	if p.In(c.clip) {
		return c.ColorFuncImage.At(x, y)
	}
	return noApha
}
func (s *ScannerGV) SetWinding(useNonZeroWinding bool) {
}
func (s *ScannerGV) SetColor(clr interface{}) {
	switch c := clr.(type) {
	case color.Color:
		s.clipImage.ColorFuncImage.Uniform.C = c
		if s.clipImage.clip == image.ZR {
			s.Source = &s.clipImage.ColorFuncImage.Uniform
		} else {
			s.clipImage.ColorFuncImage.colorFunc = func(x, y int) color.Color {
				return c
			}
			s.Source = s.clipImage
		}
	case ColorFunc:
		s.clipImage.ColorFuncImage.colorFunc = c
		if s.clipImage.clip == image.ZR {
			s.Source = &s.clipImage.ColorFuncImage
		} else {
			s.Source = s.clipImage
		}
	}
}