diff options
author | Jaron Swab <jrswab@gmail.com> | 2019-06-15 11:01:05 -0400 |
---|---|---|
committer | Jaron Swab <jrswab@gmail.com> | 2019-06-15 11:01:05 -0400 |
commit | 3ebfb87da26a46ecfa3863e478d9272ab12260b4 (patch) | |
tree | 8cc1e0d39f7de5fc71c81475ebfcc4f1b92a9a7d /ui | |
parent | ae3bb9c7a39202ba462b3b8a0a564804a5517cf4 (diff) |
Scale image message based on the user's text area.
Using the "image" package from the standard library the images loaded by
gomuks now scale to one third the size of the text area. The image data
contains both hight and width while the scaling uses only width the
option to scale by hight is possible if passed into `CalculateBuffer()`.
`ansimage.NewScaledFromReader()` now takes the new variable based off
the size of the buffers' width.
This may resolve issue #92
Diffstat (limited to 'ui')
-rw-r--r-- | ui/messages/imagemessage.go | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/ui/messages/imagemessage.go b/ui/messages/imagemessage.go index 01a6500..c891687 100644 --- a/ui/messages/imagemessage.go +++ b/ui/messages/imagemessage.go @@ -19,6 +19,7 @@ package messages import ( "bytes" "fmt" + "image" "image/color" "maunium.net/go/mautrix" @@ -100,11 +101,13 @@ func (msg *ImageMessage) Path() string { // CalculateBuffer generates the internal buffer for this message that consists // of the text of this message split into lines at most as wide as the width -// parameter. +// parameter. If the message width is larger than the width of the buffer +// the message is scaled to one third the buffer width. func (msg *ImageMessage) CalculateBuffer(prefs config.UserPreferences, width int) { if width < 2 { return } + msg.CalculateReplyBuffer(prefs, width) if prefs.BareMessageView || prefs.DisableImages { @@ -112,12 +115,21 @@ func (msg *ImageMessage) CalculateBuffer(prefs config.UserPreferences, width int return } - image, err := ansimage.NewScaledFromReader(bytes.NewReader(msg.data), 0, width, color.Black) + img, _, err := image.DecodeConfig(bytes.NewReader(msg.data)) + if err != nil { + debug.Print("Image could not be decoded:", err) + } + imgWidth := img.Width + if img.Width > width { + imgWidth = width / 3 + } + + ansImage, err := ansimage.NewScaledFromReader(bytes.NewReader(msg.data), 0, imgWidth, color.Black) if err != nil { msg.buffer = []tstring.TString{tstring.NewColorTString("Failed to display image", tcell.ColorRed)} debug.Print("Failed to display image:", err) return } - msg.buffer = image.Render() + msg.buffer = ansImage.Render() } |