diff options
Diffstat (limited to 'src/ui/tooltip.cc')
-rw-r--r-- | src/ui/tooltip.cc | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/ui/tooltip.cc b/src/ui/tooltip.cc new file mode 100644 index 0000000..1777d33 --- /dev/null +++ b/src/ui/tooltip.cc @@ -0,0 +1,90 @@ +/* + 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 "ui/paint.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); +} + +void Tooltip::draw_background() +{ + Paint::draw_material(global_location(), size(), "ui/window"); +} + +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(); +} + +void Tooltip::event_draw() +{ +} + +void Tooltip::event_draw_global() +{ + if (tooltip_global && tooltip_global->visible()) + { + if (tooltip_global->background()) + tooltip_global->draw_background(); + + if (tooltip_global->border()) + tooltip_global->draw_border(); + + tooltip_global->draw(); + + if (debug()) + tooltip_global->draw_debug(); + } +} + +} |