Render reactions properly in modern view

This commit is contained in:
FIGBERT 2023-03-20 14:41:52 -07:00
parent 7a2f907528
commit d4e820579c
No known key found for this signature in database
GPG key ID: 67F1598D607A844B
2 changed files with 19 additions and 11 deletions

View file

@ -664,8 +664,10 @@ func (view *MessageView) Draw(screen mauview.Screen) {
index := indexOffset + line index := indexOffset + line
msg := view.msgBuffer[index] msg := view.msgBuffer[index]
header := view.showModernHeader(msg)
if msg == prevMsg { if msg == prevMsg {
debug.Print("Unexpected re-encounter of", msg, msg.Height(view.showModernHeader(msg)), "at", line, index) debug.Print("Unexpected re-encounter of", msg, msg.Height(header), "at", line, index)
line++ line++
continue continue
} }
@ -691,7 +693,7 @@ func (view *MessageView) Draw(screen mauview.Screen) {
line-- line--
} }
offset := 0 offset := 0
if view.showModernHeader(msg) { if header {
offset = 1 offset = 1
boldStyle := tcell.StyleDefault.Bold(true) boldStyle := tcell.StyleDefault.Bold(true)
@ -705,8 +707,8 @@ func (view *MessageView) Draw(screen mauview.Screen) {
boldStyle.Foreground(msg.TimestampColor()), boldStyle.Foreground(msg.TimestampColor()),
) )
} }
msg.Draw(mauview.NewProxyScreen(screen, messageX, line+offset, view.width()-messageX, msg.Height(view.showModernHeader(msg)))) msg.Draw(mauview.NewProxyScreen(screen, messageX, line+offset, view.width()-messageX, msg.Height(header)), header)
line += msg.Height(view.showModernHeader(msg)) line += msg.Height(header)
prevMsg = msg prevMsg = msg
} }

View file

@ -311,12 +311,18 @@ func (msg *UIMessage) SetIsHighlight(isHighlight bool) {
msg.IsHighlight = isHighlight msg.IsHighlight = isHighlight
} }
func (msg *UIMessage) DrawReactions(screen mauview.Screen) { func (msg *UIMessage) DrawReactions(screen mauview.Screen, modernHeader bool) {
if len(msg.Reactions) == 0 { if len(msg.Reactions) == 0 {
return return
} }
diff := 1
if modernHeader {
diff = 2
}
width, height := screen.Size() width, height := screen.Size()
screen = mauview.NewProxyScreen(screen, 0, height-1, width, 1) screen = mauview.NewProxyScreen(screen, 0, height-diff, width, 1)
x := 0 x := 0
for _, reaction := range msg.Reactions { for _, reaction := range msg.Reactions {
@ -328,10 +334,10 @@ func (msg *UIMessage) DrawReactions(screen mauview.Screen) {
} }
} }
func (msg *UIMessage) Draw(screen mauview.Screen) { func (msg *UIMessage) Draw(screen mauview.Screen, modernHeader bool) {
proxyScreen := msg.DrawReply(screen) proxyScreen := msg.DrawReply(screen, modernHeader)
msg.Renderer.Draw(proxyScreen, msg) msg.Renderer.Draw(proxyScreen, msg)
msg.DrawReactions(proxyScreen) msg.DrawReactions(proxyScreen, modernHeader)
if msg.IsSelected { if msg.IsSelected {
w, h := screen.Size() w, h := screen.Size()
for x := 0; x < w; x++ { for x := 0; x < w; x++ {
@ -366,7 +372,7 @@ func (msg *UIMessage) CalculateBuffer(preferences config.UserPreferences, width
msg.CalculateReplyBuffer(preferences, width) msg.CalculateReplyBuffer(preferences, width)
} }
func (msg *UIMessage) DrawReply(screen mauview.Screen) mauview.Screen { func (msg *UIMessage) DrawReply(screen mauview.Screen, modernHeader bool) mauview.Screen {
if msg.ReplyTo == nil { if msg.ReplyTo == nil {
return screen return screen
} }
@ -378,7 +384,7 @@ func (msg *UIMessage) DrawReply(screen mauview.Screen) mauview.Screen {
screen.SetCell(0, y, tcell.StyleDefault, '▊') screen.SetCell(0, y, tcell.StyleDefault, '▊')
} }
replyScreen := mauview.NewProxyScreen(screen, 1, 1, width-1, replyHeight) replyScreen := mauview.NewProxyScreen(screen, 1, 1, width-1, replyHeight)
msg.ReplyTo.Draw(replyScreen) msg.ReplyTo.Draw(replyScreen, modernHeader)
return mauview.NewProxyScreen(screen, 0, replyHeight+1, width, height-replyHeight-1) return mauview.NewProxyScreen(screen, 0, replyHeight+1, width, height-replyHeight-1)
} }