mirror of https://github.com/OpenTTD/OpenTTD.git
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.
|
||||
uint line_height; ///< Current lineheight of each entry 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.
|
||||
|
||||
|
@ -2261,6 +2262,11 @@ public:
|
|||
case WID_CL_MATRIX: {
|
||||
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()) {
|
||||
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()
|
||||
|
|
Loading…
Reference in New Issue