diff --git a/libs/s25main/WindowManager.cpp b/libs/s25main/WindowManager.cpp index e92a582f72..008cd632d3 100644 --- a/libs/s25main/WindowManager.cpp +++ b/libs/s25main/WindowManager.cpp @@ -798,12 +798,21 @@ class WindowManager::Tooltip const glFont* font; std::vector lines; unsigned width = 0, height = 0; + unsigned short maxWidth; public: Tooltip(const ctrlBaseTooltip* showingCtrl, const std::string& text, unsigned short maxWidth) - : showingCtrl(showingCtrl), font(NormalFont), - lines(font->GetWrapInfo(text, maxWidth, maxWidth).CreateSingleStrings(text)) + : showingCtrl(showingCtrl), font(NormalFont), maxWidth(maxWidth) { + setText(text); + } + + auto getShowingCtrl() const { return showingCtrl; } + auto getWidth() const { return width; } + + void setText(const std::string& text) + { + lines = font->GetWrapInfo(text, maxWidth, maxWidth).CreateSingleStrings(text); if(lines.empty()) return; width = 0; @@ -813,9 +822,6 @@ class WindowManager::Tooltip height = lines.size() * font->getHeight() + BORDER_SIZE * 2; } - auto getShowingCtrl() const { return showingCtrl; } - auto getWidth() const { return width; } - void draw(DrawPoint pos) const { Window::DrawRectangle(Rect(pos, width, height), 0x9F000000); @@ -829,7 +835,7 @@ class WindowManager::Tooltip } }; -void WindowManager::SetToolTip(const ctrlBaseTooltip* ttw, const std::string& tooltip) +void WindowManager::SetToolTip(const ctrlBaseTooltip* ttw, const std::string& tooltip, bool updateCurrent) { // Max width of tooltip constexpr unsigned short MAX_TOOLTIP_WIDTH = 260; @@ -838,6 +844,10 @@ void WindowManager::SetToolTip(const ctrlBaseTooltip* ttw, const std::string& to { if(curTooltip && (!ttw || curTooltip->getShowingCtrl() == ttw)) curTooltip.reset(); + } else if(updateCurrent) + { + if(curTooltip && curTooltip->getShowingCtrl() == ttw) + curTooltip->setText(tooltip); } else curTooltip = std::make_unique(ttw, tooltip, MAX_TOOLTIP_WIDTH); } diff --git a/libs/s25main/WindowManager.h b/libs/s25main/WindowManager.h index 37f01e962f..6f67aed992 100644 --- a/libs/s25main/WindowManager.h +++ b/libs/s25main/WindowManager.h @@ -102,7 +102,7 @@ class WindowManager : public Singleton, public VideoDriverLoaderI /// Verarbeitung Keyboard-Event void Msg_KeyDown(const KeyEvent& ke) override; // setzt den Tooltip - void SetToolTip(const ctrlBaseTooltip* ttw, const std::string& tooltip); + void SetToolTip(const ctrlBaseTooltip* ttw, const std::string& tooltip, bool updateCurrent = false); /// Verarbeitung Spielfenstergröße verändert (vom Betriebssystem aus) void WindowResized() override; diff --git a/libs/s25main/controls/ctrlBaseTooltip.cpp b/libs/s25main/controls/ctrlBaseTooltip.cpp index 611da68e1f..9d75224741 100644 --- a/libs/s25main/controls/ctrlBaseTooltip.cpp +++ b/libs/s25main/controls/ctrlBaseTooltip.cpp @@ -10,6 +10,12 @@ ctrlBaseTooltip::~ctrlBaseTooltip() HideTooltip(); } +void ctrlBaseTooltip::SetTooltip(const std::string& tooltip) +{ + tooltip_ = tooltip; + WINDOWMANAGER.SetToolTip(this, tooltip_, true); +} + void ctrlBaseTooltip::SwapTooltip(ctrlBaseTooltip& other) { std::swap(tooltip_, other.tooltip_); diff --git a/libs/s25main/controls/ctrlBaseTooltip.h b/libs/s25main/controls/ctrlBaseTooltip.h index 8b15a10315..dd67989142 100644 --- a/libs/s25main/controls/ctrlBaseTooltip.h +++ b/libs/s25main/controls/ctrlBaseTooltip.h @@ -14,7 +14,7 @@ class ctrlBaseTooltip ctrlBaseTooltip(std::string tooltip = "") : tooltip_(std::move(tooltip)) {} virtual ~ctrlBaseTooltip(); - void SetTooltip(const std::string& tooltip) { tooltip_ = tooltip; } + void SetTooltip(const std::string& tooltip); const std::string& GetTooltip() const { return tooltip_; } /// Swap the tooltips of those controls void SwapTooltip(ctrlBaseTooltip& other);