public Area getArea(int absLeft, int absTop, int offset) {

        if (isOverElement(absLeft, absTop)) {
            if (absLeft < (m_left + 10)) {
                // left border
                if (absTop < (m_top + offset)) {
                    // top left corner
                    return Area.CORNER_TOP_LEFT;
                } else if (absTop > ((m_top + m_height) - offset)) {
                    // bottom left corner
                    return Area.CORNER_BOTTOM_LEFT;
                }
                return Area.BORDER_LEFT;
            }
            if (absLeft > ((m_left + m_width) - offset)) {
                // right border
                if (absTop < (m_top + offset)) {
                    // top right corner
                    return Area.CORNER_TOP_RIGHT;
                    // fixing opposite corner
                } else if (absTop > ((m_top + m_height) - offset)) {
                    // bottom right corner
                    return Area.CORNER_BOTTOM_RIGHT;
                    // fixing opposite corner
                }
                return Area.BORDER_RIGHT;
            }
            if (absTop < (m_top + offset)) {
                // border top
                return Area.BORDER_TOP;
            } else if (absTop > ((m_top + m_height) - offset)) {
                // border bottom
                return Area.BORDER_BOTTOM;
            }
            return Area.CENTER;
        }
        return null;
    }