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(); }
void Widget::setPosition(const IntPoint& _pos) { // а вот теперь запоминаем новые координаты mCoord = _pos; _updateView(); }
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(); } }
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); }
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(); }
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(); }
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(); } }
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); }
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(); } }
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(); // только если не вызвано передвижение и сайз }
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(); } }
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(); }
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(); }
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(); } }
void PolygonalSkin::setWidth(float _width) { mLineWidth = _width; _updateView(); }
void MaskImageWidget::setShader(const ShaderPtr &s ) { m_shader = s; update_shader(); _updateView(); }