diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-05-31 01:27:37 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-05-31 01:27:37 +0300 |
commit | 9d3b975bcb84ad1c61d628de2804751c0d0707dd (patch) | |
tree | fe7494b1ecd561a40dc96d088c77d69b6d4ce13e /src/guichan/gui.cpp | |
parent | 1d0044cbc81e547ad688a295288910d58e1a3fb1 (diff) | |
download | mv-9d3b975bcb84ad1c61d628de2804751c0d0707dd.tar.gz mv-9d3b975bcb84ad1c61d628de2804751c0d0707dd.tar.bz2 mv-9d3b975bcb84ad1c61d628de2804751c0d0707dd.tar.xz mv-9d3b975bcb84ad1c61d628de2804751c0d0707dd.zip |
Fix code style and missing members initialisations.
Diffstat (limited to 'src/guichan/gui.cpp')
-rw-r--r-- | src/guichan/gui.cpp | 332 |
1 files changed, 152 insertions, 180 deletions
diff --git a/src/guichan/gui.cpp b/src/guichan/gui.cpp index ae9adea13..f8376646f 100644 --- a/src/guichan/gui.cpp +++ b/src/guichan/gui.cpp @@ -60,21 +60,21 @@ namespace gcn { - Gui::Gui() - :mTop(NULL), - mGraphics(NULL), - mInput(NULL), - mTabbing(true), - mShiftPressed(false), - mMetaPressed(false), - mControlPressed(false), - mAltPressed(false), - mLastMousePressButton(0), - mLastMousePressTimeStamp(0), - mLastMouseX(0), - mLastMouseY(0), - mClickCount(1), - mLastMouseDragButton(0) + Gui::Gui() : + mTop(NULL), + mGraphics(NULL), + mInput(NULL), + mTabbing(true), + mShiftPressed(false), + mMetaPressed(false), + mControlPressed(false), + mAltPressed(false), + mLastMousePressButton(0), + mLastMousePressTimeStamp(0), + mLastMouseX(0), + mLastMouseY(0), + mClickCount(1), + mLastMouseDragButton(0) { mFocusHandler = new FocusHandler(); } @@ -82,9 +82,7 @@ namespace gcn Gui::~Gui() { if (Widget::widgetExists(mTop)) - { setTop(NULL); - } delete mFocusHandler; } @@ -92,13 +90,9 @@ namespace gcn void Gui::setTop(Widget* top) { if (mTop != NULL) - { mTop->_setFocusHandler(NULL); - } if (top != NULL) - { top->_setFocusHandler(mFocusHandler); - } mTop = top; } @@ -131,9 +125,7 @@ namespace gcn void Gui::logic() { if (mTop == NULL) - { throw GCN_EXCEPTION("No top widget set"); - } handleModalFocus(); handleModalMouseInputFocus(); @@ -153,18 +145,12 @@ namespace gcn void Gui::draw() { if (mTop == NULL) - { throw GCN_EXCEPTION("No top widget set"); - } if (mGraphics == NULL) - { throw GCN_EXCEPTION("No graphics set"); - } if (!mTop->isVisible()) - { return; - } mGraphics->_beginDraw(); @@ -227,24 +213,24 @@ namespace gcn switch (mouseInput.getType()) { - case MouseInput::PRESSED: - handleMousePressed(mouseInput); - break; - case MouseInput::RELEASED: - handleMouseReleased(mouseInput); - break; - case MouseInput::MOVED: - handleMouseMoved(mouseInput); - break; - case MouseInput::WHEEL_MOVED_DOWN: - handleMouseWheelMovedDown(mouseInput); - break; - case MouseInput::WHEEL_MOVED_UP: - handleMouseWheelMovedUp(mouseInput); - break; - default: - throw GCN_EXCEPTION("Unknown mouse input type."); - break; + case MouseInput::PRESSED: + handleMousePressed(mouseInput); + break; + case MouseInput::RELEASED: + handleMouseReleased(mouseInput); + break; + case MouseInput::MOVED: + handleMouseMoved(mouseInput); + break; + case MouseInput::WHEEL_MOVED_DOWN: + handleMouseWheelMovedDown(mouseInput); + break; + case MouseInput::WHEEL_MOVED_UP: + handleMouseWheelMovedUp(mouseInput); + break; + default: + throw GCN_EXCEPTION("Unknown mouse input type."); + break; } } } @@ -270,17 +256,16 @@ namespace gcn keyInput.isNumericPad(), keyInput.getKey()); - distributeKeyEventToGlobalKeyListeners(keyEventToGlobalKeyListeners); + distributeKeyEventToGlobalKeyListeners( + keyEventToGlobalKeyListeners); // If a global key listener consumes the event it will not be // sent further to the source of the event. if (keyEventToGlobalKeyListeners.isConsumed()) - { continue; - } bool keyEventConsumed = false; - + // Send key inputs to the focused widgets if (mFocusHandler->getFocused() != NULL) { @@ -292,16 +277,11 @@ namespace gcn keyInput.getType(), keyInput.isNumericPad(), keyInput.getKey()); - if (!mFocusHandler->getFocused()->isFocusable()) - { mFocusHandler->focusNone(); - } else - { - distributeKeyEvent(keyEvent); - } + distributeKeyEvent(keyEvent); keyEventConsumed = keyEvent.isConsumed(); } @@ -309,34 +289,27 @@ namespace gcn // If the key event hasn't been consumed and // tabbing is enable check for tab press and // change focus. - if (!keyEventConsumed - && mTabbing + if (!keyEventConsumed && mTabbing && keyInput.getKey().getValue() == Key::TAB && keyInput.getType() == KeyInput::PRESSED) { if (keyInput.isShiftPressed()) - { mFocusHandler->tabPrevious(); - } else - { mFocusHandler->tabNext(); - } - } - + } } // end while } void Gui::handleMouseMoved(const MouseInput& mouseInput) { // Check if the mouse leaves the application window. - if (!mWidgetWithMouseQueue.empty() - && (mouseInput.getX() < 0 - || mouseInput.getY() < 0 - || !mTop->getDimension().isPointInRect(mouseInput.getX(), mouseInput.getY())) - ) + if (!mWidgetWithMouseQueue.empty() && (mouseInput.getX() < 0 + || mouseInput.getY() < 0 || !mTop->getDimension().isPointInRect( + mouseInput.getX(), mouseInput.getY()))) { - // Distribute an event to all widgets in the "widget with mouse" queue. + // Distribute an event to all widgets in the + // "widget with mouse" queue. while (!mWidgetWithMouseQueue.empty()) { Widget* widget = mWidgetWithMouseQueue.front(); @@ -367,10 +340,10 @@ namespace gcn std::deque<Widget*>::iterator iter; for (iter = mWidgetWithMouseQueue.begin(); iter != mWidgetWithMouseQueue.end(); - iter++) + ++ iter) { Widget* widget = *iter; - + // If a widget in the "widget with mouse queue" doesn't // exists anymore it should be removed from the queue. if (!Widget::widgetExists(widget)) @@ -395,7 +368,7 @@ namespace gcn mouseInput.getX(), mouseInput.getY(), true, - true); + true); mClickCount = 1; mLastMousePressTimeStamp = 0; mWidgetWithMouseQueue.erase(iter); @@ -406,21 +379,24 @@ namespace gcn iterations++; } - widgetWithMouseQueueCheckDone = iterations == mWidgetWithMouseQueue.size(); + widgetWithMouseQueueCheckDone = + (iterations == mWidgetWithMouseQueue.size()); } // Check all widgets below the mouse to see if they are // present in the "widget with mouse" queue. If a widget // is not then it should be added and an entered event should // be sent to it. - Widget* parent = getMouseEventSource(mouseInput.getX(), mouseInput.getY()); + Widget* parent = getMouseEventSource( + mouseInput.getX(), mouseInput.getY()); Widget* widget = parent; // If a widget has modal mouse input focus then it will - // always be returned from getMouseEventSource, but we only wan't to send - // mouse entered events if the mouse has actually entered the widget with - // modal mouse input focus, hence we need to check if that's the case. If - // it's not we should simply ignore to send any mouse entered events. + // always be returned from getMouseEventSource, but we only wan't to + // send mouse entered events if the mouse has actually entered the + // widget with modal mouse input focus, hence we need to check if + // that's the case. If it's not we should simply ignore to send any + // mouse entered events. if (mFocusHandler->getModalMouseInputFocused() != NULL && widget == mFocusHandler->getModalMouseInputFocused() && Widget::widgetExists(widget)) @@ -428,9 +404,8 @@ namespace gcn int x, y; widget->getAbsolutePosition(x, y); - if (x > mouseInput.getX() - || y > mouseInput.getY() - || x + widget->getWidth() <= mouseInput.getX() + if (x > mouseInput.getX() || y > mouseInput.getY() + || x + widget->getWidth() <= mouseInput.getX() || y + widget->getHeight() <= mouseInput.getY()) { parent = NULL; @@ -446,7 +421,7 @@ namespace gcn std::deque<Widget*>::iterator iter; for (iter = mWidgetWithMouseQueue.begin(); iter != mWidgetWithMouseQueue.end(); - iter++) + ++ iter) { if (*iter == widget) { @@ -485,7 +460,9 @@ namespace gcn } else { - Widget* sourceWidget = getMouseEventSource(mouseInput.getX(), mouseInput.getY()); + Widget* sourceWidget = getMouseEventSource( + mouseInput.getX(), mouseInput.getY()); + distributeMouseEvent(sourceWidget, MouseEvent::MOVED, mouseInput.getButton(), @@ -496,12 +473,11 @@ namespace gcn void Gui::handleMousePressed(const MouseInput& mouseInput) { - Widget* sourceWidget = getMouseEventSource(mouseInput.getX(), mouseInput.getY()); + Widget* sourceWidget = getMouseEventSource( + mouseInput.getX(), mouseInput.getY()); if (mFocusHandler->getDraggedWidget() != NULL) - { sourceWidget = mFocusHandler->getDraggedWidget(); - } int sourceWidgetX, sourceWidgetY; sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); @@ -540,12 +516,11 @@ namespace gcn void Gui::handleMouseWheelMovedDown(const MouseInput& mouseInput) { - Widget* sourceWidget = getMouseEventSource(mouseInput.getX(), mouseInput.getY()); + Widget* sourceWidget = getMouseEventSource( + mouseInput.getX(), mouseInput.getY()); if (mFocusHandler->getDraggedWidget() != NULL) - { sourceWidget = mFocusHandler->getDraggedWidget(); - } int sourceWidgetX, sourceWidgetY; sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); @@ -559,12 +534,11 @@ namespace gcn void Gui::handleMouseWheelMovedUp(const MouseInput& mouseInput) { - Widget* sourceWidget = getMouseEventSource(mouseInput.getX(), mouseInput.getY()); + Widget* sourceWidget = getMouseEventSource( + mouseInput.getX(), mouseInput.getY()); if (mFocusHandler->getDraggedWidget() != NULL) - { sourceWidget = mFocusHandler->getDraggedWidget(); - } int sourceWidgetX, sourceWidgetY; sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); @@ -578,28 +552,27 @@ namespace gcn void Gui::handleMouseReleased(const MouseInput& mouseInput) { - Widget* sourceWidget = getMouseEventSource(mouseInput.getX(), mouseInput.getY()); + Widget* sourceWidget = getMouseEventSource( + mouseInput.getX(), mouseInput.getY()); if (mFocusHandler->getDraggedWidget() != NULL) { if (sourceWidget != mFocusHandler->getLastWidgetPressed()) - { mFocusHandler->setLastWidgetPressed(NULL); - } - + sourceWidget = mFocusHandler->getDraggedWidget(); } int sourceWidgetX, sourceWidgetY; sourceWidget->getAbsolutePosition(sourceWidgetX, sourceWidgetY); - + distributeMouseEvent(sourceWidget, MouseEvent::RELEASED, mouseInput.getButton(), mouseInput.getX(), mouseInput.getY()); - if (mouseInput.getButton() == mLastMousePressButton + if (mouseInput.getButton() == mLastMousePressButton && mFocusHandler->getLastWidgetPressed() == sourceWidget) { distributeMouseEvent(sourceWidget, @@ -607,7 +580,7 @@ namespace gcn mouseInput.getButton(), mouseInput.getX(), mouseInput.getY()); - + mFocusHandler->setLastWidgetPressed(NULL); } else @@ -617,9 +590,7 @@ namespace gcn } if (mFocusHandler->getDraggedWidget() != NULL) - { mFocusHandler->setDraggedWidget(NULL); - } } Widget* Gui::getWidgetAt(int x, int y) @@ -707,9 +678,7 @@ namespace gcn // If the widget has been removed due to input // cancel the distribution. if (!Widget::widgetExists(widget)) - { break; - } parent = (Widget*)widget->getParent(); @@ -720,53 +689,52 @@ namespace gcn mouseEvent.mX = x - widgetX; mouseEvent.mY = y - widgetY; - - std::list<MouseListener*> mouseListeners = widget->_getMouseListeners(); + + std::list<MouseListener*> mouseListeners + = widget->_getMouseListeners(); // Send the event to all mouse listeners of the widget. - for (std::list<MouseListener*>::iterator it = mouseListeners.begin(); + for (std::list<MouseListener*>::iterator + it = mouseListeners.begin(); it != mouseListeners.end(); ++it) { switch (mouseEvent.getType()) { - case MouseEvent::ENTERED: - (*it)->mouseEntered(mouseEvent); - break; - case MouseEvent::EXITED: - (*it)->mouseExited(mouseEvent); - break; - case MouseEvent::MOVED: - (*it)->mouseMoved(mouseEvent); - break; - case MouseEvent::PRESSED: - (*it)->mousePressed(mouseEvent); - break; - case MouseEvent::RELEASED: - (*it)->mouseReleased(mouseEvent); - break; - case MouseEvent::WHEEL_MOVED_UP: - (*it)->mouseWheelMovedUp(mouseEvent); - break; - case MouseEvent::WHEEL_MOVED_DOWN: - (*it)->mouseWheelMovedDown(mouseEvent); - break; - case MouseEvent::DRAGGED: - (*it)->mouseDragged(mouseEvent); - break; - case MouseEvent::CLICKED: - (*it)->mouseClicked(mouseEvent); - break; - default: - throw GCN_EXCEPTION("Unknown mouse event type."); - } + case MouseEvent::ENTERED: + (*it)->mouseEntered(mouseEvent); + break; + case MouseEvent::EXITED: + (*it)->mouseExited(mouseEvent); + break; + case MouseEvent::MOVED: + (*it)->mouseMoved(mouseEvent); + break; + case MouseEvent::PRESSED: + (*it)->mousePressed(mouseEvent); + break; + case MouseEvent::RELEASED: + (*it)->mouseReleased(mouseEvent); + break; + case MouseEvent::WHEEL_MOVED_UP: + (*it)->mouseWheelMovedUp(mouseEvent); + break; + case MouseEvent::WHEEL_MOVED_DOWN: + (*it)->mouseWheelMovedDown(mouseEvent); + break; + case MouseEvent::DRAGGED: + (*it)->mouseDragged(mouseEvent); + break; + case MouseEvent::CLICKED: + (*it)->mouseClicked(mouseEvent); + break; + default: + throw GCN_EXCEPTION("Unknown mouse event type."); + } } - + if (toSourceOnly) - { break; - } - } Widget* swap = widget; @@ -821,24 +789,26 @@ namespace gcn if (widget->isEnabled()) { - std::list<KeyListener*> keyListeners = widget->_getKeyListeners(); - + std::list<KeyListener*> keyListeners + = widget->_getKeyListeners(); + // Send the event to all key listeners of the source widget. - for (std::list<KeyListener*>::iterator it = keyListeners.begin(); + for (std::list<KeyListener*>::iterator + it = keyListeners.begin(); it != keyListeners.end(); ++it) { switch (keyEvent.getType()) { - case KeyEvent::PRESSED: - (*it)->keyPressed(keyEvent); - break; - case KeyEvent::RELEASED: - (*it)->keyReleased(keyEvent); - break; - default: - throw GCN_EXCEPTION("Unknown key event type."); - } + case KeyEvent::PRESSED: + (*it)->keyPressed(keyEvent); + break; + case KeyEvent::RELEASED: + (*it)->keyReleased(keyEvent); + break; + default: + throw GCN_EXCEPTION("Unknown key event type."); + } } } @@ -860,24 +830,22 @@ namespace gcn { KeyListenerListIterator it; - for (it = mKeyListeners.begin(); it != mKeyListeners.end(); it++) + for (it = mKeyListeners.begin(); it != mKeyListeners.end(); ++ it) { switch (keyEvent.getType()) { - case KeyEvent::PRESSED: - (*it)->keyPressed(keyEvent); - break; - case KeyEvent::RELEASED: - (*it)->keyReleased(keyEvent); - break; - default: - throw GCN_EXCEPTION("Unknown key event type."); + case KeyEvent::PRESSED: + (*it)->keyPressed(keyEvent); + break; + case KeyEvent::RELEASED: + (*it)->keyReleased(keyEvent); + break; + default: + throw GCN_EXCEPTION("Unknown key event type."); } if (keyEvent.isConsumed()) - { break; - } } } @@ -885,36 +853,40 @@ namespace gcn { // Check if modal mouse input focus has been gained by a widget. if ((mFocusHandler->getLastWidgetWithModalMouseInputFocus() - != mFocusHandler->getModalMouseInputFocused()) - && (mFocusHandler->getLastWidgetWithModalMouseInputFocus() == NULL)) + != mFocusHandler->getModalMouseInputFocused()) + && (mFocusHandler->getLastWidgetWithModalMouseInputFocus() + == NULL)) { handleModalFocusGained(); - mFocusHandler->setLastWidgetWithModalMouseInputFocus(mFocusHandler->getModalMouseInputFocused()); + mFocusHandler->setLastWidgetWithModalMouseInputFocus( + mFocusHandler->getModalMouseInputFocused()); } // Check if modal mouse input focus has been released. else if ((mFocusHandler->getLastWidgetWithModalMouseInputFocus() - != mFocusHandler->getModalMouseInputFocused()) - && (mFocusHandler->getLastWidgetWithModalMouseInputFocus() != NULL)) + != mFocusHandler->getModalMouseInputFocused()) + && (mFocusHandler->getLastWidgetWithModalMouseInputFocus() + != NULL)) { handleModalFocusReleased(); mFocusHandler->setLastWidgetWithModalMouseInputFocus(NULL); } } - void Gui::handleModalFocus() + void Gui::handleModalFocus() { // Check if modal focus has been gained by a widget. if ((mFocusHandler->getLastWidgetWithModalFocus() - != mFocusHandler->getModalFocused()) - && (mFocusHandler->getLastWidgetWithModalFocus() == NULL)) + != mFocusHandler->getModalFocused()) + && (mFocusHandler->getLastWidgetWithModalFocus() == NULL)) { handleModalFocusGained(); - mFocusHandler->setLastWidgetWithModalFocus(mFocusHandler->getModalFocused()); + mFocusHandler->setLastWidgetWithModalFocus( + mFocusHandler->getModalFocused()); } // Check if modal focus has been released. else if ((mFocusHandler->getLastWidgetWithModalFocus() - != mFocusHandler->getModalFocused()) - && (mFocusHandler->getLastWidgetWithModalFocus() != NULL)) + != mFocusHandler->getModalFocused()) + && (mFocusHandler->getLastWidgetWithModalFocus() != NULL)) { handleModalFocusReleased(); mFocusHandler->setLastWidgetWithModalFocus(NULL); @@ -942,7 +914,8 @@ namespace gcn mWidgetWithMouseQueue.pop_front(); } - mFocusHandler->setLastWidgetWithModalMouseInputFocus(mFocusHandler->getModalMouseInputFocused()); + mFocusHandler->setLastWidgetWithModalMouseInputFocus( + mFocusHandler->getModalMouseInputFocused()); } void Gui::handleModalFocusReleased() @@ -963,7 +936,7 @@ namespace gcn std::deque<Widget*>::iterator iter; for (iter = mWidgetWithMouseQueue.begin(); iter != mWidgetWithMouseQueue.end(); - iter++) + ++ iter) { if (*iter == widget) { @@ -974,8 +947,7 @@ namespace gcn // Widget is not present, send an entered event and add // it to the "widget with mouse" queue. - if (!widgetIsPresentInQueue - && Widget::widgetExists(widget)) + if (!widgetIsPresentInQueue && Widget::widgetExists(widget)) { distributeMouseEvent(widget, MouseEvent::ENTERED, |