From 5b6037bba0a247515bffdb1c0914d9cb01b8518c Mon Sep 17 00:00:00 2001 From: pescuma Date: Sun, 25 Jan 2009 17:17:36 +0000 Subject: 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 --- Plugins/skins/Docs/skins_changelog.txt | 3 ++ Plugins/skins/Docs/skins_version.txt | 2 +- Plugins/skins/SkinLib/FieldState.cpp | 58 +++++++++++++++++++++------------- Plugins/skins/SkinLib/FieldState.h | 4 +-- Plugins/skins/m_skins.h | 2 ++ Plugins/skins/m_skins_cpp.h | 16 +++++----- Plugins/skins/skins.cpp | 29 +++++++++++++++++ 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; -- cgit v1.2.3