Index: binaries/data/mods/mod/gui/gui.rng
===================================================================
--- binaries/data/mods/mod/gui/gui.rng
+++ binaries/data/mods/mod/gui/gui.rng
@@ -591,6 +591,11 @@
+
+
+
+
+
Index: source/gui/ObjectTypes/CDropDown.cpp
===================================================================
--- source/gui/ObjectTypes/CDropDown.cpp
+++ source/gui/ObjectTypes/CDropDown.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2023 Wildfire Games.
+/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -469,7 +469,7 @@
if (m_HideScrollBar)
m_ScrollBar.Set(false, false);
- DrawList(canvas, m_ElementHighlight, m_SpriteList, m_SpriteListOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor);
+ DrawList(canvas, m_ElementHighlight, m_SpriteList, m_SpriteListOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor, m_TextColorSelected);
if (m_HideScrollBar)
m_ScrollBar.Set(old, false);
Index: source/gui/ObjectTypes/CList.h
===================================================================
--- source/gui/ObjectTypes/CList.h
+++ source/gui/ObjectTypes/CList.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2021 Wildfire Games.
+/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -107,7 +107,7 @@
// Extended drawing interface, this is so that classes built on the this one
// can use other sprite names.
virtual void DrawList(CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
- const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor);
+ const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor, const CGUIColor& textColorSelected);
// Get the area of the list. This is so that it can easily be changed, like in CDropDown
// where the area is not equal to m_CachedActualSize.
Index: source/gui/ObjectTypes/CList.cpp
===================================================================
--- source/gui/ObjectTypes/CList.cpp
+++ source/gui/ObjectTypes/CList.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2021 Wildfire Games.
+/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -301,11 +301,11 @@
void CList::Draw(CCanvas2D& canvas)
{
- DrawList(canvas, m_Selected, m_Sprite, m_SpriteOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor);
+ DrawList(canvas, m_Selected, m_Sprite, m_SpriteOverlay, m_SpriteSelectArea, m_SpriteSelectAreaOverlay, m_TextColor, m_TextColorSelected);
}
void CList::DrawList(CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
- const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor)
+ const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor, const CGUIColor& textColorSelected)
{
CRect rect = GetListRect();
@@ -348,7 +348,7 @@
}
}
- for (size_t i = 0; i < m_List->m_Items.size(); ++i)
+ for (std::ptrdiff_t i = 0; i < static_cast(m_List->m_Items.size()); ++i)
{
if (m_ItemsYPositions[i+1] - scroll < 0 ||
m_ItemsYPositions[i] - scroll > rect.GetHeight())
@@ -368,7 +368,9 @@
cliparea.left = GetScrollBar(0).GetOuterRect().right;
}
- DrawText(canvas, i, textColor, rect.TopLeft() - CVector2D(0.f, scroll - m_ItemsYPositions[i]), cliparea);
+ const CGUIColor& finalTextColor = (drawSelected && selected == i && textColorSelected)? textColorSelected : textColor;
+
+ DrawText(canvas, i, finalTextColor, rect.TopLeft() - CVector2D(0.f, scroll - m_ItemsYPositions[i]), cliparea);
}
// Draw scrollbars on top of the content
Index: source/gui/ObjectTypes/COList.h
===================================================================
--- source/gui/ObjectTypes/COList.h
+++ source/gui/ObjectTypes/COList.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2023 Wildfire Games.
+/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -38,6 +38,7 @@
COListColumn& operator=(COListColumn&&) = delete;
CGUIColor m_TextColor;
+ CGUIColor m_TextColorSelected;
CStr m_Id;
float m_Width;
CGUISimpleSetting m_Heading; // CGUIString??
@@ -73,7 +74,7 @@
virtual void DrawList(
CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
- const CGUISpriteInstance& spriteSelectarea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor);
+ const CGUISpriteInstance& spriteSelectarea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor, const CGUIColor& textColorSelected);
virtual CRect GetListRect() const;
Index: source/gui/ObjectTypes/COList.cpp
===================================================================
--- source/gui/ObjectTypes/COList.cpp
+++ source/gui/ObjectTypes/COList.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2023 Wildfire Games.
+/* Copyright (C) 2024 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@@ -219,6 +219,11 @@
if (!CGUI::ParseString(&m_pGUI, attr_value.FromUTF8(), column.m_TextColor))
LOGERROR("GUI: Error parsing '%s' (\"%s\")", attr_name.data(), attr_value.c_str());
}
+ if (attr_name == "colorSelected")
+ {
+ if (!CGUI::ParseString(&m_pGUI, attr_value.FromUTF8(), column.m_TextColorSelected))
+ LOGERROR("GUI: Error parsing '%s' (\"%s\")", attr_name.data(), attr_value.c_str());
+ }
else if (attr_name == "hidden")
{
bool hidden = false;
@@ -293,7 +298,7 @@
}
void COList::DrawList(CCanvas2D& canvas, const int& selected, const CGUISpriteInstance& sprite, const CGUISpriteInstance& spriteOverlay,
- const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor)
+ const CGUISpriteInstance& spriteSelectArea, const CGUISpriteInstance& spriteSelectAreaOverlay, const CGUIColor& textColor, const CGUIColor& textColorSelected)
{
CRect rect = GetListRect();
@@ -435,8 +440,10 @@
cliparea2.right = std::min(cliparea2.right, textPos.X + width);
cliparea2.bottom = std::min(cliparea2.bottom, textPos.Y + rowHeight);
+ const CGUIColor& finalTextColor = (drawSelected && selected == i && column.m_TextColorSelected)? column.m_TextColorSelected : column.m_TextColor;
+
// Draw list item
- DrawText(canvas, objectsCount * (i +/*Heading*/1) + colIdx, column.m_TextColor, textPos, cliparea2);
+ DrawText(canvas, objectsCount * (i +/*Heading*/1) + colIdx, finalTextColor, textPos, cliparea2);
xpos += width;
}
}