void TileRect::_updateView() { bool margin = _checkMargin(); mEmptyView = ((0 >= _getViewWidth()) || (0 >= _getViewHeight())); mCurrentCoord.left = mCoord.left + mMargin.left; mCurrentCoord.top = mCoord.top + mMargin.top; mCurrentCoord.width = _getViewWidth(); mCurrentCoord.height = _getViewHeight(); // подсчитываем необходимое колличество тайлов if (!mEmptyView) { size_t count = 0; if (!mTileSize.empty()) { size_t count_x = mCoord.width / mTileSize.width; if ((mCoord.width % mTileSize.width) > 0) count_x ++; size_t count_y = mCoord.height / mTileSize.height; if ((mCoord.height % mTileSize.height) > 0) count_y ++; count = count_y * count_x * VertexQuad::VertexCount; } // нужно больше вершин if (count > mCountVertex) { mCountVertex = count + TILERECT_COUNT_VERTEX; if (nullptr != mRenderItem) mRenderItem->reallockDrawItem(this, mCountVertex); } } // вьюпорт стал битым if (margin) { // проверка на полный выход за границу if (_checkOutside()) { // запоминаем текущее состояние mIsMargin = margin; // обновить перед выходом if (nullptr != mNode) mNode->outOfDate(mRenderItem); return; } } // запоминаем текущее состояние mIsMargin = margin; if (nullptr != mNode) mNode->outOfDate(mRenderItem); }
void TurnedSubSkin::_updateView() { //mAbsolutePosition = mCroppedParent->getAbsolutePosition() + mCoord.point(); bool margin = _checkMargin(); mEmptyView = ((0 >= _getViewWidth()) || (0 >= _getViewHeight())); mCurrentCoord.left = mCoord.left + mMargin.left; mCurrentCoord.top = mCoord.top + mMargin.top; // вьюпорт стал битым if (margin) { // проверка на полный выход за границу if (_checkOutside()) { // запоминаем текущее состояние mIsMargin = margin; // обновить перед выходом if (nullptr != mNode) mNode->outOfDate(mRenderItem); return; } } // мы обрезаны или были обрезаны if (mIsMargin || margin) { mCurrentCoord.width = _getViewWidth(); mCurrentCoord.height = _getViewHeight(); if ((mCurrentCoord.width > 0) && (mCurrentCoord.height > 0)) { setupUV(); } } if (mIsMargin && !margin) { // мы не обрезаны, но были, ставим базовые координаты mCurrentTexture = mRectTexture; } // запоминаем текущее состояние mIsMargin = margin; if (nullptr != mNode) mNode->outOfDate(mRenderItem); }
void RotatingSkin::_updateView() { mEmptyView = ((0 >= _getViewWidth()) || (0 >= _getViewHeight())); mGeometryOutdated = true; if (nullptr != mNode) mNode->outOfDate(mRenderItem); }
void PolygonalSkin::_updateView() { bool margin = _checkMargin(); mEmptyView = ((0 >= _getViewWidth()) || (0 >= _getViewHeight())); mGeometryOutdated = true; mCurrentCoord.left = mCoord.left + mMargin.left; mCurrentCoord.top = mCoord.top + mMargin.top; // вьюпорт стал битым if (margin) { // проверка на полный выход за границу if (_checkOutside()) { // запоминаем текущее состояние mIsMargin = margin; // обновить перед выходом if (nullptr != mNode) mNode->outOfDate(mRenderItem); return; } } // мы обрезаны или были обрезаны if ((mIsMargin) || (margin)) { mCurrentCoord.width = _getViewWidth(); mCurrentCoord.height = _getViewHeight(); } // запоминаем текущее состояние mIsMargin = margin; if (nullptr != mNode) mNode->outOfDate(mRenderItem); }
void SubSkin::_updateView() { //mAbsolutePosition = mCroppedParent->getAbsolutePosition() + mCoord.point(); bool margin = _checkMargin(); mEmptyView = ((0 >= _getViewWidth()) || (0 >= _getViewHeight())); mCurrentCoord.left = mCoord.left + mMargin.left; mCurrentCoord.top = mCoord.top + mMargin.top; // вьюпорт стал битым if (margin) { // проверка на полный выход за границу if (_checkOutside()) { // запоминаем текущее состояние mIsMargin = margin; // обновить перед выходом if (nullptr != mNode) mNode->outOfDate(mRenderItem); return; } } // мы обрезаны или были обрезаны if (mIsMargin || margin) { mCurrentCoord.width = _getViewWidth(); mCurrentCoord.height = _getViewHeight(); if ((mCurrentCoord.width > 0) && (mCurrentCoord.height > 0)) { // теперь смещаем текстуру float UV_lft = mMargin.left / (float)mCoord.width; float UV_top = mMargin.top / (float)mCoord.height; float UV_rgt = (mCoord.width - mMargin.right) / (float)mCoord.width; float UV_btm = (mCoord.height - mMargin.bottom) / (float)mCoord.height; float UV_sizeX = mRectTexture.right - mRectTexture.left; float UV_sizeY = mRectTexture.bottom - mRectTexture.top; float UV_lft_total = mRectTexture.left + UV_lft * UV_sizeX; float UV_top_total = mRectTexture.top + UV_top * UV_sizeY; float UV_rgt_total = mRectTexture.right - (1 - UV_rgt) * UV_sizeX; float UV_btm_total = mRectTexture.bottom - (1 - UV_btm) * UV_sizeY; mCurrentTexture.set(UV_lft_total, UV_top_total, UV_rgt_total, UV_btm_total); } } if (mIsMargin && !margin) { // мы не обрезаны, но были, ставим базовые координаты mCurrentTexture = mRectTexture; } // запоминаем текущее состояние mIsMargin = margin; if (nullptr != mNode) mNode->outOfDate(mRenderItem); }