void Sprite::GetBatches(PODVector<UIBatch>& batches, PODVector<float>& vertexData, const IntRect& currentScissor) { bool allOpaque = true; if (GetDerivedOpacity() < 1.0f || color_[C_TOPLEFT].a_ < 1.0f || color_[C_TOPRIGHT].a_ < 1.0f || color_[C_BOTTOMLEFT].a_ < 1.0f || color_[C_BOTTOMRIGHT].a_ < 1.0f) allOpaque = false; const IntVector2& size = GetSize(); UIBatch batch(this, blendMode_ == BLEND_REPLACE && !allOpaque ? BLEND_ALPHA : blendMode_, currentScissor, texture_, &vertexData); batch.AddQuad(GetTransform(), 0, 0, size.x_, size.y_, imageRect_.left_, imageRect_.top_, imageRect_.right_ - imageRect_.left_, imageRect_.bottom_ - imageRect_.top_); UIBatch::AddOrMerge(batch, batches); // Reset hovering for next frame hovering_ = false; }
void BorderImage::GetBatches(PODVector<UIBatch>& batches, PODVector<UIQuad>& quads, const IntRect& currentScissor, const IntVector2& offset) { bool allOpaque = true; if (GetDerivedOpacity() < 1.0f || color_[C_TOPLEFT].a_ < 1.0f || color_[C_TOPRIGHT].a_ < 1.0f || color_[C_BOTTOMLEFT].a_ < 1.0f || color_[C_BOTTOMRIGHT].a_ < 1.0f) allOpaque = false; UIBatch batch(blendMode_ == BLEND_REPLACE && !allOpaque ? BLEND_ALPHA : static_cast<BlendMode>(blendMode_), currentScissor, texture_, &quads); // Calculate size of the inner rect, and texture dimensions of the inner rect const IntVector2& size = GetSize(); IntVector2 innerSize( Max(size.x_ - border_.left_ - border_.right_, 0), Max(size.y_ - border_.top_ - border_.bottom_, 0)); IntVector2 innerTextureSize( Max(imageRect_.right_ - imageRect_.left_ - border_.left_ - border_.right_, 0), Max(imageRect_.bottom_ - imageRect_.top_ - border_.top_ - border_.bottom_, 0)); IntVector2 topLeft(imageRect_.left_, imageRect_.top_); topLeft += offset; // Top if (border_.top_) { if (border_.left_) batch.AddQuad(*this, 0, 0, border_.left_, border_.top_, topLeft.x_, topLeft.y_); if (innerSize.x_) batch.AddQuad(*this, border_.left_, 0, innerSize.x_, border_.top_, topLeft.x_ + border_.left_, topLeft.y_, innerTextureSize.x_, border_.top_, tiled_); if (border_.right_) batch.AddQuad(*this, border_.left_ + innerSize.x_, 0, border_.right_, border_.top_, topLeft.x_ + border_.left_ + innerTextureSize.x_, topLeft.y_); } // Middle if (innerSize.y_) { if (border_.left_) batch.AddQuad(*this, 0, border_.top_, border_.left_, innerSize.y_, topLeft.x_, topLeft.y_ + border_.top_, border_.left_, innerTextureSize.y_, tiled_); if (innerSize.x_) batch.AddQuad(*this, border_.left_, border_.top_, innerSize.x_, innerSize.y_, topLeft.x_ + border_.left_, topLeft.y_ + border_.top_, innerTextureSize.x_, innerTextureSize.y_, tiled_); if (border_.right_) batch.AddQuad(*this, border_.left_ + innerSize.x_, border_.top_, border_.right_, innerSize.y_, topLeft.x_ + border_.left_ + innerTextureSize.x_, topLeft.y_ + border_.top_, border_.right_, innerTextureSize.y_, tiled_); } // Bottom if (border_.bottom_) { if (border_.left_) batch.AddQuad(*this, 0, border_.top_ + innerSize.y_, border_.left_, border_.bottom_, topLeft.x_, topLeft.y_ + border_.top_ + innerTextureSize.y_); if (innerSize.x_) batch.AddQuad(*this, border_.left_, border_.top_ + innerSize.y_, innerSize.x_, border_.bottom_, topLeft.x_ + border_.left_, topLeft.y_ + border_.top_ + innerTextureSize.y_, innerTextureSize.x_, border_.bottom_, tiled_); if (border_.right_) batch.AddQuad(*this, border_.left_ + innerSize.x_, border_.top_ + innerSize.y_, border_.right_, border_.bottom_, topLeft.x_ + border_.left_ + innerTextureSize.x_, topLeft.y_ + border_.top_ + innerTextureSize.y_); } UIBatch::AddOrMerge(batch, batches); // Reset hovering for next frame hovering_ = false; }
void BorderImage::GetBatches(PODVector<UIBatch>& batches, PODVector<float>& vertexData, const IntRect& currentScissor, const IntVector2& offset) { bool allOpaque = true; if (GetDerivedOpacity() < 1.0f || color_[C_TOPLEFT].a_ < 1.0f || color_[C_TOPRIGHT].a_ < 1.0f || color_[C_BOTTOMLEFT].a_ < 1.0f || color_[C_BOTTOMRIGHT].a_ < 1.0f) allOpaque = false; UIBatch batch(this, blendMode_ == BLEND_REPLACE && !allOpaque ? BLEND_ALPHA : blendMode_, currentScissor, texture_, &vertexData); // Calculate size of the inner rect, and texture dimensions of the inner rect const IntRect& uvBorder = (imageBorder_ == IntRect::ZERO) ? border_ : imageBorder_; int x = GetIndentWidth(); IntVector2 size = GetSize(); size.x_ -= x; IntVector2 innerSize( Max(size.x_ - border_.left_ - border_.right_, 0), Max(size.y_ - border_.top_ - border_.bottom_, 0)); IntVector2 innerUvSize( Max(imageRect_.right_ - imageRect_.left_ - uvBorder.left_ - uvBorder.right_, 0), Max(imageRect_.bottom_ - imageRect_.top_ - uvBorder.top_ - uvBorder.bottom_, 0)); IntVector2 uvTopLeft(imageRect_.left_, imageRect_.top_); uvTopLeft += offset; // Top if (border_.top_) { if (border_.left_) batch.AddQuad(x, 0, border_.left_, border_.top_, uvTopLeft.x_, uvTopLeft.y_, uvBorder.left_, uvBorder.top_); if (innerSize.x_) batch.AddQuad(x + border_.left_, 0, innerSize.x_, border_.top_, uvTopLeft.x_ + uvBorder.left_, uvTopLeft.y_, innerUvSize.x_, uvBorder.top_, tiled_); if (border_.right_) batch.AddQuad(x + border_.left_ + innerSize.x_, 0, border_.right_, border_.top_, uvTopLeft.x_ + uvBorder.left_ + innerUvSize.x_, uvTopLeft.y_, uvBorder.right_, uvBorder.top_); } // Middle if (innerSize.y_) { if (border_.left_) batch.AddQuad(x, border_.top_, border_.left_, innerSize.y_, uvTopLeft.x_, uvTopLeft.y_ + uvBorder.top_, uvBorder.left_, innerUvSize.y_, tiled_); if (innerSize.x_) batch.AddQuad(x + border_.left_, border_.top_, innerSize.x_, innerSize.y_, uvTopLeft.x_ + uvBorder.left_, uvTopLeft.y_ + uvBorder.top_, innerUvSize.x_, innerUvSize.y_, tiled_); if (border_.right_) batch.AddQuad(x + border_.left_ + innerSize.x_, border_.top_, border_.right_, innerSize.y_, uvTopLeft.x_ + uvBorder.left_ + innerUvSize.x_, uvTopLeft.y_ + uvBorder.top_, uvBorder.right_, innerUvSize.y_, tiled_); } // Bottom if (border_.bottom_) { if (border_.left_) batch.AddQuad(x, border_.top_ + innerSize.y_, border_.left_, border_.bottom_, uvTopLeft.x_, uvTopLeft.y_ + uvBorder.top_ + innerUvSize.y_, uvBorder.left_, uvBorder.bottom_); if (innerSize.x_) batch.AddQuad(x + border_.left_, border_.top_ + innerSize.y_, innerSize.x_, border_.bottom_, uvTopLeft.x_ + uvBorder.left_, uvTopLeft.y_ + uvBorder.top_ + innerUvSize.y_, innerUvSize.x_, uvBorder.bottom_, tiled_); if (border_.right_) batch.AddQuad(x + border_.left_ + innerSize.x_, border_.top_ + innerSize.y_, border_.right_, border_.bottom_, uvTopLeft.x_ + uvBorder.left_ + innerUvSize.x_, uvTopLeft.y_ + uvBorder.top_ + innerUvSize.y_, uvBorder.right_, uvBorder.bottom_); } UIBatch::AddOrMerge(batch, batches); // Reset hovering for next frame hovering_ = false; }