Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorStijn Buys <ingar@telenet.be>2020-07-18 17:39:47 +0200
committerStijn Buys <ingar@telenet.be>2020-07-18 17:39:47 +0200
commitc1ce0ecd3458e1939b4e6c9947684378078a724f (patch)
treebc08b8f4f2c4765ab4606ceda9cee45923a1918a /src/ui
parent41ec4ed68571091f2e2500344a7aeb527a91dc92 (diff)
Always draw tooltips on top of the widget stack.
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/label.h2
-rw-r--r--src/ui/tooltip.cc20
-rw-r--r--src/ui/tooltip.h22
-rw-r--r--src/ui/ui.cc3
-rw-r--r--src/ui/widget.h2
5 files changed, 43 insertions, 6 deletions
diff --git a/src/ui/label.h b/src/ui/label.h
index a895691..f187744 100644
--- a/src/ui/label.h
+++ b/src/ui/label.h
@@ -19,7 +19,7 @@ class Label : public Widget
{
public:
Label(Widget *parent, const char *text = 0);
- ~Label();
+ virtual ~Label();
/// set the text displayed by the label
void set_text(const std::string &text);
diff --git a/src/ui/tooltip.cc b/src/ui/tooltip.cc
index b1e8c3c..6a692ff 100644
--- a/src/ui/tooltip.cc
+++ b/src/ui/tooltip.cc
@@ -67,5 +67,25 @@ void Tooltip::hide()
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();
+ }
+}
}
diff --git a/src/ui/tooltip.h b/src/ui/tooltip.h
index 0cfa12d..629863a 100644
--- a/src/ui/tooltip.h
+++ b/src/ui/tooltip.h
@@ -23,23 +23,37 @@ class Tooltip : public Label
/**
* @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;
diff --git a/src/ui/ui.cc b/src/ui/ui.cc
index fc52bbf..7fb25dd 100644
--- a/src/ui/ui.cc
+++ b/src/ui/ui.cc
@@ -298,6 +298,9 @@ void UI::frame()
// draw the widget stack
event_draw();
+
+ // draw tooltip
+ Tooltip::event_draw_global();
// draw the mouse pointer
if (visible())
diff --git a/src/ui/widget.h b/src/ui/widget.h
index e1f199d..c3d952c 100644
--- a/src/ui/widget.h
+++ b/src/ui/widget.h
@@ -275,7 +275,7 @@ public:
* @brief calls the draw event handler and sends the event to all child widgets
* @see draw
**/
- void event_draw();
+ virtual void event_draw();
/**
* @brief calls the key event handlers and sends unhandled keys to the parent widget