summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gui/gui.cpp44
-rw-r--r--src/gui/gui.h2
-rw-r--r--src/guichan/gui.cpp43
-rw-r--r--src/guichan/include/guichan/gui.hpp8
4 files changed, 45 insertions, 52 deletions
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index dcb8d38cf..9418d3e4c 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -437,7 +437,6 @@ void Gui::draw()
if (mouseCursor)
{
mouseCursor->setAlpha(mMouseCursorAlpha);
-
static_cast<Graphics*>(mGraphics)->drawImage(
mouseCursor,
mouseX - 15,
@@ -730,6 +729,49 @@ void Gui::handleMouseInput()
BLOCK_END("Gui::handleMouseInput")
}
+void Gui::handleMouseReleased(const gcn::MouseInput &mouseInput)
+{
+ gcn::Widget *sourceWidget = getMouseEventSource(
+ mouseInput.getX(), mouseInput.getY());
+
+ if (mFocusHandler->getDraggedWidget())
+ {
+ if (sourceWidget != mFocusHandler->getLastWidgetPressed())
+ mFocusHandler->setLastWidgetPressed(nullptr);
+
+ sourceWidget = mFocusHandler->getDraggedWidget();
+ }
+
+ int sourceWidgetX, sourceWidgetY;
+ sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
+
+ distributeMouseEvent(sourceWidget,
+ MouseEvent::RELEASED,
+ mouseInput.getButton(),
+ mouseInput.getX(),
+ mouseInput.getY());
+
+ if (mouseInput.getButton() == mLastMousePressButton
+ && mFocusHandler->getLastWidgetPressed() == sourceWidget)
+ {
+ distributeMouseEvent(sourceWidget,
+ MouseEvent::CLICKED,
+ mouseInput.getButton(),
+ mouseInput.getX(),
+ mouseInput.getY());
+
+ mFocusHandler->setLastWidgetPressed(nullptr);
+ }
+ else
+ {
+ mLastMousePressButton = 0;
+ mClickCount = 0;
+ }
+
+ if (mFocusHandler->getDraggedWidget())
+ mFocusHandler->setDraggedWidget(nullptr);
+}
+
void Gui::addGlobalFocusListener(gcn::FocusListener* focusListener)
{
mFocusListeners.push_back(focusListener);
diff --git a/src/gui/gui.h b/src/gui/gui.h
index ed6bf6774..94dbf638f 100644
--- a/src/gui/gui.h
+++ b/src/gui/gui.h
@@ -156,6 +156,8 @@ class Gui final : public gcn::Gui
protected:
void handleMouseMoved(const gcn::MouseInput &mouseInput);
+ void handleMouseReleased(const gcn::MouseInput &mouseInput);
+
void handleMouseInput();
void distributeMouseEvent(gcn::Widget* source, int type, int button,
diff --git a/src/guichan/gui.cpp b/src/guichan/gui.cpp
index d363bdc9b..fcfe58bef 100644
--- a/src/guichan/gui.cpp
+++ b/src/guichan/gui.cpp
@@ -416,49 +416,6 @@ namespace gcn
mouseInput.getY());
}
- void Gui::handleMouseReleased(const MouseInput& mouseInput)
- {
- Widget* sourceWidget = getMouseEventSource(
- mouseInput.getX(), mouseInput.getY());
-
- if (mFocusHandler->getDraggedWidget())
- {
- if (sourceWidget != mFocusHandler->getLastWidgetPressed())
- mFocusHandler->setLastWidgetPressed(nullptr);
-
- sourceWidget = mFocusHandler->getDraggedWidget();
- }
-
- int sourceWidgetX, sourceWidgetY;
- sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY);
-
- distributeMouseEvent(sourceWidget,
- MouseEvent::RELEASED,
- mouseInput.getButton(),
- mouseInput.getX(),
- mouseInput.getY());
-
- if (mouseInput.getButton() == mLastMousePressButton
- && mFocusHandler->getLastWidgetPressed() == sourceWidget)
- {
- distributeMouseEvent(sourceWidget,
- MouseEvent::CLICKED,
- mouseInput.getButton(),
- mouseInput.getX(),
- mouseInput.getY());
-
- mFocusHandler->setLastWidgetPressed(nullptr);
- }
- else
- {
- mLastMousePressButton = 0;
- mClickCount = 0;
- }
-
- if (mFocusHandler->getDraggedWidget())
- mFocusHandler->setDraggedWidget(nullptr);
- }
-
Widget* Gui::getWidgetAt(int x, int y)
{
// If the widget's parent has no child then we have found the widget..
diff --git a/src/guichan/include/guichan/gui.hpp b/src/guichan/include/guichan/gui.hpp
index ea952ec9c..3a30dedd0 100644
--- a/src/guichan/include/guichan/gui.hpp
+++ b/src/guichan/include/guichan/gui.hpp
@@ -290,14 +290,6 @@ namespace gcn
virtual void handleMouseWheelMovedUp(const MouseInput& mouseInput);
/**
- * Handles mouse released input.
- *
- * @param mouseInput The mouse input to handle.
- * @since 0.6.0
- */
- virtual void handleMouseReleased(const MouseInput& mouseInput);
-
- /**
* Handles modal focus. Modal focus needs to be checked at
* each logic iteration as it might be necessary to distribute
* mouse entered or mouse exited events.