diff options
author | pescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7> | 2009-01-05 02:30:47 +0000 |
---|---|---|
committer | pescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7> | 2009-01-05 02:30:47 +0000 |
commit | 30f9565911217d38cefda3920f55d183d8f6e219 (patch) | |
tree | 5b907567893e751131ae04ac91e37baf3f3775c8 /Plugins/skins/SkinLib/FieldState.cpp | |
parent | bcee062d113ca9da6e6b16b8b3fa6399db35fce4 (diff) |
Some refactors
Changed project settings
Added align
git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@123 c086bb3d-8645-0410-b8da-73a8550f86e7
Diffstat (limited to 'Plugins/skins/SkinLib/FieldState.cpp')
-rw-r--r-- | Plugins/skins/SkinLib/FieldState.cpp | 51 |
1 files changed, 43 insertions, 8 deletions
diff --git a/Plugins/skins/SkinLib/FieldState.cpp b/Plugins/skins/SkinLib/FieldState.cpp index c92b057..2509a77 100644 --- a/Plugins/skins/SkinLib/FieldState.cpp +++ b/Plugins/skins/SkinLib/FieldState.cpp @@ -1,5 +1,7 @@ #include "globals.h"
#include "FieldState.h"
+#include "DialogState.h"
+#include "BorderState.h"
#define START 1<<0
#define LEN 1<<1
@@ -10,8 +12,9 @@ #define LAST_SET(_FIELD_) (_FIELD_ >> LAST_SHIFT)
-FieldState::FieldState(Field *aField) : field(aField), size(-1, -1), pos(0, 0),
- usingX(0), usingY(0), visible(true)
+FieldState::FieldState(DialogState *aDialog, Field *aField)
+ : field(aField), dialog(aDialog), size(-1, -1), pos(0, 0),
+ usingX(0), usingY(0), visible(true)
{
}
@@ -24,6 +27,11 @@ Field * FieldState::getField() const return field;
}
+DialogState * FieldState::getDialog() const
+{
+ return dialog;
+}
+
int FieldState::getX() const
{
return pos.x;
@@ -108,7 +116,14 @@ void FieldState::setHeight(int height) bool FieldState::isVisible() const
{
- return visible;
+ if (!visible)
+ return false;
+
+ RECT rc = getRect();
+ if (rc.right <= rc.left || rc.bottom <= rc.top)
+ return false;
+
+ return true;
}
void FieldState::setVisible(bool visible)
@@ -174,8 +189,28 @@ void FieldState::setBottom(int botom) SET(usingY, END);
}
-//bool FieldState::isEmpty() const
-//{
-// Size s = getPreferedSize();
-// return s.x <= 0 || s.y <= 0;
-//}
\ No newline at end of file +static inline int beetween(int val, int minVal, int maxVal)
+{
+ return max(minVal, min(maxVal, val));
+}
+
+RECT FieldState::getRect() const
+{
+ RECT ret = { 0, 0, 0, 0 };
+
+ if (!visible)
+ return ret;
+
+ BorderState *borders = dialog->getBorders();
+ int left = max(0, borders->getLeft());
+ int right = max(left, min(dialog->getWidth(), dialog->getWidth() - borders->getRight()));
+ int top = max(0, borders->getTop());
+ int bottom = max(top, min(dialog->getHeight(), dialog->getHeight() - borders->getBottom()));
+
+ ret.left = beetween(getLeft() + borders->getLeft(), left, right);
+ ret.right = beetween(getRight(), left, right);
+ ret.top = beetween(getTop() + borders->getTop(), top, bottom);
+ ret.bottom = beetween(getBottom(), top, bottom);
+
+ return ret;
+}
|