diff options
author | Niels Martin Hansen <nielsm@indvikleren.dk> | 2020-01-04 23:06:49 +0100 |
---|---|---|
committer | Niels Martin Hansen <nielsm@indvikleren.dk> | 2020-01-05 23:50:00 +0100 |
commit | ac3bc30a30d3daeb912c989accbb0fb08ea6e582 (patch) | |
tree | 63a2ad4a5522066da923a46c75730e6149ec9e55 | |
parent | 838117b05ec5ca6e111b86fb9c1210c755e42201 (diff) | |
download | openttd-ac3bc30a30d3daeb912c989accbb0fb08ea6e582.tar.xz |
Add: Highlight item under mouse in file browser
-rw-r--r-- | src/fios_gui.cpp | 30 | ||||
-rw-r--r-- | src/gfx_func.h | 1 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index de66d6b89..9f8b45413 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -271,6 +271,7 @@ private: FileList fios_items; ///< Save game list. FiosItem o_dir; ///< Original dir (home dir for this browser) const FiosItem *selected; ///< Selected game in #fios_items, or \c nullptr. + const FiosItem *highlighted; ///< Item in fios_items highlighted by mouse pointer, or \c nullptr. Scrollbar *vscroll; StringFilter string_filter; ///< Filter for available games. @@ -445,6 +446,8 @@ public: if (item == this->selected) { GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE); + } else if (item == this->highlighted) { + GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_VERY_DARK_BLUE); } DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[GetDetailedFileType(item->type)]); y += this->resize.step_height; @@ -714,6 +717,33 @@ public: } } + void OnMouseLoop() override + { + const Point pt{ _cursor.pos.x - this->left, _cursor.pos.y - this->top }; + const int widget = GetWidgetFromPos(this, pt.x, pt.y); + + if (widget == WID_SL_DRIVES_DIRECTORIES_LIST) { + int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WD_FRAMERECT_TOP); + if (y == INT_MAX) return; + + /* Get the corresponding non-filtered out item from the list */ + int i = 0; + while (i <= y) { + if (!this->fios_items_shown[i]) y++; + i++; + } + const FiosItem *file = this->fios_items.Get(y); + + if (file != this->highlighted) { + this->highlighted = file; + this->SetWidgetDirty(WID_SL_DRIVES_DIRECTORIES_LIST); + } + } else if (this->highlighted != nullptr) { + this->highlighted = nullptr; + this->SetWidgetDirty(WID_SL_DRIVES_DIRECTORIES_LIST); + } + } + EventState OnKeyPress(WChar key, uint16 keycode) override { if (keycode == WKC_ESC) { diff --git a/src/gfx_func.h b/src/gfx_func.h index a0b46a477..ea133acfc 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -219,6 +219,7 @@ static const uint8 PC_VERY_LIGHT_YELLOW = 0x45; ///< Almost-white yel static const uint8 PC_GREEN = 0xD0; ///< Green palette colour. +static const uint8 PC_VERY_DARK_BLUE = 0x9A; ///< Almost-black blue palette colour. static const uint8 PC_DARK_BLUE = 0x9D; ///< Dark blue palette colour. static const uint8 PC_LIGHT_BLUE = 0x98; ///< Light blue palette colour. |