summaryrefslogtreecommitdiff
path: root/src/gui/gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/gui.cpp')
-rw-r--r--src/gui/gui.cpp58
1 files changed, 36 insertions, 22 deletions
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index 91224b714..50a0a6a28 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -117,11 +117,11 @@ Gui::Gui() :
mLastMouseDragButton(MouseButton::EMPTY),
mWidgetWithMouseQueue(),
mConfigListener(new GuiConfigListener(this)),
- mGuiFont(),
- mInfoParticleFont(),
- mHelpFont(),
- mSecureFont(),
- mNpcFont(),
+ mGuiFont(nullptr),
+ mInfoParticleFont(nullptr),
+ mHelpFont(nullptr),
+ mSecureFont(nullptr),
+ mNpcFont(nullptr),
mMouseCursors(nullptr),
mMouseCursorAlpha(1.0F),
mMouseInactivityTimer(0),
@@ -455,6 +455,8 @@ void Gui::draw()
{
BLOCK_START("Gui::draw 1")
Widget *const top = getTop();
+ if (!top)
+ return;
mGraphics->pushClipArea(top->getDimension());
if (isBatchDrawRenders(openGLMode))
@@ -661,7 +663,8 @@ void Gui::handleMouseMoved(const MouseInput &mouseInput)
// mouse entered events.
if (mFocusHandler->getModalMouseInputFocused()
&& widget == mFocusHandler->getModalMouseInputFocused()
- && Widget::widgetExists(widget))
+ && Widget::widgetExists(widget) &&
+ widget)
{
int x, y;
widget->getAbsolutePosition(x, y);
@@ -742,6 +745,8 @@ void Gui::handleMousePressed(const MouseInput &mouseInput)
if (mFocusHandler->getDraggedWidget())
sourceWidget = mFocusHandler->getDraggedWidget();
+ if (!sourceWidget)
+ return;
int sourceWidgetX;
int sourceWidgetY;
sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
@@ -1038,7 +1043,7 @@ void Gui::handleMouseReleased(const MouseInput &mouseInput)
Widget *const oldWidget = sourceWidget;
sourceWidget = mFocusHandler->getDraggedWidget();
- if (oldWidget != sourceWidget)
+ if (oldWidget && oldWidget != sourceWidget)
{
oldWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
distributeMouseEvent(oldWidget,
@@ -1049,6 +1054,8 @@ void Gui::handleMouseReleased(const MouseInput &mouseInput)
}
}
+ if (!sourceWidget)
+ return;
sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
distributeMouseEvent(sourceWidget,
MouseEventType::RELEASED,
@@ -1165,13 +1172,16 @@ void Gui::handleMouseWheelMovedDown(const MouseInput& mouseInput)
int sourceWidgetX = 0;
int sourceWidgetY = 0;
- sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
+ if (sourceWidget)
+ {
+ sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
- distributeMouseEvent(sourceWidget,
- MouseEventType::WHEEL_MOVED_DOWN,
- mouseInput.getButton(),
- mouseInput.getX(),
- mouseInput.getY());
+ distributeMouseEvent(sourceWidget,
+ MouseEventType::WHEEL_MOVED_DOWN,
+ mouseInput.getButton(),
+ mouseInput.getX(),
+ mouseInput.getY());
+ }
}
void Gui::handleMouseWheelMovedUp(const MouseInput& mouseInput)
@@ -1182,14 +1192,17 @@ void Gui::handleMouseWheelMovedUp(const MouseInput& mouseInput)
if (mFocusHandler->getDraggedWidget())
sourceWidget = mFocusHandler->getDraggedWidget();
- int sourceWidgetX, sourceWidgetY;
- sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
-
- distributeMouseEvent(sourceWidget,
- MouseEventType::WHEEL_MOVED_UP,
- mouseInput.getButton(),
- mouseInput.getX(),
- mouseInput.getY());
+ int sourceWidgetX;
+ int sourceWidgetY;
+ if (sourceWidget)
+ {
+ sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
+ distributeMouseEvent(sourceWidget,
+ MouseEventType::WHEEL_MOVED_UP,
+ mouseInput.getButton(),
+ mouseInput.getX(),
+ mouseInput.getY());
+ }
}
Widget* Gui::getWidgetAt(const int x, const int y) const
@@ -1243,9 +1256,10 @@ void Gui::distributeKeyEvent(KeyEvent &event) const
Widget* parent = event.getSource();
Widget* widget = parent;
+ if (!parent)
+ return;
if (mFocusHandler->getModalFocused() && !widget->isModalFocused())
return;
-
if (mFocusHandler->getModalMouseInputFocused()
&& !widget->isModalMouseInputFocused())
{