Example #1
0
ScrollBar::ScrollBar()
	: currentValue_(0),
	  maxValue_(1),
	  stepSize_(0.1)
{
	setOutlineColor(DEFAULT_OUTLINE_COLOR);
	setOutlineThickness(DEFAULT_OUTLINE_THICKNESS);

	scrollIndicator_ = new RectangularWidget();
	scrollIndicator_->setSize({this->getSize().x, 4});
	scrollIndicator_->setAnchor({0.5, 0.5});
	scrollIndicator_->setParentAnchor({0.5, 0});
	scrollIndicator_->setFillColor(sf::Color::Red);
	updateScrollIndicator();
	addWidget(scrollIndicator_);

	scrollUpButton_ = new Button();
	scrollUpButton_->signalLeftMouseButtonPressed.connect([this] { stepScroll(UP); });
	scrollUpButton_->signalLeftMouseButtonHeld.connect([this] (float frameTimeInSeconds) { smoothScroll(UP, frameTimeInSeconds); });
//	scrollUpButton_->setText("^");
	scrollUpButton_->setSize(this->getSize());
	scrollUpButton_->setOutlineThickness(1);
	scrollUpButton_->setOutlineColor(DEFAULT_OUTLINE_COLOR);
	addWidget(scrollUpButton_);

	scrollDownButton_ = new Button();
	scrollDownButton_->signalLeftMouseButtonPressed.connect([this] { stepScroll(DOWN); });
	scrollDownButton_->signalLeftMouseButtonHeld.connect([this] (float frameTimeInSeconds) { smoothScroll(DOWN, frameTimeInSeconds); });
//	scrollDownButton_->setText("v");
	scrollDownButton_->setSize(this->getSize());
	scrollDownButton_->setOutlineThickness(1);
	scrollDownButton_->setOutlineColor(DEFAULT_OUTLINE_COLOR);
	scrollDownButton_->setAnchor({0, 1});
	scrollDownButton_->setParentAnchor({0, 1});
	addWidget(scrollDownButton_);
}
Example #2
0
void HFViewport::onTouchesMoved(const std::vector<Touch*>& pTouches, Event *pEvent)
{
    if (notMove) {
        return;
    }
    CC_ASSERT(this->m_TargetNode);
    if( m_TargetNode == NULL )
        return;
    
    vector<CCTouch*> tmpTouches;
    auto tmpIt = pTouches.begin();
    while (tmpIt != pTouches.end()) {
        auto tmpTouch = dynamic_cast<CCTouch*>(*tmpIt);
        if (mFingerMap.find(tmpTouch->getID()) != mFingerMap.end()) {
            tmpTouches.push_back(tmpTouch);
        }
        ++tmpIt;
    }
    switch(tmpTouches.size())
    {
        case 1:
        {
            CCTouch* ptouch = *tmpTouches.begin();
            if (!m_bTouchMoved && !moveableCheck(ptouch)) {
                return;
            }
            
            CC_BREAK_IF(this->mTouchMode != TouchMode_Scroll);
            
            if (!mForceStopScroll && mMovable) {
                CCPoint newPoint, moveDistance;
                stepScroll(ptouch);
                m_tTouchTime = getNowTime();
                newPoint     = this->convertTouchToNodeSpace(ptouch);
                moveDistance = ccpSub(newPoint, m_tTouchPoint);
                
                if (!mIsProcessingScroll) {
                    m_tTouchPoint = CCPointZero;
                }
                
                float dis = 0.0f;
                dis = sqrtf(moveDistance.x*moveDistance.x + moveDistance.y*moveDistance.y);
                
                if (fabs(convertDistanceFromPointToInch(dis)) < MOVE_INCH )
                {
                    //CCLOG("Invalid movement, distance = [%f, %f], disInch = %f", moveDistance.x, moveDistance.y);
                    return;
                }
                if (!m_bTouchMoved)
                {
                    moveDistance = CCPointZero;
                }
                m_tTouchPoint = newPoint;
                m_bTouchMoved = true;
                m_tScrollDistance = moveDistance;
                
            }
        }
            break;
        case 2:
            CC_BREAK_IF(this->mTouchMode != TouchMode_Zoom);
            do
            {
                CCTouch* objTouch1 = *tmpTouches.begin();
                CCTouch* objTouch2 = tmpTouches.back();
                stepZoom(objTouch1->getLocation(), objTouch2->getLocation());
            }
            while(0);
            break;
        default:
            CCLOG("move:Touch not support with %d fingers", pTouches.size());
            mFingerMap.clear();
    }
}
Example #3
0
void ScrollBar::smoothScroll(float direction, float elapsedTimeInSeconds)
{
	stepScroll(direction, elapsedTimeInSeconds * 20);
}