From 30f9565911217d38cefda3920f55d183d8f6e219 Mon Sep 17 00:00:00 2001 From: pescuma Date: Mon, 5 Jan 2009 02:30:47 +0000 Subject: Some refactors Changed project settings Added align git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@123 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/skins/SkinLib/FieldState.cpp | 51 ++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 8 deletions(-) (limited to 'Plugins/skins/SkinLib/FieldState.cpp') 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; +} -- cgit v1.2.3