Beispiel #1
0
//-------------------------------------------------------------------------------
void HUD::tick(const Ogre::FrameEvent &evt)
{
    //Update each timer, removing it if it's run out.
    for (TimerMap::iterator iter = mTimers.begin(); iter != mTimers.end(); )
    {
        Timer *timer = iter->second;

        if (!timer->update(evt.timeSinceLastFrame))
        {
            delete iter->second;
            mTimers.erase(iter++);
        }
        else
            ++iter;
    }

    //Update each pickup display.
    int i = 0;
    for (PickupDisplayMap::iterator iter = mPickupDisplays.begin(); 
            iter != mPickupDisplays.end(); ++i, ++iter)
        iter->second->update(pickupDisplayPosition(i));

    //Update each icon.
    i = 0;
    int num = mIcons.size();
    for (IconMap::iterator iter = mIcons.begin(); 
            iter != mIcons.end(); ++i, ++iter)
        iter->second->update(iconPosition(i, num));

    //If there's a bonus time, show it, else don't.
    if (mBonusTimer)
        if (GlbVar.bonusTime > 0)
        {
            Ogre::Vector2 pos = timerPosition(0);
            mBonusTimer->setCoord(MyGUI::IntCoord(pos.x, pos.y, TEXT_WIDTH, TEXT_HEIGHT));
            mBonusTimer->setCaption(Ogre::StringConverter::toString((int) GlbVar.bonusTime));
        }
        else
            mBonusTimer->setCaption("");
}
	void TreeViewCheckBoxNode::onDraw()
	{
		Brush* brush = Brush::getSingletonPtr();

		brush->setFilterMode(mDesc->widget_brushFilterMode);

		// Draw Background
		Point backgroundPosition(mTexturePosition);
		backgroundPosition.x += mWidgetDesc->widget_dimensions.size.height;
		brush->drawSkinElement(Rect(backgroundPosition,mWidgetDesc->widget_dimensions.size),mSkinElement);

		// if Selected, draw Selected SkinElement
		if(mDesc->treeviewnode_selected)
			brush->drawSkinElement(Rect(backgroundPosition,mWidgetDesc->widget_dimensions.size),mSkinType->getSkinElement(SELECTED));

		ColourValue prevColor = brush->getColour();
		Rect prevClipRegion = brush->getClipRegion();

		// Draw Icon
		Point iconPosition(mTexturePosition.x + (mWidgetDesc->widget_dimensions.size.height * 2),mTexturePosition.y);
		brush->drawSkinElement(Rect(iconPosition,Size(mWidgetDesc->widget_dimensions.size.height)),mSkinType->getSkinElement(ICON));

		// Clip to client dimensions
		Rect clipRegion(mTexturePosition,Size(mWidgetDesc->widget_dimensions.size.width - mWidgetDesc->widget_dimensions.size.height,mWidgetDesc->widget_dimensions.size.height));
		clipRegion.translate(Point(mWidgetDesc->widget_dimensions.size.height * 3,0));

		brush->setClipRegion(prevClipRegion.getIntersection(clipRegion));

		// Adjust Rect to Text drawing region
		Point textPosition = clipRegion.position;

		mText->draw(textPosition);

		// Restore Clipping
		brush->setClipRegion(prevClipRegion);
		brush->setColor(prevColor);
	}
void MButtonViewPrivate::calcIconTextRects()
{
    Q_Q(const MButtonView);

    const MButtonStyle *s = static_cast<const MButtonStyle *>(q->style().operator ->());

    //total horizontal and vertical text margins
    int hTextMargin = s->textMarginLeft() + s->textMarginRight();
    int vTextMargin = s->textMarginTop() + s->textMarginBottom();

    //total horizontal and vertical padding
    int hPadding = s->paddingLeft() + s->paddingRight();
    int vPadding = s->paddingTop() + s->paddingBottom();

    //area for the content (icon and text)
    QRectF contentRect(s->paddingLeft(), s->paddingTop(),
                      q->size().width() - hPadding,
                      q->size().height() - vPadding);

    //text rect when there is no icon
    QRectF textRect(contentRect.left() + s->textMarginLeft(),
                    contentRect.top() + s->textMarginTop(),
                    contentRect.width() - hTextMargin,
                    contentRect.height() - vTextMargin);

    QSizeF textSize(0,0);
    if (label)
        textSize = label->sizeHint(Qt::PreferredSize);

    //icon visible and valid?
    if (q->model()->iconVisible() && (icon || toggledIcon)) {
        int iconWidth = s->iconSize().width();
        int iconHeight = s->iconSize().height();

        QSizeF iconSize(iconWidth, iconHeight);
        QPointF iconPosition(0, 0);

        //text visible and valid?
        if (q->model()->textVisible() && !q->model()->text().isEmpty()) {
            textSize.setWidth(qMin(textSize.width(), contentRect.width() - iconWidth - hTextMargin));
            switch (q->style()->iconAlign()) {
                //icon on left and text on right
            case Qt::AlignLeft: {
                if (s->horizontalTextAlign() == Qt::AlignHCenter)
                    iconPosition.setX(contentRect.center().x() - iconWidth - (textSize.width() / 2));
                else if (s->horizontalTextAlign() == Qt::AlignRight)
                    iconPosition.setX(contentRect.right() - textSize.width() - iconWidth - hTextMargin);
                else if (s->horizontalTextAlign() == Qt::AlignLeft)
                    iconPosition.setX(contentRect.left());

                iconPosition.setY(contentRect.center().y() - (iconHeight / 2));
                textRect.setX(contentRect.left() + s->textMarginLeft() + iconWidth);
                textRect.setWidth(contentRect.width() - iconWidth - hTextMargin);
                break;
            }

            //icon on right and text on left
            case Qt::AlignRight: {
                if (s->horizontalTextAlign() == Qt::AlignHCenter)
                    iconPosition.setX(contentRect.center().x() + (textSize.width() / 2));
                else if (s->horizontalTextAlign() == Qt::AlignRight)
                    iconPosition.setX(contentRect.right() - iconWidth);
                else if (s->horizontalTextAlign() == Qt::AlignLeft)
                    iconPosition.setX(contentRect.left() + textSize.width() + hTextMargin);

                iconPosition.setY(contentRect.center().y() - (iconHeight / 2));
                textRect.setWidth(contentRect.width() - iconWidth - hTextMargin);
                break;
            }

            //icon on bottom and text on top
            case Qt::AlignBottom: {
                iconPosition = QPointF(contentRect.center().x() - (iconWidth / 2), contentRect.bottom() - iconHeight);
                textRect.setHeight(contentRect.height() - iconHeight - vTextMargin);
                break;
            }

            //icon on top and text on bottom
            default: {
                iconPosition = QPointF(contentRect.center().x() - (iconWidth / 2), contentRect.top());
                textRect.setY(iconRect.bottom() + q->style()->textMarginTop());
                textRect.setHeight(contentRect.height() - iconHeight - vTextMargin);
                break;
            }
            }
        }
        // no text
        else {
            //icon on center
            iconPosition = QPointF(contentRect.center().x() - (iconWidth / 2), contentRect.center().y() - (iconHeight / 2));
        }

        iconRect = QRectF(iconPosition, iconSize);
    }

    //adjust label with button margins
    if (label) {
        if (controller->layoutDirection() == Qt::LeftToRight)
            label->setGeometry(textRect.translated(q->marginLeft(), q->marginTop()));
        else
            label->setGeometry(textRect.translated(q->marginRight(), q->marginTop()));
    }
}