diff --git a/src/nimdowpkg/config/configloader.nim b/src/nimdowpkg/config/configloader.nim index d596c50..cdf6e16 100644 --- a/src/nimdowpkg/config/configloader.nim +++ b/src/nimdowpkg/config/configloader.nim @@ -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 transparency*: uint8 ScratchpadSettings* = object width*: int @@ -203,10 +204,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( @@ -405,6 +408,15 @@ proc populateBarSettings*(this: Config, barSettings: var BarSettings, settingsTa if barTransparency.kind == TomlValueKind.Int: barSettings.transparency = clamp(barTransparency.intVal, 0, 255).uint8 + 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: diff --git a/src/nimdowpkg/statusbar.nim b/src/nimdowpkg/statusbar.nim index 3d7dbd7..3143ffa 100644 --- a/src/nimdowpkg/statusbar.nim +++ b/src/nimdowpkg/statusbar.nim @@ -46,7 +46,7 @@ type visual: PVisual depth: int 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]]] @@ -269,6 +269,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 ( @@ -292,6 +293,7 @@ proc configureColors(this: StatusBar) = this.configureColor(this.settings.bgColor, this.bgColor, this.settings.transparency) 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) @@ -740,9 +742,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 @@ -752,6 +751,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) @@ -766,10 +770,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)