From cb699e7057e573872485e560d384e61b96be6548 Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Wed, 25 Jan 2017 17:33:33 +0100
Subject: [PATCH] add Canvas.Draw and remove SetTransform/MaskColor from Sprite

---
 canvas.go   | 19 +++++++++++++++++++
 graphics.go | 36 +++++-------------------------------
 2 files changed, 24 insertions(+), 31 deletions(-)

diff --git a/canvas.go b/canvas.go
index 30e21d2..c931567 100644
--- a/canvas.go
+++ b/canvas.go
@@ -19,6 +19,8 @@ type Canvas struct {
 	copyVs *pixelgl.VertexSlice
 	smooth bool
 
+	drawTd TrianglesDrawer
+
 	pic *Picture
 	mat mgl32.Mat3
 	col mgl32.Vec4
@@ -53,6 +55,16 @@ func NewCanvas(width, height float64, smooth bool) *Canvas {
 		})
 		c.copyVs.End()
 	})
+
+	c.drawTd = TrianglesDrawer{Triangles: &TrianglesData{
+		{Position: V(-1, -1), Color: NRGBA{1, 1, 1, 1}, Texture: V(0, 0)},
+		{Position: V(1, -1), Color: NRGBA{1, 1, 1, 1}, Texture: V(1, 0)},
+		{Position: V(1, 1), Color: NRGBA{1, 1, 1, 1}, Texture: V(1, 1)},
+		{Position: V(-1, -1), Color: NRGBA{1, 1, 1, 1}, Texture: V(0, 0)},
+		{Position: V(1, 1), Color: NRGBA{1, 1, 1, 1}, Texture: V(1, 1)},
+		{Position: V(-1, 1), Color: NRGBA{1, 1, 1, 1}, Texture: V(0, 1)},
+	}}
+
 	c.pic = nil
 	c.mat = mgl32.Ident3()
 	c.col = mgl32.Vec4{1, 1, 1, 1}
@@ -112,6 +124,13 @@ func (c *Canvas) Clear(col color.Color) {
 	})
 }
 
+// Draw draws the content of the Canvas onto another Target. If no transform is applied, the content
+// is fully stretched to fit the Target.
+func (c *Canvas) Draw(t Target) {
+	t.SetPicture(c.Content())
+	c.drawTd.Draw(t)
+}
+
 // MakeTriangles returns Triangles that draw onto this Canvas.
 func (c *Canvas) MakeTriangles(t Triangles) Triangles {
 	tpcs := NewGLTriangles(c.s, t).(trianglesPositionColorTexture)
diff --git a/graphics.go b/graphics.go
index 899bc90..a2efd7c 100644
--- a/graphics.go
+++ b/graphics.go
@@ -1,9 +1,6 @@
 package pixel
 
-import (
-	"fmt"
-	"image/color"
-)
+import "fmt"
 
 // TrianglesData specifies a list of Triangles vertices with three common properties: Position,
 // Color and Texture.
@@ -156,12 +153,11 @@ func (td *TrianglesDrawer) Append(t Triangles) {
 	td.Triangles.Append(t)
 }
 
-// Sprite is a picture, positioned somewhere, with an optional mask color.
+// Sprite is a picture that can be drawn onto a Target. To change the position/rotation/scale of
+// the Sprite, use Target's SetTransform method.
 type Sprite struct {
-	td        TrianglesDrawer
-	pic       *Picture
-	transform []Transform
-	maskColor color.Color
+	td  TrianglesDrawer
+	pic *Picture
 }
 
 // NewSprite creates a Sprite with the supplied Picture. The dimensions of the returned Sprite match
@@ -193,30 +189,8 @@ func (s *Sprite) Picture() *Picture {
 	return s.pic
 }
 
-// SetTransform sets a chain of Transforms that will be applied to this Sprite in reverse order.
-func (s *Sprite) SetTransform(t ...Transform) {
-	s.transform = t
-}
-
-// Transform returns the current chain of Transforms that this Sprite is transformed by.
-func (s *Sprite) Transform() []Transform {
-	return s.transform
-}
-
-// SetMaskColor changes the mask color of the Sprite.
-func (s *Sprite) SetMaskColor(c color.Color) {
-	s.maskColor = c
-}
-
-// MaskColor returns the current mask color of the Sprite.
-func (s *Sprite) MaskColor() color.Color {
-	return s.maskColor
-}
-
 // Draw draws the Sprite onto the provided Target.
 func (s *Sprite) Draw(target Target) {
 	target.SetPicture(s.pic)
-	target.SetTransform(s.transform...)
-	target.SetMaskColor(s.maskColor)
 	s.td.Draw(target)
 }
-- 
GitLab