/* * Copyright (c) 2018-2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace GUI { class Application::TooltipWindow final : public Window { C_OBJECT(TooltipWindow); public: void set_tooltip(String tooltip) { m_label->set_text(move(tooltip)); int tooltip_width = m_label->effective_min_size().width().as_int() + 10; int line_count = m_label->text().bytes_as_string_view().count_lines(); int font_size = m_label->font().pixel_size_rounded_up(); int tooltip_height = font_size * line_count + ((font_size + 1) / 2) * (line_count - 1) + 8; Gfx::IntRect desktop_rect = Desktop::the().rect(); if (tooltip_width > desktop_rect.width()) tooltip_width = desktop_rect.width(); set_rect(rect().x(), rect().y(), tooltip_width, tooltip_height); } private: TooltipWindow() { set_window_type(WindowType::Tooltip); set_obey_widget_min_size(false); m_label = set_main_widget