aboutsummaryrefslogtreecommitdiff
path: root/ui/messages
diff options
context:
space:
mode:
authorJaron Swab <jrswab@gmail.com>2019-06-15 11:01:05 -0400
committerJaron Swab <jrswab@gmail.com>2019-06-15 11:01:05 -0400
commit3ebfb87da26a46ecfa3863e478d9272ab12260b4 (patch)
tree8cc1e0d39f7de5fc71c81475ebfcc4f1b92a9a7d /ui/messages
parentae3bb9c7a39202ba462b3b8a0a564804a5517cf4 (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/messages')
-rw-r--r--ui/messages/imagemessage.go18
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()
}