X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e0e4b2b0e95c737ac7de5d10cf701ad74e34a124..3d777efedc1e05bd6c2a7c34a00a65895b62bb13:/src/html/m_image.cpp diff --git a/src/html/m_image.cpp b/src/html/m_image.cpp index 6394fa1b2b..d1f550212e 100644 --- a/src/html/m_image.cpp +++ b/src/html/m_image.cpp @@ -2,7 +2,6 @@ // Name: src/html/m_image.cpp // Purpose: wxHtml module for displaying images // Author: Vaclav Slavik -// RCS-ID: $Id$ // Copyright: (c) 1999 Vaclav Slavik, Joel Lucsy // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -95,6 +94,7 @@ wxHtmlLinkInfo *wxHtmlImageMapAreaCell::GetLink( int x, int y ) const switch (type) { case RECT: + if ( coords.GetCount() == 4 ) { int l, t, r, b; @@ -106,9 +106,10 @@ wxHtmlLinkInfo *wxHtmlImageMapAreaCell::GetLink( int x, int y ) const { return m_Link; } - break; } + break; case CIRCLE: + if ( coords.GetCount() == 3 ) { int l, t, r; double d; @@ -124,88 +125,86 @@ wxHtmlLinkInfo *wxHtmlImageMapAreaCell::GetLink( int x, int y ) const } break; case POLY: - { - if (coords.GetCount() >= 6) - { - int intersects = 0; - int wherex = x; - int wherey = y; - int totalv = coords.GetCount() / 2; - int totalc = totalv * 2; - int xval = coords[totalc - 2]; - int yval = coords[totalc - 1]; - int end = totalc; - int pointer = 1; - - if ((yval >= wherey) != (coords[pointer] >= wherey)) - { - if ((xval >= wherex) == (coords[0] >= wherex)) - { - intersects += (xval >= wherex) ? 1 : 0; - } - else - { - intersects += ((xval - (yval - wherey) * - (coords[0] - xval) / - (coords[pointer] - yval)) >= wherex) ? 1 : 0; - } - } - - while (pointer < end) - { - yval = coords[pointer]; - pointer += 2; - if (yval >= wherey) - { - while ((pointer < end) && (coords[pointer] >= wherey)) - { - pointer += 2; - } - if (pointer >= end) - { - break; - } - if ((coords[pointer - 3] >= wherex) == - (coords[pointer - 1] >= wherex)) { - intersects += (coords[pointer - 3] >= wherex) ? 1 : 0; - } - else - { - intersects += - ((coords[pointer - 3] - (coords[pointer - 2] - wherey) * - (coords[pointer - 1] - coords[pointer - 3]) / - (coords[pointer] - coords[pointer - 2])) >= wherex) ? 1 : 0; - } - } - else - { - while ((pointer < end) && (coords[pointer] < wherey)) - { - pointer += 2; - } - if (pointer >= end) - { - break; - } - if ((coords[pointer - 3] >= wherex) == - (coords[pointer - 1] >= wherex)) - { - intersects += (coords[pointer - 3] >= wherex) ? 1 : 0; - } - else - { - intersects += - ((coords[pointer - 3] - (coords[pointer - 2] - wherey) * - (coords[pointer - 1] - coords[pointer - 3]) / - (coords[pointer] - coords[pointer - 2])) >= wherex) ? 1 : 0; - } - } - } - if ((intersects & 1) != 0) - { - return m_Link; - } - } + if (coords.GetCount() >= 6) + { + int intersects = 0; + int wherex = x; + int wherey = y; + int totalv = coords.GetCount() / 2; + int totalc = totalv * 2; + int xval = coords[totalc - 2]; + int yval = coords[totalc - 1]; + int end = totalc; + int pointer = 1; + + if ((yval >= wherey) != (coords[pointer] >= wherey)) + { + if ((xval >= wherex) == (coords[0] >= wherex)) + { + intersects += (xval >= wherex) ? 1 : 0; + } + else + { + intersects += ((xval - (yval - wherey) * + (coords[0] - xval) / + (coords[pointer] - yval)) >= wherex) ? 1 : 0; + } + } + + while (pointer < end) + { + yval = coords[pointer]; + pointer += 2; + if (yval >= wherey) + { + while ((pointer < end) && (coords[pointer] >= wherey)) + { + pointer += 2; + } + if (pointer >= end) + { + break; + } + if ((coords[pointer - 3] >= wherex) == + (coords[pointer - 1] >= wherex)) { + intersects += (coords[pointer - 3] >= wherex) ? 1 : 0; + } + else + { + intersects += + ((coords[pointer - 3] - (coords[pointer - 2] - wherey) * + (coords[pointer - 1] - coords[pointer - 3]) / + (coords[pointer] - coords[pointer - 2])) >= wherex) ? 1 : 0; + } + } + else + { + while ((pointer < end) && (coords[pointer] < wherey)) + { + pointer += 2; + } + if (pointer >= end) + { + break; + } + if ((coords[pointer - 3] >= wherex) == + (coords[pointer - 1] >= wherex)) + { + intersects += (coords[pointer - 3] >= wherex) ? 1 : 0; + } + else + { + intersects += + ((coords[pointer - 3] - (coords[pointer - 2] - wherey) * + (coords[pointer - 1] - coords[pointer - 3]) / + (coords[pointer] - coords[pointer - 2])) >= wherex) ? 1 : 0; + } + } + } + if ((intersects & 1) != 0) + { + return m_Link; + } } break; }