From 4c226153017775f86b03735bf9ccc29364544687 Mon Sep 17 00:00:00 2001 From: diamondburned Date: Sat, 18 Jul 2020 18:57:57 -0700 Subject: [PATCH] Minor bug fixes and appearance tweaks --- go.mod | 2 + go.sum | 3 +- .../service/session/server/button/button.go | 13 +++--- .../ui/service/session/server/children.go | 8 ++-- internal/ui/service/session/session.go | 45 ++++++++++++++++++- internal/ui/ui.go | 6 +++ 6 files changed, 66 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 1e68290..ef116c9 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,8 @@ go 1.14 replace github.com/gotk3/gotk3 => github.com/diamondburned/gotk3 v0.0.0-20200630065217-97aeb06d705d +replace github.com/diamondburned/cchat-discord => ../cchat-discord/ + require ( github.com/Xuanwo/go-locale v0.2.0 github.com/alecthomas/chroma v0.7.3 diff --git a/go.sum b/go.sum index fe67b5d..0bb0c94 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,6 @@ github.com/diamondburned/cchat v0.0.43 h1:HetAujSaUSdnQgAUZgprNLARjf/MSWXpCfWdvX github.com/diamondburned/cchat v0.0.43/go.mod h1:+zXktogE45A0om4fT6B/z6Ii7FXNafjxsNspI0rlhbU= github.com/diamondburned/cchat v0.0.45 h1:HMVSKx1h6lh2OenWaBTvMSK531hWaXAW7I0tKZepYug= github.com/diamondburned/cchat v0.0.45/go.mod h1:+zXktogE45A0om4fT6B/z6Ii7FXNafjxsNspI0rlhbU= -github.com/diamondburned/cchat-discord v0.0.0-20200718071554-360b34de2a71 h1:4alCL+MeOJuz//uhYKuzyn8RS6+yEQFwL9SGCluNRL4= -github.com/diamondburned/cchat-discord v0.0.0-20200718071554-360b34de2a71/go.mod h1:tFB/vWkCPp2kQ7v/VkpCvM1aoB6+fvwuEU/acA/g5CY= github.com/diamondburned/cchat-mock v0.0.0-20200709231652-ad222ce5a74b h1:sq0MXjJc3yAOZvuolRxOpKQNvpMLyTmsECxQqdYgF5E= github.com/diamondburned/cchat-mock v0.0.0-20200709231652-ad222ce5a74b/go.mod h1:+bAf0m2o5qH54DmYJ/lR1HeITV53ol0JaoKyFFx3m3E= github.com/diamondburned/gotk3 v0.0.0-20200630065217-97aeb06d705d h1:Ha/I6PMKi+B4hpWclwlXj0tUMehR7Q0TNxPczzBwzPI= @@ -132,6 +130,7 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= diff --git a/internal/ui/service/session/server/button/button.go b/internal/ui/service/session/server/button/button.go index a2ac3c8..b2dbe01 100644 --- a/internal/ui/service/session/server/button/button.go +++ b/internal/ui/service/session/server/button/button.go @@ -9,6 +9,10 @@ import ( "github.com/diamondburned/cchat/text" ) +const UnreadColorDefs = ` + @define-color mentioned rgb(240, 71, 71); +` + type ToggleButtonImage struct { rich.ToggleButtonImage @@ -25,7 +29,7 @@ type ToggleButtonImage struct { var _ cchat.IconContainer = (*ToggleButtonImage)(nil) -var serverButtonCSS = primitives.PrepareCSS(` +var serverButtonCSS = primitives.PrepareClassCSS("server-button", ` .selected-server { border-left: 2px solid mix(@theme_base_color, @theme_fg_color, 0.1); background-color: mix(@theme_base_color, @theme_fg_color, 0.1); @@ -43,14 +47,13 @@ var serverButtonCSS = primitives.PrepareCSS(` background-color: alpha(@theme_fg_color, 0.05); } - @define-color mentioned rgb(240, 71, 71); - .mentioned { color: @mentioned; border-left: 2px solid alpha(@mentioned, 0.75); background-color: alpha(@mentioned, 0.05); } -`) + +`+UnreadColorDefs) func NewToggleButtonImage(content text.Rich) *ToggleButtonImage { b := rich.NewToggleButtonImage(content) @@ -63,7 +66,7 @@ func NewToggleButtonImage(content text.Rich) *ToggleButtonImage { menu: menu.NewLazyMenu(b.ToggleButton), } tb.Connect("clicked", func() { tb.clicked(tb.GetActive()) }) - primitives.AttachCSS(tb, serverButtonCSS) + serverButtonCSS(tb) return tb } diff --git a/internal/ui/service/session/server/children.go b/internal/ui/service/session/server/children.go index dd57346..6f9a519 100644 --- a/internal/ui/service/session/server/children.go +++ b/internal/ui/service/session/server/children.go @@ -171,9 +171,11 @@ func (c *Children) LoadAll() { AssertUnhollow(c) for _, row := range c.Rows { - row.Init() // this is the alloc-heavy method - row.Show() - c.Box.Add(row) + if row.IsHollow() { + row.Init() // this is the alloc-heavy method + row.Show() + c.Box.Add(row) + } } } diff --git a/internal/ui/service/session/session.go b/internal/ui/service/session/session.go index 0553296..7ccf0f3 100644 --- a/internal/ui/service/session/session.go +++ b/internal/ui/service/session/session.go @@ -13,6 +13,7 @@ import ( "github.com/diamondburned/cchat-gtk/internal/ui/rich/parser/markup" "github.com/diamondburned/cchat-gtk/internal/ui/service/session/commander" "github.com/diamondburned/cchat-gtk/internal/ui/service/session/server" + "github.com/diamondburned/cchat-gtk/internal/ui/service/session/server/button" "github.com/diamondburned/cchat-gtk/internal/ui/service/session/server/traverse" "github.com/diamondburned/cchat/text" "github.com/gotk3/gotk3/gdk" @@ -65,16 +66,45 @@ type Row struct { // put commander in either a hover menu or a right click menu. maybe in the // headerbar as well. cmder *commander.Buffer + + // Unread class enum for theming. + unreadClass primitives.ClassEnum } var rowCSS = primitives.PrepareClassCSS("session-row", ` .session-row:last-child { border-radius: 0 0 14px 14px; } + .session-row:selected { background-color: alpha(@theme_selected_bg_color, 0.5); } -`) + + .session-row.unread { + background-color: alpha(@theme_fg_color, 0.25); + } + + .session-row.unread:selected { + background-color: alpha(mix( + @theme_fg_color, + @theme_selected_bg_color, + 0.65, + ), 0.85); + } + + .session-row.mentioned { + background-color: alpha(@mentioned, 0.25); + } + + .session-row.mentioned:selected { + background-color: alpha(mix( + @theme_fg_color, + @mentioned, + 0.65, + ), 0.85); + } + +`+button.UnreadColorDefs) var rowIconCSS = primitives.PrepareClassCSS("session-icon", ` .session-icon { @@ -132,6 +162,19 @@ func newRow(parent traverse.Breadcrumber, name text.Rich, ctrl Servicer) *Row { // Bind drag-and-drop events. drag.BindDraggable(row, "face-smile", ctrl.MoveSession) + // Bind the unread state. + row.Servers.Children.SetUnreadHandler(func(unread, mentioned bool) { + switch { + // Prioritize mentions over unreads. + case mentioned: + row.unreadClass.SetClass(row, "mentioned") + case unread: + row.unreadClass.SetClass(row, "unread") + default: + row.unreadClass.SetClass(row, "read") + } + }) + return row } diff --git a/internal/ui/ui.go b/internal/ui/ui.go index 7b405fd..4f5742a 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -109,6 +109,12 @@ func (app *App) OnSessionDisconnect(s *service.Service, r *session.Row) { } func (app *App) SessionSelected(svc *service.Service, ses *session.Row) { + // Is there an old row that we should deactivate? + if app.lastSelector != nil { + app.lastSelector(false) + app.lastSelector = nil + } + // TODO: restore last message box app.window.MessageView.Reset() app.header.SetBreadcrumber(ses)