void CAIndicator::setIndicator(const CCSize& parentSize, const CCRect& childrenFrame) { if ( !this->isVisible()) return; CAScale9ImageView* indicator = dynamic_cast<CAScale9ImageView*>(m_pIndicator); if (m_eType == CAIndicatorTypeHorizontal) { float size_scale_x = parentSize.width / childrenFrame.size.width; size_scale_x = MIN(size_scale_x, 1.0f); float lenght_scale_x = parentSize.width / 2 - childrenFrame.origin.x; lenght_scale_x /= childrenFrame.size.width; CCSize size = m_obContentSize; size.width *= size_scale_x; if (lenght_scale_x < size_scale_x / 2) { size.width *= lenght_scale_x / (size_scale_x / 2); } if (1 - lenght_scale_x < size_scale_x / 2) { size.width *= (1 - lenght_scale_x) / (size_scale_x / 2); } size.width = MAX(size.height, size.width); if (!indicator->getPreferredSize().equals(size)) { indicator->setPreferredSize(size); } CCPoint point = m_obContentSize; point.y *= 0.5f; point.x *= lenght_scale_x; point.x = MAX(point.x, size.width/2); point.x = MIN(point.x, m_obContentSize.width - size.width/2); indicator->setCenterOrigin(point); } else if (m_eType == CAIndicatorTypeVertical) { float size_scale_y = parentSize.height / childrenFrame.size.height; size_scale_y = MIN(size_scale_y, 1.0f); float lenght_scale_y = parentSize.height / 2 - childrenFrame.origin.y; lenght_scale_y /= childrenFrame.size.height; CCSize size = m_obContentSize; size.height *= size_scale_y; if (lenght_scale_y < size_scale_y / 2) { size.height *= lenght_scale_y / (size_scale_y / 2); } if (1 - lenght_scale_y < size_scale_y / 2) { size.height *= (1 - lenght_scale_y) / (size_scale_y / 2); } size.height = MAX(size.height, size.width); if (!indicator->getPreferredSize().equals(size)) { indicator->setPreferredSize(size); } CCPoint point = m_obContentSize; point.x *= 0.5f; point.y *= lenght_scale_y; point.y = MAX(point.y, size.height/2); point.y = MIN(point.y, m_obContentSize.height - size.height/2); indicator->setCenterOrigin(point); } }