Skip to content

Commit

Permalink
Add option to set color of occupied tag, and to disable the indicator
Browse files Browse the repository at this point in the history
  • Loading branch information
PMunch committed May 19, 2024
1 parent 055906f commit 1a3c095
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 10 deletions.
16 changes: 14 additions & 2 deletions src/nimdowpkg/config/configloader.nim
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,9 @@ type
height*: uint
windowTitlePosition*: WindowTitlePosition
fonts*: seq[string]
showIndicator*: bool
# Hex values
fgColor*, bgColor*, selectionColor*, urgentColor*: int
fgColor*, bgColor*, selectionColor*, urgentColor*, hasTagsColor*: int
ScratchpadSettings* = object
width*: int
height*: int
Expand Down Expand Up @@ -202,10 +203,12 @@ proc populateDefaultMonitorSettings(this: Config, display: PDisplay) =
"monospace:size=10:antialias=true",
"NotoColorEmoji:size=10:antialias=true"
],
showIndicator: true,
fgColor: 0xfce8c3,
bgColor: 0x1c1b19,
selectionColor: 0x519f50,
urgentColor: 0xef2f27
urgentColor: 0xef2f27,
hasTagsColor: 0xfce8c3
)

this.defaultMonitorSettings.layoutSettings = LayoutSettings(
Expand Down Expand Up @@ -397,6 +400,15 @@ proc populateBarSettings*(this: Config, barSettings: var BarSettings, settingsTa
if urgentColor != -1:
barSettings.urgentColor = urgentColor

let hasTagsColor = this.loadHexValue(settingsTable, "barHasTagsColor")
if hasTagsColor != -1:
barSettings.hasTagsColor = hasTagsColor

if settingsTable.hasKey("barShowIndicator"):
let showIndicator = settingsTable["barShowIndicator"]
if showIndicator.kind == TomlValueKind.Bool:
barSettings.showIndicator = showIndicator.boolVal

if settingsTable.hasKey("barHeight"):
let barHeight = settingsTable["barHeight"]
if barHeight.kind == TomlValueKind.Int:
Expand Down
21 changes: 13 additions & 8 deletions src/nimdowpkg/statusbar.nim
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ type
draw: PXftDraw
visual: PVisual
colormap: Colormap
fgColor*, bgColor*, selectionColor*, urgentColor*: XftColor
fgColor*, bgColor*, selectionColor*, urgentColor*, hasTagsColor*: XftColor
area*: Area
systrayWidth: int
clickables: seq[tuple[start: int, stop: int, characters: seq[int]]]
Expand Down Expand Up @@ -255,6 +255,7 @@ proc freeAllColors(this: StatusBar) =
this.freeColor(this.bgColor.unsafeAddr)
this.freeColor(this.selectionColor.unsafeAddr)
this.freeColor(this.urgentColor.unsafeAddr)
this.freeColor(this.hasTagsColor.unsafeAddr)

proc toRGB(hex: int): RGB =
return (
Expand All @@ -278,6 +279,7 @@ proc configureColors(this: StatusBar) =
this.configureColor(this.settings.bgColor, this.bgColor)
this.configureColor(this.settings.selectionColor, this.selectionColor)
this.configureColor(this.settings.urgentColor, this.urgentColor)
this.configureColor(this.settings.hasTagsColor, this.hasTagsColor)

proc configureFont(this: StatusBar, fontString: string): PXftFont =
result = XftFontOpenXlfd(this.display, this.screen, fontString)
Expand Down Expand Up @@ -703,9 +705,6 @@ proc renderTags(this: var StatusBar): int =
tagHasCurrentClient = false
tagIsUrgent = false

if this.selectedTags.contains(tagID):
fgColor = this.selectionColor

for node in this.taggedClients.clientWithTagIter(tagID):
tagIsEmpty = false
let client = node.value
Expand All @@ -715,6 +714,11 @@ proc renderTags(this: var StatusBar): int =
if tagIsUrgent:
break

if this.selectedTags.contains(tagID):
fgColor = this.selectionColor
elif not tagIsEmpty:
fgColor = this.hasTagsColor

let text = tagSettings.displayString
let stringLength = this.forEachCharacter(text, textXPos, fgColor)

Expand All @@ -729,10 +733,11 @@ proc renderTags(this: var StatusBar): int =
stringLength + boxWidth * 4,
this.area.height.cuint
)
XftDrawRect(this.draw, fgColor.addr, boxXLoc, 0, 4, 4)
if not tagHasCurrentClient:
var bgColor = if tagIsUrgent: this.urgentColor else: this.bgColor
XftDrawRect(this.draw, bgColor.addr, boxXLoc + 1, 1, 2, 2)
if this.settings.showIndicator:
XftDrawRect(this.draw, fgColor.addr, boxXLoc, 0, 4, 4)
if not tagHasCurrentClient:
var bgColor = if tagIsUrgent: this.urgentColor else: this.bgColor
XftDrawRect(this.draw, bgColor.addr, boxXLoc + 1, 1, 2, 2)

let stringInfo = this.renderString(text, fgColor, textXPos)
this.clickables.add (start: textXPos - boxWidth*2, stop: textXPos + stringLength + boxWidth*2, characters: stringInfo.characters)
Expand Down

0 comments on commit 1a3c095

Please sign in to comment.