summaryrefslogtreecommitdiff
path: root/src/gui/widgets/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/widgets/window.cpp')
-rw-r--r--src/gui/widgets/window.cpp46
1 files changed, 21 insertions, 25 deletions
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index ce893c360..0a0951f9e 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -33,7 +33,6 @@
#include "gui/viewport.h"
#include "gui/widgets/layout.h"
-#include "gui/widgets/resizegrip.h"
#include "resources/image.h"
@@ -77,6 +76,7 @@ Window::Window(const std::string &caption, const bool modal,
mCaptionOffsetY(5),
mCaptionAlign(gcn::Graphics::LEFT),
mTitlePadding(4),
+ mGripPadding(2),
mResizeHandles(-1),
mRedraw(true),
mCaptionFont(getFont())
@@ -106,6 +106,7 @@ Window::Window(const std::string &caption, const bool modal,
mCaptionFont = reinterpret_cast<gcn::Font*>(boldFont);
setTitlePadding(mSkin->getTitlePadding());
setTitleBarHeight(getOption("titlebarHeight"));
+ mGripPadding = getOption("resizePadding");
mCaptionOffsetX = getOption("captionoffsetx");
if (!mCaptionOffsetX)
mCaptionOffsetX = 7;
@@ -121,6 +122,7 @@ Window::Window(const std::string &caption, const bool modal,
}
}
+
// Add this window to the window container
windowContainer->add(this);
@@ -163,6 +165,11 @@ Window::~Window()
Theme::instance()->unload(mSkin);
mSkin = nullptr;
}
+ if (mGrip)
+ {
+ mGrip->decRef();
+ mGrip = nullptr;
+ }
}
void Window::setWindowContainer(WindowContainer *wc)
@@ -213,6 +220,9 @@ void Window::draw(gcn::Graphics *graphics)
g->drawImage(button, mStickyRect.x, mStickyRect.y);
}
+ if (mGrip)
+ g->drawImage(mGrip, mGripRect.x, mGripRect.y);
+
if (update)
{
g->setRedraw(update);
@@ -358,27 +368,19 @@ void Window::setMaxHeight(const int height)
void Window::setResizable(const bool r)
{
- if (static_cast<bool>(mGrip) == r)
+ if ((mGrip != nullptr) == r)
return;
+ if (mGrip)
+ mGrip->decRef();
if (r)
{
- if (mGrip)
- {
- remove(mGrip);
- delete mGrip;
- }
- mGrip = new ResizeGrip;
- mGrip->setX(mDimension.width - mGrip->getWidth()
- - getChildrenArea().x);
- mGrip->setY(mDimension.height - mGrip->getHeight()
- - getChildrenArea().y);
- add(mGrip);
+ mGrip = Theme::getImageFromThemeXml("resize.xml", "");
+ mGripRect.x = mDimension.width - mGrip->getWidth() - mGripPadding;
+ mGripRect.y = mDimension.height - mGrip->getHeight() - mGripPadding;
}
else
{
- remove(mGrip);
- delete mGrip;
mGrip = nullptr;
}
}
@@ -389,8 +391,8 @@ void Window::widgetResized(const gcn::Event &event A_UNUSED)
if (mGrip)
{
- mGrip->setPosition(mDimension.width - mGrip->getWidth() - area.x,
- mDimension.height - mGrip->getHeight() - area.y);
+ mGripRect.x = mDimension.width - mGrip->getWidth() - mGripPadding;
+ mGripRect.y = mDimension.height - mGrip->getHeight() - mGripPadding;
}
if (mLayout)
@@ -474,7 +476,6 @@ void Window::setStickyButtonLock(const bool lock)
{
mStickyButtonLock = lock;
mStickyButton = lock;
-// mMovable = false;
}
void Window::setVisible(bool visible)
@@ -919,8 +920,7 @@ int Window::getResizeHandles(const gcn::MouseEvent &event)
resizeHandles |= (y > mDimension.height - resizeBorderWidth)
? BOTTOM : (y < resizeBorderWidth) ? TOP : 0;
}
-
- if (event.getSource() == mGrip)
+ if (x >= mGripRect.x && y >= mGripRect.y)
{
mDragOffsetX = x;
mDragOffsetY = y;
@@ -944,7 +944,7 @@ bool Window::isResizeAllowed(const gcn::MouseEvent &event) const
if (!getWindowArea().isPointInRect(x, y) && event.getSource() == this)
return true;
- if (event.getSource() == mGrip)
+ if (x >= mGripRect.x && y >= mGripRect.y)
return true;
}
@@ -969,10 +969,6 @@ void Window::clearLayout()
{
clear();
- // Restore the resize grip
- if (mGrip)
- add(mGrip);
-
// Recreate layout instance when one is present
if (mLayout)
{