mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-06-21 12:39:47 +01:00
Change: track hover position on Online Players GUI
Especially if there are many players online, trying to chat with the right one can be a visual challenge. This can be solved by highlighting the row you are on. This visual cue is often enough for humans to find the right row.
This commit is contained in:
parent
54f69deb0c
commit
c2e116a3d3
@ -1755,6 +1755,7 @@ private:
|
|||||||
Scrollbar *vscroll; ///< Vertical scrollbar of this window.
|
Scrollbar *vscroll; ///< Vertical scrollbar of this window.
|
||||||
uint line_height; ///< Current lineheight of each entry in the matrix.
|
uint line_height; ///< Current lineheight of each entry in the matrix.
|
||||||
uint line_count; ///< Amount of lines in the matrix.
|
uint line_count; ///< Amount of lines in the matrix.
|
||||||
|
int hover_index; ///< Index of the current line we are hovering over, or -1 if none.
|
||||||
|
|
||||||
std::map<uint, std::vector<std::unique_ptr<ButtonCommon>>> buttons; ///< Per line which buttons are available.
|
std::map<uint, std::vector<std::unique_ptr<ButtonCommon>>> buttons; ///< Per line which buttons are available.
|
||||||
|
|
||||||
@ -2261,6 +2262,11 @@ public:
|
|||||||
case WID_CL_MATRIX: {
|
case WID_CL_MATRIX: {
|
||||||
uint line = 0;
|
uint line = 0;
|
||||||
|
|
||||||
|
if (this->hover_index >= 0) {
|
||||||
|
uint offset = this->hover_index * this->line_height;
|
||||||
|
GfxFillRect(r.left + 2, r.top + offset, r.right - 1, r.top + offset + this->line_height - 1, GREY_SCALE(9));
|
||||||
|
}
|
||||||
|
|
||||||
for (const Company *c : Company::Iterate()) {
|
for (const Company *c : Company::Iterate()) {
|
||||||
this->DrawCompany(c, r.left, r.right, r.top, line);
|
this->DrawCompany(c, r.left, r.right, r.top, line);
|
||||||
}
|
}
|
||||||
@ -2271,6 +2277,24 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void OnMouseLoop() override
|
||||||
|
{
|
||||||
|
if (GetWidgetFromPos(this, _cursor.pos.x - this->left, _cursor.pos.y - this->top) != WID_CL_MATRIX) {
|
||||||
|
this->hover_index = -1;
|
||||||
|
this->SetDirty();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_CL_MATRIX);
|
||||||
|
int y = _cursor.pos.y - this->top - nwi->pos_y - 2;
|
||||||
|
int index = y / this->line_height;
|
||||||
|
|
||||||
|
if (index != this->hover_index) {
|
||||||
|
this->hover_index = index;
|
||||||
|
this->SetDirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void ShowClientList()
|
void ShowClientList()
|
||||||
|
Loading…
Reference in New Issue
Block a user