From 21b81ccb2716d73cde4eda805cf1f5ea1642412e Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 7 Apr 2019 03:22:51 +0300 Subject: Initial changes to do #91 --- ui/message-view.go | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'ui/message-view.go') diff --git a/ui/message-view.go b/ui/message-view.go index 91f4621..f2c7260 100644 --- a/ui/message-view.go +++ b/ui/message-view.go @@ -504,6 +504,14 @@ 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 + } + } } text.Draw(screen, messageX, line) -- cgit v1.2.3 From b0c4ef81e9a1c7d9376685875d795ad3b5d8db01 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 7 Apr 2019 18:21:38 +0300 Subject: More changes to do #91 --- ui/message-view.go | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'ui/message-view.go') 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) } } -- cgit v1.2.3 From 5d7c1a4caab46f7e981aed7b9cc825b7602b4098 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 7 Apr 2019 22:54:55 +0300 Subject: Improve handling of multiple linebreaks --- ui/message-view.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'ui/message-view.go') diff --git a/ui/message-view.go b/ui/message-view.go index 20831f1..144bfca 100644 --- a/ui/message-view.go +++ b/ui/message-view.go @@ -503,12 +503,13 @@ 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 } -- cgit v1.2.3