void Window::GetBatches(PODVector<UIBatch>& batches, PODVector<float>& vertexData, const IntRect& currentScissor) { if (modal_) { // Modal shade if (modalShadeColor_ != Color::TRANSPARENT) { UIElement* rootElement = GetRoot(); const IntVector2& rootSize = rootElement->GetSize(); UIBatch batch(rootElement, BLEND_ALPHA, IntRect(0, 0, rootSize.x_, rootSize.y_), 0, &vertexData); batch.AddQuad(0, 0, rootSize.x_, rootSize.y_, 0, 0, 0, 0, modalShadeColor_); UIBatch::AddOrMerge(batch, batches); } // Modal frame if (modalFrameColor_ != Color::TRANSPARENT && modalFrameSize_ != IntVector2::ZERO) { UIBatch batch(this, BLEND_ALPHA, currentScissor, 0, &vertexData); int x = GetIndentWidth(); IntVector2 size = GetSize(); size.x_ -= x; batch.AddQuad(x - modalFrameSize_.x_, -modalFrameSize_.y_, size.x_ + 2 * modalFrameSize_.x_, size.y_ + 2 * modalFrameSize_.y_, 0, 0, 0, 0, modalFrameColor_); UIBatch::AddOrMerge(batch, batches); } } BorderImage::GetBatches(batches, vertexData, currentScissor); }
int Text::GetRowStartPosition(unsigned rowIndex) const { float rowWidth = 0; if (rowIndex < rowWidths_.size()) rowWidth = rowWidths_[rowIndex]; int ret = GetIndentWidth(); switch (textAlignment_) { case HA_LEFT: break; case HA_CENTER: ret += (GetSize().x_ - rowWidth) / 2; break; case HA_RIGHT: ret += GetSize().x_ - rowWidth; break; } return ret; }
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; }