diff options
Diffstat (limited to 'src/ui/tooltip.cc')
-rw-r--r-- | src/ui/tooltip.cc | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/ui/tooltip.cc b/src/ui/tooltip.cc new file mode 100644 index 0000000..95f1ac8 --- /dev/null +++ b/src/ui/tooltip.cc @@ -0,0 +1,64 @@ +/* + ui/tooltip.cc + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#include "ui/tooltip.h" +#include "ui/ui.h" + +#include <cassert> + +namespace ui +{ + +Tooltip *Tooltip::tooltip_global = nullptr; + +Tooltip::Tooltip(Widget *parent) : Label(parent) +{ + set_label("tooltip"); + set_alignment(AlignCenter); + set_background(true); + set_visible(false); +} + +Tooltip::~Tooltip() +{ +} + +void Tooltip::resize() +{ + set_size(font()->width() * text().size() + UI::padding, font()->height() + + UI::padding); + set_location((parent()->width() - width()) * 0.5f, parent()->height()); +} + +void Tooltip::draw() +{ + if (tooltip_global != this) { + hide(); + } else { + Label::draw(); + } +} + +void Tooltip::show() +{ + if ((tooltip_global != nullptr) && (tooltip_global != this)) { + tooltip_global->hide(); + } + tooltip_global = this; + event_resize(); + + Label::show(); +} + +void Tooltip::hide() +{ + if (tooltip_global == this) { + tooltip_global = nullptr; + } + Label::hide(); +} + + +} |