summaryrefslogtreecommitdiff
path: root/Plugins/skins/SkinLib/FieldState.cpp
diff options
context:
space:
mode:
authorpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-01-25 17:17:36 +0000
committerpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-01-25 17:17:36 +0000
commit5b6037bba0a247515bffdb1c0914d9cb01b8518c (patch)
tree8ad4f59c2b2f13b3ad45fb9b7d3c94ea99aa80a3 /Plugins/skins/SkinLib/FieldState.cpp
parent479d892f7889ac0e9e7882583c4bdb1153c488ed (diff)
skins: 0.0.0.3
* Better handling of small sizes git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@137 c086bb3d-8645-0410-b8da-73a8550f86e7
Diffstat (limited to 'Plugins/skins/SkinLib/FieldState.cpp')
-rw-r--r--Plugins/skins/SkinLib/FieldState.cpp58
1 files changed, 36 insertions, 22 deletions
diff --git a/Plugins/skins/SkinLib/FieldState.cpp b/Plugins/skins/SkinLib/FieldState.cpp
index 1d112cc..6851005 100644
--- a/Plugins/skins/SkinLib/FieldState.cpp
+++ b/Plugins/skins/SkinLib/FieldState.cpp
@@ -234,7 +234,15 @@ static inline int beetween(int val, int minVal, int maxVal)
return max(minVal, min(maxVal, val));
}
-RECT FieldState::getRect() const
+static inline void intersection(RECT &main, const RECT &other)
+{
+ main.left = beetween(main.left, other.left, other.right);
+ main.right = beetween(main.right, other.left, other.right);
+ main.top = beetween(main.top, other.top, other.bottom);
+ main.bottom = beetween(main.bottom, other.top, other.bottom);
+}
+
+RECT FieldState::getRect(bool raw) const
{
RECT ret = {0};
@@ -243,10 +251,33 @@ RECT FieldState::getRect() const
RECT inside = dialog->getInsideRect();
- ret.left = beetween(getLeft() + inside.left, inside.left, inside.right);
- ret.right = beetween(getRight() + inside.left, inside.left, inside.right);
- ret.top = beetween(getTop() + inside.top, inside.top, inside.bottom);
- ret.bottom = beetween(getBottom() + inside.top, inside.top, inside.bottom);
+ ret.left = getLeft() + inside.left;
+ ret.right = getRight() + inside.left;
+ ret.top = getTop() + inside.top;
+ ret.bottom = getBottom() + inside.top;
+
+ if (!raw)
+ intersection(ret, inside);
+
+ return ret;
+}
+
+RECT FieldState::getInsideRect(bool raw) const
+{
+ RECT ret = {0};
+
+ if (!visible)
+ return ret;
+
+ RECT inside = dialog->getInsideRect();
+
+ ret.left = getLeft() + borders.getLeft() + inside.left;
+ ret.right = getRight() - borders.getRight() + inside.left;
+ ret.top = getTop() + borders.getTop() + inside.top;
+ ret.bottom = getBottom() - borders.getBottom() + inside.top;
+
+ if (!raw)
+ intersection(ret, inside);
return ret;
}
@@ -270,20 +301,3 @@ void FieldState::setVAlign(VERTICAL_ALIGN valign)
{
this->valign = valign;
}
-
-RECT FieldState::getInsideRect() const
-{
- RECT ret = {0};
-
- if (!visible)
- return ret;
-
- RECT inside = dialog->getInsideRect();
-
- ret.left = beetween(getLeft() + borders.getLeft() + inside.left, inside.left, inside.right);
- ret.right = beetween(getRight() - borders.getRight() + inside.left, inside.left, inside.right);
- ret.top = beetween(getTop() + borders.getTop() + inside.top, inside.top, inside.bottom);
- ret.bottom = beetween(getBottom() - borders.getBottom() + inside.top, inside.top, inside.bottom);
-
- return ret;
-}