Skip to content

Commit

Permalink
cmd/view-fits: zoom-in/zoom-out images
Browse files Browse the repository at this point in the history
First stab at implementing zooming-in and zooming-out images.

Updates #17.
  • Loading branch information
sbinet committed Nov 6, 2019
1 parent b680fbb commit 82a46ea
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 24 deletions.
33 changes: 22 additions & 11 deletions cmd/view-fits/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
"strings"

"github.com/astrogo/fitsio"
"github.com/nfnt/resize"

"golang.org/x/exp/shiny/driver"
"golang.org/x/exp/shiny/screen"
Expand Down Expand Up @@ -89,6 +90,8 @@ Controls:
Mouse controls:
- Left button: pan image
- Wheel-Up: increase zoom-level by 20%%
- Wheel-Down: decrease zoom-level by 20%%
`)
}

Expand Down Expand Up @@ -192,14 +195,17 @@ Mouse controls:
}

case mouse.ButtonRight:
// no-op

case mouse.ButtonWheelDown:
if e.Direction == mouse.DirPress {
if e.Direction == mouse.DirStep {
ctrlZoomOut(&infos[cur.file].Images[cur.img], &repaint)
}
case mouse.ButtonWheelUp:
if e.Direction == mouse.DirPress {
if e.Direction == mouse.DirStep {
ctrlZoomIn(&infos[cur.file].Images[cur.img], &repaint)
}

}

if panning {
Expand All @@ -223,16 +229,11 @@ Mouse controls:
continue
}

case key.CodeKeypadPlusSign:
case key.CodeKeypadPlusSign, key.CodeEqualSign:
if e.Direction == key.DirPress {
ctrlZoomIn(&infos[cur.file].Images[cur.img], &repaint)
}

case key.CodeEqualSign:
if e.Direction == key.DirPress && e.Modifiers&key.ModShift != 0 {
ctrlZoomIn(&infos[cur.file].Images[cur.img], &repaint)
}

case key.CodeHyphenMinus:
if e.Direction == key.DirPress {
ctrlZoomOut(&infos[cur.file].Images[cur.img], &repaint)
Expand Down Expand Up @@ -329,16 +330,17 @@ Mouse controls:
img := infos[cur.file].Images[cur.img]

release(b)
b, err = s.NewBuffer(img.Bounds().Size())
curImg := img.get()
b, err = s.NewBuffer(curImg.Bounds().Size())
if err != nil {
log.Fatal(err)
}
defer release(b)

draw.Draw(b.RGBA(), b.Bounds(), img, img.orig, draw.Src)
draw.Draw(b.RGBA(), b.Bounds(), curImg, img.orig, draw.Src)

w.Fill(sz.Bounds(), bkg, draw.Src)
w.Upload(image.Point{}, b, img.Bounds())
w.Upload(image.Point{}, b, curImg.Bounds())
w.Publish()
}

Expand Down Expand Up @@ -464,6 +466,15 @@ func ctrlZoomIn(img *imageInfo, repaint *bool) {
img.scale += 20
}

func (img *imageInfo) get() image.Image {
if img.scale == 100 {
return img.Image
}
width := uint(float64(img.scale) / 100.0 * float64(img.Bounds().Dx()))
height := uint(float64(img.scale) / 100.0 * float64(img.Bounds().Dy()))
return resize.Resize(width, height, img.Image, resize.MitchellNetravali)
}

func min(i, j int) int {
if i < j {
return i
Expand Down
8 changes: 3 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ module github.com/astrogo/fitsio
go 1.12

require (
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 // indirect
golang.org/x/exp v0.0.0-20180907224206-e88728d35e99
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 // indirect
golang.org/x/mobile v0.0.0-20180918110915-f9c332960c2a
golang.org/x/sys v0.0.0-20180918153733-ee1b12c67af4 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136
golang.org/x/mobile v0.0.0-20191031020345-0945064e013a
)
42 changes: 34 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,10 +1,36 @@
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
golang.org/x/exp v0.0.0-20180907224206-e88728d35e99 h1:7IN8+ZMp04l/19EF+wsr7NM1jyvcadKINimAtWRyQk8=
golang.org/x/exp v0.0.0-20180907224206-e88728d35e99/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81 h1:00VmoueYNlNz/aHIilyyQz/MHSqGoWJzpFv/HW8xpzI=
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/mobile v0.0.0-20180918110915-f9c332960c2a h1:g1yx1SSoLJs9YRT5kH1NQo7ioglgoKzoOXPKXU27+fU=
golang.org/x/mobile v0.0.0-20180918110915-f9c332960c2a/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/sys v0.0.0-20180918153733-ee1b12c67af4 h1:h8ij2QOL81JqJ/Vi5Ru+hl4a1yct8+XDGrgBhG0XbuE=
golang.org/x/sys v0.0.0-20180918153733-ee1b12c67af4/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 h1:estk1glOnSVeJ9tdEZZc5mAMDZk5lNJNyJ6DvrBkTEU=
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136 h1:A1gGSx58LAGVHUUsOf7IiR0u8Xb6W51gRwfDBhkdcaw=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mobile v0.0.0-20191031020345-0945064e013a h1:CrJ8+QyIm2tcw/zt9Rp/vGFsey+jndL1y5EnFwzgGOg=
golang.org/x/mobile v0.0.0-20191031020345-0945064e013a/go.mod h1:p895TfNkDgPEmEQrNiOtIl3j98d/tGU95djDj7NfyjQ=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190909214602-067311248421/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

0 comments on commit 82a46ea

Please sign in to comment.