Cache TString version of UITextMessage.MsgText

This commit is contained in:
Tulir Asokan 2018-04-11 19:36:15 +03:00
parent 92a2428865
commit 7e5e802e90

View File

@ -42,6 +42,7 @@ type UITextMessage struct {
MsgState ifc.MessageState MsgState ifc.MessageState
MsgIsHighlight bool MsgIsHighlight bool
MsgIsService bool MsgIsService bool
text tstring.TString
buffer []tstring.TString buffer []tstring.TString
prevBufferWidth int prevBufferWidth int
} }
@ -220,6 +221,7 @@ func (msg *UITextMessage) Type() string {
func (msg *UITextMessage) SetType(msgtype string) { func (msg *UITextMessage) SetType(msgtype string) {
msg.MsgType = msgtype msg.MsgType = msgtype
msg.text = nil
} }
func (msg *UITextMessage) Text() string { func (msg *UITextMessage) Text() string {
@ -228,6 +230,7 @@ func (msg *UITextMessage) Text() string {
func (msg *UITextMessage) SetText(text string) { func (msg *UITextMessage) SetText(text string) {
msg.MsgText = text msg.MsgText = text
msg.text = nil
} }
func (msg *UITextMessage) State() ifc.MessageState { func (msg *UITextMessage) State() ifc.MessageState {
@ -236,6 +239,7 @@ func (msg *UITextMessage) State() ifc.MessageState {
func (msg *UITextMessage) SetState(state ifc.MessageState) { func (msg *UITextMessage) SetState(state ifc.MessageState) {
msg.MsgState = state msg.MsgState = state
msg.text = nil
} }
func (msg *UITextMessage) IsHighlight() bool { func (msg *UITextMessage) IsHighlight() bool {
@ -244,6 +248,7 @@ func (msg *UITextMessage) IsHighlight() bool {
func (msg *UITextMessage) SetIsHighlight(isHighlight bool) { func (msg *UITextMessage) SetIsHighlight(isHighlight bool) {
msg.MsgIsHighlight = isHighlight msg.MsgIsHighlight = isHighlight
msg.text = nil
} }
func (msg *UITextMessage) IsService() bool { func (msg *UITextMessage) IsService() bool {
@ -252,10 +257,14 @@ func (msg *UITextMessage) IsService() bool {
func (msg *UITextMessage) SetIsService(isService bool) { func (msg *UITextMessage) SetIsService(isService bool) {
msg.MsgIsService = isService msg.MsgIsService = isService
msg.text = nil
} }
func (msg *UITextMessage) GetTStringText() tstring.TString { func (msg *UITextMessage) GetTStringText() tstring.TString {
return tstring.NewColorTString(msg.Text(), msg.TextColor()) if msg.text == nil || len(msg.text) == 0 {
msg.text = tstring.NewColorTString(msg.Text(), msg.TextColor())
}
return msg.text
} }
// Regular expressions used to split lines when calculating the buffer. // Regular expressions used to split lines when calculating the buffer.
@ -278,7 +287,7 @@ func (msg *UITextMessage) CalculateBuffer(width int) {
text := msg.GetTStringText() text := msg.GetTStringText()
if msg.MsgType == "m.emote" { if msg.MsgType == "m.emote" {
text = tstring.NewColorTString(fmt.Sprintf("* %s %s", msg.MsgSender, text.String()), msg.TextColor()) text = tstring.NewColorTString(fmt.Sprintf("* %s %s", msg.MsgSender, text.String()), msg.TextColor())
text.Colorize(2, len(msg.MsgSender), msg.SenderColor()) text.Colorize(0, len(msg.MsgSender), msg.SenderColor())
} }
forcedLinebreaks := text.Split('\n') forcedLinebreaks := text.Split('\n')