From 852958f4b5346a08870987faed6804f5a040d0e5 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 3 Nov 2020 16:19:54 +0100 Subject: [PATCH] gpu,widget,op/paint,gpu: remove support for ImageOp.Rect This is effectively a revert of commit gioui.org/commit/69dfd2e3a5541. ImageOp.Rect is the wrong abstraction; it implies a clipping operation that is better handled by package clip. API change. Uses of ImageOp.Rect should apply a clip.Rect before the PaintOp, or use image.RGBA.SubImage (or similar). Signed-off-by: Elias Naur --- gpu/gpu.go | 19 ++++++------------- internal/opconst/ops.go | 2 +- op/paint/paint.go | 10 ---------- widget/image.go | 2 +- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/gpu/gpu.go b/gpu/gpu.go index 009e0f7e..a28ba7c4 100644 --- a/gpu/gpu.go +++ b/gpu/gpu.go @@ -130,7 +130,6 @@ type clipOp struct { // imageOpData is the shadow of paint.ImageOp. type imageOpData struct { - rect image.Rectangle src *image.RGBA handle interface{} } @@ -170,18 +169,7 @@ func decodeImageOp(data []byte, refs []interface{}) imageOpData { if handle == nil { return imageOpData{} } - bo := binary.LittleEndian return imageOpData{ - rect: image.Rectangle{ - Min: image.Point{ - X: int(int32(bo.Uint32(data[1:]))), - Y: int(int32(bo.Uint32(data[5:]))), - }, - Max: image.Point{ - X: int(int32(bo.Uint32(data[9:]))), - Y: int(int32(bo.Uint32(data[13:]))), - }, - }, src: refs[0].(*image.RGBA), handle: handle, } @@ -962,7 +950,12 @@ func (d *drawState) materialFor(cache *resourceCache, rect f32.Rectangle, off f3 m.material = materialTexture dr := boundRectF(rect.Add(off)) sz := d.image.src.Bounds().Size() - sr := layout.FRect(d.image.rect) + sr := f32.Rectangle{ + Max: f32.Point{ + X: float32(sz.X), + Y: float32(sz.Y), + }, + } if dx := float32(dr.Dx()); dx != 0 { // Don't clip 1 px width sources. if sdx := sr.Dx(); sdx > 1 { diff --git a/internal/opconst/ops.go b/internal/opconst/ops.go index fcdb7d4b..273c48c7 100644 --- a/internal/opconst/ops.go +++ b/internal/opconst/ops.go @@ -35,7 +35,7 @@ const ( TypeTransformLen = 1 + 4*6 TypeLayerLen = 1 TypeRedrawLen = 1 + 8 - TypeImageLen = 1 + 4*4 + TypeImageLen = 1 TypePaintLen = 1 + 4*4 TypeColorLen = 1 + 4 TypeLinearGradientLen = 1 + 8*2 + 4*2 diff --git a/op/paint/paint.go b/op/paint/paint.go index 1f305897..bd596b57 100644 --- a/op/paint/paint.go +++ b/op/paint/paint.go @@ -20,9 +20,6 @@ import ( // Note: the ImageOp may keep a reference to the backing image. // See NewImageOp for details. type ImageOp struct { - // Rect is the section if the backing image to use. - Rect image.Rectangle - uniform bool color color.RGBA src *image.RGBA @@ -74,7 +71,6 @@ func NewImageOp(src image.Image) ImageOp { bounds := src.Bounds() if bounds.Min == (image.Point{}) && src.Stride == bounds.Dx()*4 { return ImageOp{ - Rect: src.Bounds(), src: src, handle: new(int), } @@ -88,7 +84,6 @@ func NewImageOp(src image.Image) ImageOp { }) draw.Draw(dst, dst.Bounds(), src, src.Bounds().Min, draw.Src) return ImageOp{ - Rect: dst.Bounds(), src: dst, handle: new(int), } @@ -110,11 +105,6 @@ func (i ImageOp) Add(o *op.Ops) { } data := o.Write(opconst.TypeImageLen, i.src, i.handle) data[0] = byte(opconst.TypeImage) - bo := binary.LittleEndian - bo.PutUint32(data[1:], uint32(i.Rect.Min.X)) - bo.PutUint32(data[5:], uint32(i.Rect.Min.Y)) - bo.PutUint32(data[9:], uint32(i.Rect.Max.X)) - bo.PutUint32(data[13:], uint32(i.Rect.Max.Y)) } func (c ColorOp) Add(o *op.Ops) { diff --git a/widget/image.go b/widget/image.go index c951235f..50a5c6ca 100644 --- a/widget/image.go +++ b/widget/image.go @@ -28,7 +28,7 @@ func (im Image) Layout(gtx layout.Context) layout.Dimensions { if scale == 0 { scale = 160.0 / 72.0 } - size := im.Src.Rect.Size() + size := im.Src.Size() wf, hf := float32(size.X), float32(size.Y) w, h := gtx.Px(unit.Dp(wf*scale)), gtx.Px(unit.Dp(hf*scale)) cs := gtx.Constraints