aboutsummaryrefslogtreecommitdiff
path: root/ui/message-view.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2019-04-07 23:21:11 +0300
committerTulir Asokan <tulir@maunium.net>2019-04-07 23:21:11 +0300
commite5db799fa30c5e3c7290d7ead07c84ada11087ac (patch)
tree536f231aa79c6736a0dc9e721bc51d77719deb12 /ui/message-view.go
parentb81ba7b631b5243bd61514db1787a3f9043990e0 (diff)
parent5d7c1a4caab46f7e981aed7b9cc825b7602b4098 (diff)
Merge branch 'deep-message-rendering'
Diffstat (limited to 'ui/message-view.go')
-rw-r--r--ui/message-view.go45
1 files changed, 33 insertions, 12 deletions
diff --git a/ui/message-view.go b/ui/message-view.go
index 91f4621..144bfca 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:]...)
@@ -497,15 +503,30 @@ func (view *MessageView) Draw(screen mauview.Screen) {
if len(meta.FormatTime()) > 0 {
widget.WriteLineSimpleColor(screen, meta.FormatTime(), 0, line, meta.TimestampColor())
}
- if !bareMode && (prevMeta == nil || meta.Sender() != prevMeta.Sender()) {
- widget.WriteLineColor(
- screen, mauview.AlignRight, meta.Sender(),
- usernameX, line, view.widestSender,
- meta.SenderColor())
- }
+ // TODO hiding senders might not be that nice after all, maybe an option? (disabled for now)
+ //if !bareMode && (prevMeta == nil || meta.Sender() != prevMeta.Sender()) {
+ widget.WriteLineColor(
+ screen, mauview.AlignRight, meta.Sender(),
+ usernameX, line, view.widestSender,
+ meta.SenderColor())
+ //}
prevMeta = meta
}
- text.Draw(screen, messageX, line)
+ 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)
+ }
}
}