Changed Buffer.Render signature.

Added BufferControl on top of Buffer.
This commit is contained in:
Sander Schobers 2019-04-10 21:25:41 +02:00
parent 67658d3bee
commit 04779d6588
2 changed files with 34 additions and 5 deletions

View File

@ -2,31 +2,60 @@ package ui
import "opslag.de/schobers/geom" import "opslag.de/schobers/geom"
type RenderBufferFn func(ctx Context, size geom.PointF32)
type Buffer struct { type Buffer struct {
im Image im Image
size geom.PointF32
} }
func (b *Buffer) Update(ctx Context, size geom.PointF32) error { func (b *Buffer) Update(ctx Context, size geom.PointF32) error {
if b.im != nil { if b.im != nil {
if b.im.Width() == size.X && b.im.Height() == size.Y { if size == b.size {
return nil return nil
} }
b.im.Destroy() b.im.Destroy()
b.im = nil b.im = nil
b.size = geom.ZeroPtF32
} }
im, err := ctx.Renderer().CreateImageSize(size.X, size.Y) im, err := ctx.Renderer().CreateImageSize(size.X, size.Y)
if err != nil { if err != nil {
return err return err
} }
b.im = im b.im = im
b.size = size
return nil return nil
} }
func (b *Buffer) Render(ctx Context, pos geom.PointF32, render func()) { func (b *Buffer) Render(ctx Context, pos geom.PointF32, fn RenderBufferFn) {
if b.im == nil {
return
}
renderer := ctx.Renderer() renderer := ctx.Renderer()
currTarget := renderer.Target() currTarget := renderer.Target()
renderer.RenderTo(b.im) renderer.RenderTo(b.im)
render() fn(ctx, b.size)
renderer.RenderTo(currTarget) renderer.RenderTo(currTarget)
renderer.DrawImage(b.im, pos) renderer.DrawImage(b.im, pos)
} }
type BufferControl struct {
ControlBase
buffer Buffer
}
func (c *BufferControl) Arrange(ctx Context, bounds geom.RectangleF32, offset geom.PointF32) {
c.ControlBase.Arrange(ctx, bounds, offset)
c.buffer.Update(ctx, bounds.Size())
}
func (c *BufferControl) Render(ctx Context) {
c.RenderFn(ctx, c.RenderBuffer)
}
func (c *BufferControl) RenderFn(ctx Context, render RenderBufferFn) {
c.buffer.Render(ctx, c.bounds.Min, render)
}
func (c *BufferControl) RenderBuffer(ctx Context, size geom.PointF32) {}

View File

@ -128,7 +128,7 @@ func (o *overflow) Render(ctx Context) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
o.content.Render(ctx, o.bounds.Min, func() { o.content.Render(ctx, o.bounds.Min, func(Context, geom.PointF32) {
renderer.Clear(color.Transparent) renderer.Clear(color.Transparent)
o.Content.Render(ctx) o.Content.Render(ctx)
}) })