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