Пример #1
0
void ImageSkin::setImageSize( const IntSize& s )
{
    mImageSize = s;

    if (!mAlign.isHStretch())
    {
        if (mAlign.isLeft())
            mCoord.left = 0;
        else if (mAlign.isRight())
            mCoord.left = mCoord.right() - mImageSize.width;
        else if (mAlign.isHCenter())
            mCoord.left = (mCroppedParent->getWidth() - mImageSize.width) / 2;
        mCoord.width = mImageSize.width;
    }

    if (!mAlign.isVStretch())
    {
        if (mAlign.isTop())
            mCoord.top = 0;
        else if (mAlign.isBottom())
            mCoord.top = mCoord.bottom() - mImageSize.height;
        else if (mAlign.isVCenter())
            mCoord.top = (mCroppedParent->getHeight() - mImageSize.height) / 2;

        mCoord.height = mImageSize.height;
    }

    mCurrentCoord = mCoord;

    _updateView();
}
Пример #2
0
	void Widget::setPosition(const IntPoint& _pos)
	{
		// а вот теперь запоминаем новые координаты
		mCoord = _pos;

		_updateView();
	}
Пример #3
0
        void CachedWidget::frameEntered(float dt) {
            MyGUI::IntSize size = getSize();
            size.width = next_pot(size.width);
            size.height = next_pot(size.height);
            bool need_recreate = !m_target;
            if (!need_recreate) {
                if (size.width > m_target->getWidth())
                    need_recreate = true;
                if (size.height > m_target->getHeight())
                    need_recreate = true;
            }
            if (need_recreate) {
                if (m_target) {
                    m_target->resize(size);
                } else {
                    m_target = static_cast<mygui::RenderManager*>(MyGUI::RenderManager::getInstancePtr())->createTarget(size);
                }
                setRenderItemTexture(m_target->getTexture());
                _updateView();
            } else {
                if (!m_replaced_layer->isOutOfDate() && !m_render_content)
                    return;
            }

            if (m_target) {
                m_target->begin();
                Sandbox::Transform2d tr = m_target->graphics()->GetTransform();
                m_target->graphics()->SetTransform(tr.translated(-getAbsoluteLeft(),-getAbsoluteTop()).translated(m_suboffset));
                doRenderToTarget(m_target);
                m_target->graphics()->SetTransform(tr);
                m_target->end();
            }
        }
Пример #4
0
	void MainSkin::_setAlign(const IntCoord& _coord, bool _update)
	{
		CroppedRectangleInterface * parent = mParent->getParent();
		int margin_left, margin_top;
		if (null != parent) {
			margin_left = parent->getMarginLeft();
			margin_top = parent->getMarginTop();
		}
		else {
			margin_left = 0;
			margin_top = 0;
		}

		mOverlayContainer->setPositionInfo(mCoord.left + mParent->getLeft() - margin_left, mCoord.top + mParent->getTop() - margin_top, 0);

		if (_update) {
			_updateView();
			return;
		}

		// если обновлять не надо, то меняем только размер
		(mParent->getWidth() < 0) ? mCoord.width = 0 : mCoord.width = mParent->getWidth();
		(mParent->getHeight() < 0) ? mCoord.height = 0 : mCoord.height = mParent->getHeight();
		mOverlayContainer->setDimensionInfo(mCoord.width, mCoord.height, 0);

	}
Пример #5
0
 void KeepAspectSkin::updateRect(float tw, float th) {
     if (mTexture) {
         tw *= mTexture->getWidth();
         th *= mTexture->getHeight();
     }
     int rw = mCroppedParent->getWidth();
     int rh = mCroppedParent->getHeight();
     
     float sw = rw / tw;
     float sh = rh / th;
     float s = sw;
     if ( sh < s ) {
         s = sh;
     }
     
     int nrw = tw * s;
     int nrh = th * s;
     
     mCurrentCoord.set(0, 0, nrw, nrh);
     if (m_align.isVCenter()) {
         mCurrentCoord.top = (rh-nrh) / 2;
     } else if (m_align.isBottom()) {
         mCurrentCoord.top = rh-nrh;
     }
     if (m_align.isHCenter()) {
         mCurrentCoord.left = (rw-nrw)/2;
     } else if (m_align.isRight()) {
         mCurrentCoord.left = rw-nrw;
     }
     
     mCoord = mCurrentCoord;
     _updateView();
     
 }
Пример #6
0
	void Widget::setPosition(const IntPoint& _pos)
	{
		// обновляем абсолютные координаты
		mAbsolutePosition += _pos - mCoord.point();
		for (VectorWidgetPtr::iterator widget = mWidgetChild.begin(); widget != mWidgetChild.end(); ++widget) (*widget)->_updateAbsolutePoint();

		mCoord = _pos;
		_updateView();

	}
Пример #7
0
	void TileRect::_setAlign(const IntSize& _oldsize)
	{
		// необходимо разобраться
		bool need_update = true;

		// первоначальное выравнивание
		if (mAlign.isHStretch())
		{
			// растягиваем
			mCoord.width = mCoord.width + (mCroppedParent->getWidth() - _oldsize.width);
			need_update = true;
			mIsMargin = true; // при изменении размеров все пересчитывать
		}
		else if (mAlign.isRight())
		{
			// двигаем по правому краю
			mCoord.left = mCoord.left + (mCroppedParent->getWidth() - _oldsize.width);
			need_update = true;
		}
		else if (mAlign.isHCenter())
		{
			// выравнивание по горизонтали без растяжения
			mCoord.left = (mCroppedParent->getWidth() - mCoord.width) / 2;
			need_update = true;
		}

		if (mAlign.isVStretch())
		{
			// растягиваем
			mCoord.height = mCoord.height + (mCroppedParent->getHeight() - _oldsize.height);
			need_update = true;
			mIsMargin = true; // при изменении размеров все пересчитывать
		}
		else if (mAlign.isBottom())
		{
			// двигаем по нижнему краю
			mCoord.top = mCoord.top + (mCroppedParent->getHeight() - _oldsize.height);
			need_update = true;
		}
		else if (mAlign.isVCenter())
		{
			// выравнивание по вертикали без растяжения
			mCoord.top = (mCroppedParent->getHeight() - mCoord.height) / 2;
			need_update = true;
		}

		if (need_update)
		{
			mCurrentCoord = mCoord;
			if (!mTileH) mTileSize.width = mCoord.width;
			if (!mTileV) mTileSize.height = mCoord.height;
			_updateView();
		}

	}
Пример #8
0
	void MainSkin::_setAlign(const IntSize& _size, bool _update)
	{

		if (_update) {
			_updateView();
			return;
		}

		// если обновлять не надо, то меняем только размер
		(mParent->getWidth() < 0) ? mCoord.width = 0 : mCoord.width = mParent->getWidth();
		(mParent->getHeight() < 0) ? mCoord.height = 0 : mCoord.height = mParent->getHeight();
		mOverlayContainer->setDimensionInfo(mCoord.width, mCoord.height, 0);

	}
Пример #9
0
        void SubSkinHalfHStretch::_setAlign(const MyGUI::IntSize& _oldsize) {
            // необходимо разобраться
            bool need_update = true;//_update;
            
            // растягиваем
            if (mAlign.isLeft()) {
                mCoord.width += (mCroppedParent->getWidth()-m_center)/2 - (_oldsize.width-m_center) / 2;
                need_update = true;
                mIsMargin = true; // при изменении размеров все пересчитывать
            } else if (mAlign.isRight()) {
                
                int dleft = (mCroppedParent->getWidth()-m_center)/2 - (_oldsize.width-m_center) / 2;
                int dwidth = mCroppedParent->getWidth() - _oldsize.width;
                
                mCoord.left += dleft;
                mCoord.width += dwidth - dleft;
                need_update = true;
                mIsMargin = true; // при изменении размеров все пересчитывать
            } else {
                MYGUI_ASSERT(false, "HAlign must be left or right");
            }
            
            if (mAlign.isVStretch())
            {
                // растягиваем
                mCoord.height = mCoord.height + (mCroppedParent->getHeight() - _oldsize.height);
                need_update = true;
                mIsMargin = true; // при изменении размеров все пересчитывать
            }
            else if (mAlign.isBottom())
            {
                // двигаем по нижнему краю
                mCoord.top = mCoord.top + (mCroppedParent->getHeight() - _oldsize.height);
                need_update = true;
            }
            else if (mAlign.isVCenter())
            {
                // выравнивание по вертикали без растяжения
                mCoord.top = (mCroppedParent->getHeight() - mCoord.height) / 2;
                need_update = true;
            }
            
            if (need_update)
            {
                mCurrentCoord = mCoord;
                _updateView();
            }

        }
Пример #10
0
	void Widget::_setAlign(const IntSize& _size, bool _update)
	{
		if (mParent == null) return;

		bool need_move = false;
		bool need_size = false;
		IntCoord coord = mCoord;

		// первоначальное выравнивание
		if (IS_ALIGN_RIGHT(mAlign)) {
			if (IS_ALIGN_LEFT(mAlign)) {
				// растягиваем
				coord.width = mCoord.width + (mParent->getWidth() - _size.width);
				need_size = true;
			} else {
				// двигаем по правому краю
				coord.left = mCoord.left + (mParent->getWidth() - _size.width);
				need_move = true;
			}

		} else if (false == IS_ALIGN_LEFT(mAlign)) {
			// выравнивание по горизонтали без растяжения
			coord.left = (mParent->getWidth() - mCoord.width) / 2;
			need_move = true;
		}

		if (IS_ALIGN_BOTTOM(mAlign)) {
			if (IS_ALIGN_TOP(mAlign)) {
				// растягиваем
				coord.height = mCoord.height + (mParent->getHeight() - _size.height);
				need_size = true;
			} else {
				coord.top = mCoord.top + (mParent->getHeight() - _size.height);
				need_move = true;
			}
		} else if (false == IS_ALIGN_TOP(mAlign)) {
			// выравнивание по вертикали без растяжения
			coord.top = (mParent->getHeight() - mCoord.height) / 2;
			need_move = true;
		}

		if (need_move) {
			if (need_size) setPosition(coord);
			else setPosition(coord.point());
		} else if (need_size) {
			setSize(coord.size());
		} else _updateView(); // только если не вызвано передвижение и сайз

	}
Пример #11
0
 void SubSkinHalfVStretch::_setAlign(const MyGUI::IntSize& _oldsize) {
     // необходимо разобраться
     bool need_update = true;//_update;
     
     // растягиваем
     if (mAlign.isTop()) {
         mCoord.height += (mCroppedParent->getHeight()-m_center)/2 - (_oldsize.height - m_center) / 2;
         need_update = true;
         mIsMargin = true; // при изменении размеров все пересчитывать
     } else if (mAlign.isBottom()) {
         int dtop = (mCroppedParent->getHeight()-m_center)/2 - (_oldsize.height - m_center) / 2;
         int dheight = mCroppedParent->getHeight() - _oldsize.height;
         mCoord.top += dtop;
         mCoord.height += dheight - dtop;
         need_update = true;
         mIsMargin = true; // при изменении размеров все пересчитывать
     } else {
         MYGUI_ASSERT(false, "HAlign must be left or right");
     }
     
     // первоначальное выравнивание
     if (mAlign.isHStretch())
     {
         // растягиваем
         mCoord.width = mCoord.width + (mCroppedParent->getWidth() - _oldsize.width);
         need_update = true;
         mIsMargin = true; // при изменении размеров все пересчитывать
     }
     else if (mAlign.isRight())
     {
         // двигаем по правому краю
         mCoord.left = mCoord.left + (mCroppedParent->getWidth() - _oldsize.width);
         need_update = true;
     }
     else if (mAlign.isHCenter())
     {
         // выравнивание по горизонтали без растяжения
         mCoord.left = (mCroppedParent->getWidth() - mCoord.width) / 2;
         need_update = true;
     }
     
     if (need_update)
     {
         mCurrentCoord = mCoord;
         _updateView();
     }
     
 }
Пример #12
0
	void PolygonalSkin::setPoints(const std::vector<FloatPoint>& _points)
	{
		if (_points.size() < 2)
		{
			mVertexCount = 0;
			mResultVerticiesPos.clear();
			mResultVerticiesUV.clear();
			mLinePoints = _points;
			return;
		}

		VectorFloatPoint finalPoints;
		finalPoints.reserve(_points.size());

		mLineLength = 0.0f;
		FloatPoint point = _points[0];
		finalPoints.push_back(point);
		// ignore repeating points
		for (std::vector<FloatPoint>::const_iterator iter = _points.begin() + 1; iter != _points.end(); ++iter)
		{
			if (point != *iter)
			{
				finalPoints.push_back(*iter);
				mLineLength += len(iter->left - point.left, iter->top - point.top);
				point = *iter;
			}
		}

		mLinePoints = finalPoints;

#ifdef MYGUI_NO_POLYGONAL_SKIN_CROPPING
		size_t count = (mLinePoints.size() - 1) * VertexQuad::VertexCount * 2;
#else
		// it's too hard to calculate maximum possible verticies count and worst
		// approximation gives 7 times more verticies than in not cropped geometry
		// so we multiply count by 2, because this looks enough
		size_t count = (mLinePoints.size() - 1) * VertexQuad::VertexCount * 2 * 2;
#endif
		if (count > mVertexCount)
		{
			mVertexCount = count;
			if (nullptr != mRenderItem) mRenderItem->reallockDrawItem(this, mVertexCount);
		}

		_updateView();
	}
Пример #13
0
void ImageSkin::setAlign( Align _value )
{
    Base::setAlign(_value);

    if (!mAlign.isHStretch())
    {
        if (mAlign.isLeft())
            mCoord.left = 0;
        else if (mAlign.isRight())
            mCoord.left = mCroppedParent->getWidth() - mImageSize.width;
        else if (mAlign.isHCenter())
            mCoord.left = (mCroppedParent->getWidth() - mImageSize.width) / 2;
        mCoord.width = mImageSize.width;
    }
    else
    {
        mCoord.left = 0;
        mCoord.width = mCroppedParent->getWidth();
    }

    if (!mAlign.isVStretch())
    {
        if (mAlign.isTop())
            mCoord.top = 0;
        else if (mAlign.isBottom())
            mCoord.top = mCroppedParent->getHeight() - mImageSize.height;
        else if (mAlign.isVCenter())
            mCoord.top = (mCroppedParent->getHeight() - mImageSize.height) / 2;

        mCoord.height = mImageSize.height;
    }
    else
    {
        mCoord.top = 0;
        mCoord.height = mCroppedParent->getHeight();
    }

    mCurrentCoord = mCoord;

    _updateView();
}
Пример #14
0
	void EditText::_setAlign(const MyGUI::IntSize& _oldsize)
	{
		if (mWordWrap)
		{
			// передается старая координата всегда
			int width = mCroppedParent->getWidth();
			if (mOldWidth != width)
			{
				mOldWidth = width;
				mTextOutDate = true;
			}
		}

		// необходимо разобраться
		bool need_update = true;//_update;

		// первоначальное выравнивание
		if (mAlign.isHStretch())
		{
			// растягиваем
			mCoord.width = mCoord.width + (mCroppedParent->getWidth() - _oldsize.width);
			need_update = true;
			mIsMargin = true; // при изменении размеров все пересчитывать
		}
		else if (mAlign.isRight())
		{
			// двигаем по правому краю
			mCoord.left = mCoord.left + (mCroppedParent->getWidth() - _oldsize.width);
			need_update = true;
		}
		else if (mAlign.isHCenter())
		{
			// выравнивание по горизонтали без растяжения
			mCoord.left = (mCroppedParent->getWidth() - mCoord.width) / 2;
			need_update = true;
		}

		if (mAlign.isVStretch())
		{
			// растягиваем
			mCoord.height = mCoord.height + (mCroppedParent->getHeight() - _oldsize.height);
			need_update = true;
			mIsMargin = true; // при изменении размеров все пересчитывать
		}
		else if (mAlign.isBottom())
		{
			// двигаем по нижнему краю
			mCoord.top = mCoord.top + (mCroppedParent->getHeight() - _oldsize.height);
			need_update = true;
		}
		else if (mAlign.isVCenter())
		{
			// выравнивание по вертикали без растяжения
			mCoord.top = (mCroppedParent->getHeight() - mCoord.height) / 2;
			need_update = true;
		}

		if (need_update)
		{
			mCurrentCoord = mCoord;
			_updateView();
		}
	}
Пример #15
0
	void PolygonalSkin::setWidth(float _width)
	{
		mLineWidth = _width;
		_updateView();
	}
Пример #16
0
 void MaskImageWidget::setShader(const ShaderPtr &s ) {
      m_shader = s;
      update_shader();
      _updateView();
 }