diff options
Diffstat (limited to 'src/ui/tooltip.h')
-rw-r--r-- | src/ui/tooltip.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/ui/tooltip.h b/src/ui/tooltip.h new file mode 100644 index 0000000..629863a --- /dev/null +++ b/src/ui/tooltip.h @@ -0,0 +1,80 @@ +/* + ui/tooltip.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_UI_TOOLTIP_H__ +#define __INCLUDED_UI_TOOLTIP_H__ + +#include "ui/label.h" + +namespace ui +{ + /** + * @brief a widget displaying a tooltip. + * This class makes sure only one Tooltip is globally visible. + */ +class Tooltip : public Label +{ + public: + Tooltip(Widget *parent); + virtual ~Tooltip(); + + /** + * @brief resize the tooltip + * */ + virtual void resize(); + + /** + * @brief show the tooltip + * */ + virtual void show(); + + /** + * @brief hide the tooltip + * */ + virtual void hide(); + + /** + * @brief draw event distributor + * The default draw event distributor is overwritten to do nothing. + * Tooltips are drawn separately because the need to be on top of everything else. + * @see event_draw_global + * */ + virtual void event_draw(); + + /** + * @brief global draw event distributor + * This is called by the user interface to draw the tooltip after everything else. + * */ + static void event_draw_global(); + + /** + * @brief the tooltip that is currently visible, nullptr if no tooltip is currently shown + * + * */ + static inline Tooltip *global() + { + return tooltip_global; + } + + protected: + /** + * @brief draw the tooltip + */ + virtual void draw(); + + /** + * @brief draw the tooltip background + */ + virtual void draw_background(); + + private: + + static Tooltip *tooltip_global; +}; + +} + +#endif // __INCLUDED_UI_TOOLTIP_H__ |