summaryrefslogtreecommitdiff
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
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
-rw-r--r--Plugins/skins/Docs/skins_changelog.txt3
-rw-r--r--Plugins/skins/Docs/skins_version.txt2
-rw-r--r--Plugins/skins/SkinLib/FieldState.cpp58
-rw-r--r--Plugins/skins/SkinLib/FieldState.h4
-rw-r--r--Plugins/skins/m_skins.h2
-rw-r--r--Plugins/skins/m_skins_cpp.h16
-rw-r--r--Plugins/skins/skins.cpp29
7 files changed, 81 insertions, 33 deletions
diff --git a/Plugins/skins/Docs/skins_changelog.txt b/Plugins/skins/Docs/skins_changelog.txt
index 584655e..27a687e 100644
--- a/Plugins/skins/Docs/skins_changelog.txt
+++ b/Plugins/skins/Docs/skins_changelog.txt
@@ -2,6 +2,9 @@ Skins
Changelog:
+. 0.0.0.3
+ * Better handling of small sizes
+
. 0.0.0.2
* Fix for float numbers
+ Added valign (not used yet)
diff --git a/Plugins/skins/Docs/skins_version.txt b/Plugins/skins/Docs/skins_version.txt
index edf515f..92fefe7 100644
--- a/Plugins/skins/Docs/skins_version.txt
+++ b/Plugins/skins/Docs/skins_version.txt
@@ -1 +1 @@
-Skins 0.0.0.2 \ No newline at end of file
+Skins 0.0.0.3 \ No newline at end of file
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;
-}
diff --git a/Plugins/skins/SkinLib/FieldState.h b/Plugins/skins/SkinLib/FieldState.h
index 98c1f86..d7c5521 100644
--- a/Plugins/skins/SkinLib/FieldState.h
+++ b/Plugins/skins/SkinLib/FieldState.h
@@ -78,8 +78,8 @@ public:
// Results
- virtual RECT getInsideRect() const;
- virtual RECT getRect() const;
+ virtual RECT getInsideRect(bool raw = false) const;
+ virtual RECT getRect(bool raw = false) const;
protected:
FieldState(DialogState *dialog, Field *field);
diff --git a/Plugins/skins/m_skins.h b/Plugins/skins/m_skins.h
index 5e692ea..da01064 100644
--- a/Plugins/skins/m_skins.h
+++ b/Plugins/skins/m_skins.h
@@ -95,6 +95,8 @@ struct SKIN_INTERFACE
// Field State methods
RECT (*GetRect)(SKINNED_FIELD_STATE field); // With borders
RECT (*GetInsideRect)(SKINNED_FIELD_STATE field); // Without borders
+ RECT (*GetRawRect)(SKINNED_FIELD_STATE field); // With borders, without processing to assert inside window
+ RECT (*GetRawInsideRect)(SKINNED_FIELD_STATE field); // Without borders, without processing to assert inside window
RECT (*GetBorders)(SKINNED_FIELD_STATE field);
BOOL (*IsVisible)(SKINNED_FIELD_STATE field);
char * (*GetToolTipA)(SKINNED_FIELD field); // You have to free the result
diff --git a/Plugins/skins/m_skins_cpp.h b/Plugins/skins/m_skins_cpp.h
index c290028..bdc7337 100644
--- a/Plugins/skins/m_skins_cpp.h
+++ b/Plugins/skins/m_skins_cpp.h
@@ -32,12 +32,12 @@ public:
SkinFieldState(SKINNED_FIELD_STATE field) : tooltip(NULL) { this->field = field; }
virtual ~SkinFieldState() { if (tooltip != NULL) mir_free(tooltip); }
- BOOL isValid() { return field != NULL; }
+ bool isValid() { return field != NULL; }
- RECT getRect() { return mski.GetRect(field); }
- RECT getInsideRect() { return mski.GetInsideRect(field); }
+ RECT getRect(bool raw = false) { return raw ? mski.GetRawRect(field) : mski.GetRect(field); }
+ RECT getInsideRect(bool raw = false) { return raw ? mski.GetRawInsideRect(field) : mski.GetInsideRect(field); }
RECT getBorders() { return mski.GetBorders(field); }
- BOOL isVisible() { return mski.IsVisible(field); }
+ bool isVisible() { return mski.IsVisible(field) != FALSE; }
int getHorizontalAlign() { return mski.GetHorizontalAlign(field); } // one of SKN_HALIGN_*
int getVerticalAlign() { return mski.GetVerticalAlign(field); } // one of SKN_VALIGN_*
@@ -105,7 +105,7 @@ class SkinDialogState
public:
SkinDialogState(SKINNED_DIALOG_STATE dlg) { this->dlg = dlg; }
- BOOL isValid() { return dlg != NULL; }
+ bool isValid() { return dlg != NULL; }
RECT getBorders() { return mski.GetDialogBorders(dlg); }
@@ -124,9 +124,9 @@ class SkinField
public:
SkinField(SKINNED_FIELD field) { this->field = field; }
- BOOL isValid() { return field != NULL; }
+ bool isValid() { return field != NULL; }
- void setEnabled(BOOL enabled) { mski.SetEnabled(field, enabled); }
+ void setEnabled(bool enabled) { mski.SetEnabled(field, enabled); }
void setToolTip(const TCHAR *tooltip) {
#ifdef UNICODE
@@ -177,7 +177,7 @@ public:
SkinDialog(const char *name, const char *description, const char *module) { dlg = mski.RegisterDialog(name, description, module); }
~SkinDialog() { mski.DeleteDialog(dlg); dlg = NULL; }
- BOOL isValid() { return dlg != NULL; }
+ bool isValid() { return dlg != NULL; }
void setSkinChangedCallback(SkinOptionsChangedCallback cb, void *param) { mski.SetSkinChangedCallback(dlg, cb, param); }
diff --git a/Plugins/skins/skins.cpp b/Plugins/skins/skins.cpp
index 47674d5..1f80611 100644
--- a/Plugins/skins/skins.cpp
+++ b/Plugins/skins/skins.cpp
@@ -709,6 +709,32 @@ RECT Interface_GetInsideRect(SKINNED_FIELD_STATE field)
return fieldState->getInsideRect();
}
+RECT Interface_GetRawRect(SKINNED_FIELD_STATE field)
+{
+ if (field == NULL)
+ {
+ RECT ret = {0};
+ return ret;
+ }
+
+ FieldState *fieldState = (FieldState *) field;
+
+ return fieldState->getRect(true);
+}
+
+RECT Interface_GetRawInsideRect(SKINNED_FIELD_STATE field)
+{
+ if (field == NULL)
+ {
+ RECT ret = {0};
+ return ret;
+ }
+
+ FieldState *fieldState = (FieldState *) field;
+
+ return fieldState->getInsideRect(true);
+}
+
RECT Interface_GetBorders(SKINNED_FIELD_STATE field)
{
RECT ret = {0};
@@ -928,6 +954,9 @@ static int Service_GetInterface(WPARAM wParam, LPARAM lParam)
mski->GetRect = &Interface_GetRect;
mski->GetInsideRect = &Interface_GetInsideRect;
+ mski->GetRawRect = &Interface_GetRawRect;
+ mski->GetRawInsideRect = &Interface_GetRawInsideRect;
+
mski->GetBorders = &Interface_GetBorders;
mski->IsVisible = &Interface_IsVisible;
mski->GetToolTipA = &Interface_GetToolTipA;