Changed Buffer.Render signature.
Added BufferControl on top of Buffer.
This commit is contained in:
parent
67658d3bee
commit
04779d6588
37
ui/buffer.go
37
ui/buffer.go
@ -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) {}
|
||||||
|
@ -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)
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user