add Canvas.SetSize method
This commit is contained in:
parent
8e1359b45d
commit
d686841b5c
44
canvas.go
44
canvas.go
|
@ -16,6 +16,9 @@ type Canvas struct {
|
|||
f *pixelgl.Frame
|
||||
s *pixelgl.Shader
|
||||
|
||||
copyVs *pixelgl.VertexSlice
|
||||
smooth bool
|
||||
|
||||
pic *Picture
|
||||
mat mgl32.Mat3
|
||||
col mgl32.Vec4
|
||||
|
@ -24,7 +27,7 @@ type Canvas struct {
|
|||
|
||||
// NewCanvas creates a new fully transparent Canvas with specified dimensions in pixels.
|
||||
func NewCanvas(width, height float64, smooth bool) *Canvas {
|
||||
c := &Canvas{}
|
||||
c := &Canvas{smooth: smooth}
|
||||
mainthread.Call(func() {
|
||||
var err error
|
||||
c.f = pixelgl.NewFrame(int(width), int(height), smooth)
|
||||
|
@ -37,6 +40,18 @@ func NewCanvas(width, height float64, smooth bool) *Canvas {
|
|||
if err != nil {
|
||||
panic(errors.Wrap(err, "failed to create canvas"))
|
||||
}
|
||||
|
||||
c.copyVs = pixelgl.MakeVertexSlice(c.s, 6, 6)
|
||||
c.copyVs.Begin()
|
||||
c.copyVs.SetVertexData([]float32{
|
||||
-1, -1, 1, 1, 1, 1, 0, 0,
|
||||
1, -1, 1, 1, 1, 1, 1, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
-1, -1, 1, 1, 1, 1, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1,
|
||||
-1, 1, 1, 1, 1, 1, 0, 1,
|
||||
})
|
||||
c.copyVs.End()
|
||||
})
|
||||
c.pic = nil
|
||||
c.mat = mgl32.Ident3()
|
||||
|
@ -45,6 +60,33 @@ func NewCanvas(width, height float64, smooth bool) *Canvas {
|
|||
return c
|
||||
}
|
||||
|
||||
// SetSize resizes the Canvas. The original content will be stretched to the new size.
|
||||
func (c *Canvas) SetSize(width, height float64) {
|
||||
if V(width, height) == V(c.Size()) {
|
||||
return
|
||||
}
|
||||
mainthread.Call(func() {
|
||||
oldF := c.f
|
||||
c.f = pixelgl.NewFrame(int(width), int(height), c.smooth)
|
||||
|
||||
c.f.Begin()
|
||||
c.s.Begin()
|
||||
|
||||
c.s.SetUniformAttr(canvasTransformMat3, mgl32.Ident3())
|
||||
c.s.SetUniformAttr(canvasMaskColorVec4, mgl32.Vec4{1, 1, 1, 1})
|
||||
c.s.SetUniformAttr(canvasBoundsVec4, mgl32.Vec4{0, 0, 1, 1})
|
||||
|
||||
oldF.Texture().Begin()
|
||||
c.copyVs.Begin()
|
||||
c.copyVs.Draw()
|
||||
c.copyVs.End()
|
||||
oldF.Texture().End()
|
||||
|
||||
c.s.End()
|
||||
c.f.End()
|
||||
})
|
||||
}
|
||||
|
||||
// Size returns the width and the height of the Canvas in pixels.
|
||||
func (c *Canvas) Size() (width, height float64) {
|
||||
return float64(c.f.Width()), float64(c.f.Height())
|
||||
|
|
Loading…
Reference in New Issue