aboutsummaryrefslogtreecommitdiff
path: root/ui/message-view.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2019-04-07 18:21:38 +0300
committerTulir Asokan <tulir@maunium.net>2019-04-07 18:21:38 +0300
commitb0c4ef81e9a1c7d9376685875d795ad3b5d8db01 (patch)
tree57f4ffa5957fa89aa1b65927b0259c7eb6965959 /ui/message-view.go
parent21b81ccb2716d73cde4eda805cf1f5ea1642412e (diff)
More changes to do #91
Diffstat (limited to 'ui/message-view.go')
-rw-r--r--ui/message-view.go38
1 files changed, 25 insertions, 13 deletions
diff --git a/ui/message-view.go b/ui/message-view.go
index f2c7260..20831f1 100644
--- a/ui/message-view.go
+++ b/ui/message-view.go
@@ -75,6 +75,7 @@ func NewMessageView(parent *RoomView) *MessageView {
textBuffer: make([]tstring.TString, 0),
metaBuffer: make([]ifc.MessageMeta, 0),
+ width: 80,
widestSender: 5,
prevWidth: -1,
prevHeight: -1,
@@ -159,8 +160,8 @@ func (view *MessageView) appendBuffer(message messages.UIMessage) {
}
}
- view.textBuffer = append(view.textBuffer, message.Buffer()...)
- for range message.Buffer() {
+ for i := 0; i < message.Height(); i++ {
+ view.textBuffer = append(view.textBuffer, nil)
view.metaBuffer = append(view.metaBuffer, message)
}
view.prevMsgCount++
@@ -200,10 +201,15 @@ func (view *MessageView) replaceBuffer(original messages.UIMessage, new messages
end++
}
- view.textBuffer = append(append(view.textBuffer[0:start], new.Buffer()...), view.textBuffer[end:]...)
- if len(new.Buffer()) != end-start {
+ if new.Height() == 0 {
+ new.CalculateBuffer(view.prevPrefs, view.prevWidth)
+ }
+
+ textBuf := make([]tstring.TString, new.Height())
+ view.textBuffer = append(append(view.textBuffer[0:start], textBuf...), view.textBuffer[end:]...)
+ if new.Height() != end-start {
metaBuffer := view.metaBuffer[0:start]
- for range new.Buffer() {
+ for i := 0; i < new.Height(); i++ {
metaBuffer = append(metaBuffer, new)
}
view.metaBuffer = append(metaBuffer, view.metaBuffer[end:]...)
@@ -504,16 +510,22 @@ func (view *MessageView) Draw(screen mauview.Screen) {
meta.SenderColor())
}
prevMeta = meta
- htmlMessage, ok := meta.(*messages.HTMLMessage)
- if ok {
- htmlMessage.Draw(mauview.NewProxyScreen(screen, 0, line, view.width, htmlMessage.Height()))
- if ok {
- line += htmlMessage.Height()
- continue
+ }
+
+ message, ok := meta.(messages.UIMessage)
+ if ok {
+ for i := index - 1; i >= 0 && view.metaBuffer[i] == meta; i-- {
+ line--
+ }
+ message.Draw(mauview.NewProxyScreen(screen, messageX, line, view.width-messageX, message.Height()))
+ if !bareMode {
+ for i := line; i < line+message.Height(); i++ {
+ screen.SetContent(separatorX, i, borderChar, nil, borderStyle)
}
}
+ line += message.Height() - 1
+ } else {
+ text.Draw(screen, messageX, line)
}
-
- text.Draw(screen, messageX, line)
}
}