diff options
Diffstat (limited to 'src/gui/widgets')
-rw-r--r-- | src/gui/widgets/window.cpp | 25 | ||||
-rw-r--r-- | src/gui/widgets/window.h | 6 |
2 files changed, 19 insertions, 12 deletions
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp index 751980d75..e49af5f15 100644 --- a/src/gui/widgets/window.cpp +++ b/src/gui/widgets/window.cpp @@ -75,6 +75,7 @@ Window::Window(const std::string &caption, const bool modal, mCaptionOffsetY(5), mCaptionAlign(gcn::Graphics::LEFT), mTitlePadding(4), + mResizeHandles(-1), mRedraw(true), mCaptionFont(getFont()) { @@ -195,7 +196,8 @@ void Window::draw(gcn::Graphics *graphics) // Draw Close Button if (mCloseButton) { - const Image *const button = mSkin->getCloseImage(); + const Image *const button = mSkin->getCloseImage( + mResizeHandles == CLOSE); if (button) g->drawImage(button, mCloseRect.x, mCloseRect.y); } @@ -388,11 +390,11 @@ void Window::widgetResized(const gcn::Event &event A_UNUSED) int h = area.height; mLayout->reflow(w, h); } - const bool showClose = mCloseButton && mSkin->getCloseImage(); + const bool showClose = mCloseButton && mSkin->getCloseImage(false); const int closePadding = getOption("closePadding"); if (showClose) { - const Image *const button = mSkin->getCloseImage(); + const Image *const button = mSkin->getCloseImage(false); const int x = getWidth() - button->getWidth() - closePadding; mCloseRect.x = x; mCloseRect.y = closePadding; @@ -406,7 +408,7 @@ void Window::widgetResized(const gcn::Event &event A_UNUSED) { int x = getWidth() - button->getWidth() - closePadding; if (showClose) - x -= mSkin->getCloseImage()->getWidth() + closePadding; + x -= mSkin->getCloseImage(false)->getWidth() + closePadding; mStickyRect.x = x; mStickyRect.y = closePadding; @@ -520,7 +522,7 @@ void Window::mousePressed(gcn::MouseEvent &event) } // Handle window resizing - mouseResize = getResizeHandles(event); + mouseResize = getResizeHandles(event) & resizeMask; if (canMove()) mMoved = !mouseResize; else @@ -557,10 +559,10 @@ void Window::mouseMoved(gcn::MouseEvent &event) if (!gui) return; - const int resizeHandles = getResizeHandles(event); + mResizeHandles = getResizeHandles(event); // Changes the custom mouse cursor based on it's current position. - switch (resizeHandles) + switch (mResizeHandles & resizeMask) { case BOTTOM | RIGHT: case TOP | LEFT: @@ -890,15 +892,16 @@ int Window::getResizeHandles(const gcn::MouseEvent &event) return 0; int resizeHandles = 0; + const unsigned y = event.getY(); + const unsigned x = event.getX(); + if (mCloseRect.isPointInRect(x, y)) + return CLOSE; + if (!mStickyButtonLock || !mSticky) { - const unsigned y = event.getY(); - if (mGrip && (y > mTitleBarHeight || (y < getPadding() && mTitleBarHeight > getPadding()))) { - const unsigned x = event.getX(); - if (!getWindowArea().isPointInRect(x, y) && event.getSource() == this) { diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h index 28976f2ca..01519e271 100644 --- a/src/gui/widgets/window.h +++ b/src/gui/widgets/window.h @@ -422,9 +422,12 @@ class Window : public gcn::Window, private gcn::WidgetListener TOP = 0x01, RIGHT = 0x02, BOTTOM = 0x04, - LEFT = 0x08 + LEFT = 0x08, + CLOSE = 0x10 }; + const int resizeMask = 8 + 4 + 2 + 1; + /** * Ensures the window is on the screen, moving it if necessary. This is * used by loadWindowState and setVisible(true), and when the screen @@ -479,6 +482,7 @@ class Window : public gcn::Window, private gcn::WidgetListener int mCaptionOffsetY; int mCaptionAlign; int mTitlePadding; + int mResizeHandles; bool mRedraw; gcn::Font *mCaptionFont; }; |