mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
6faed7e724
Commit 94d242d broke the widget.Image's Scale field so
that it no longer had any effect on the actual size of
the displayed image. This commit fixes that, as well as
adding tests to confirm that the widget.Image type
scales appropriately with DPI changes and its own Scale
field.
Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
// SPDX-License-Identifier: Unlicense OR MIT
|
|
|
|
package widget
|
|
|
|
import (
|
|
"image"
|
|
"testing"
|
|
|
|
"gioui.org/layout"
|
|
"gioui.org/op"
|
|
"gioui.org/op/paint"
|
|
)
|
|
|
|
func TestImageScale(t *testing.T) {
|
|
var ops op.Ops
|
|
gtx := layout.Context{
|
|
Ops: &ops,
|
|
Constraints: layout.Constraints{
|
|
Max: image.Pt(50, 50),
|
|
},
|
|
}
|
|
imgSize := image.Pt(10, 10)
|
|
img := image.NewNRGBA(image.Rectangle{Max: imgSize})
|
|
imgOp := paint.NewImageOp(img)
|
|
|
|
// Ensure the default scales correctly.
|
|
dims := Image{Src: imgOp}.Layout(gtx)
|
|
expectedSize := imgSize
|
|
expectedSize.X = int(float32(expectedSize.X) * defaultScale)
|
|
expectedSize.Y = int(float32(expectedSize.Y) * defaultScale)
|
|
if dims.Size != expectedSize {
|
|
t.Fatalf("non-scaled image is wrong size, expected %v, got %v", expectedSize, dims.Size)
|
|
}
|
|
|
|
// Ensure scaling the image via the Scale field works.
|
|
currentScale := float32(0.5)
|
|
dims = Image{Src: imgOp, Scale: float32(currentScale)}.Layout(gtx)
|
|
expectedSize = imgSize
|
|
expectedSize.X = int(float32(expectedSize.X) * currentScale)
|
|
expectedSize.Y = int(float32(expectedSize.Y) * currentScale)
|
|
if dims.Size != expectedSize {
|
|
t.Fatalf(".5 scale image is wrong size, expected %v, got %v", expectedSize, dims.Size)
|
|
}
|
|
|
|
// Ensure the image responds to changes in DPI.
|
|
currentScale = float32(1)
|
|
gtx.Metric.PxPerDp = 2
|
|
dims = Image{Src: imgOp, Scale: float32(currentScale)}.Layout(gtx)
|
|
expectedSize = imgSize
|
|
expectedSize.X = int(float32(expectedSize.X) * currentScale * gtx.Metric.PxPerDp)
|
|
expectedSize.Y = int(float32(expectedSize.Y) * currentScale * gtx.Metric.PxPerDp)
|
|
if dims.Size != expectedSize {
|
|
t.Fatalf("HiDPI non-scaled image is wrong size, expected %v, got %v", expectedSize, dims.Size)
|
|
}
|
|
|
|
// Ensure scaling the image responds to changes in DPI.
|
|
currentScale = float32(.5)
|
|
gtx.Metric.PxPerDp = 2
|
|
dims = Image{Src: imgOp, Scale: float32(currentScale)}.Layout(gtx)
|
|
expectedSize = imgSize
|
|
expectedSize.X = int(float32(expectedSize.X) * currentScale * gtx.Metric.PxPerDp)
|
|
expectedSize.Y = int(float32(expectedSize.Y) * currentScale * gtx.Metric.PxPerDp)
|
|
if dims.Size != expectedSize {
|
|
t.Fatalf("HiDPI .5 scale image is wrong size, expected %v, got %v", expectedSize, dims.Size)
|
|
}
|
|
}
|