void RenderDetail::addRect(const Rect& pos, const Rect& tex, const Color* c1, const Color* c2, const Color* c3, const Color* c4) { Vertex rect[4]; Color colors[4]; if(!c1) colors[0].a = 0; if(!c2) colors[1].a = 0; if(!c3) colors[2].a = 0; if(!c4) colors[3].a = 0; vertexRect(rect, &pos, c1 ? c1 : &colors[0], c2 ? c2 : &colors[1], c3 ? c3 : &colors[2], c4 ? c4 : &colors[3], &tex); int tl = addVertex(rect[0]); int tr = addVertex(rect[1]); int bl = addVertex(rect[2]); int br = addVertex(rect[3]); addElement(tl); addElement(tr); addElement(bl); addElement(tr); addElement(bl); addElement(br); }
void EditText::drawGlyph( const RenderTargetInfo& _renderTargetInfo, Vertex*& _vertex, size_t& _vertexCount, FloatRect _vertexRect, FloatRect _textureRect, uint32 _colour) const { // символ залазиет влево float leftClip = (float)mCurrentCoord.left - _vertexRect.left; if (leftClip > 0.0f) { if ((float)mCurrentCoord.left < _vertexRect.right) { _textureRect.left += _textureRect.width() * leftClip / _vertexRect.width(); _vertexRect.left += leftClip; } else { return; } } // символ залазиет вправо float rightClip = _vertexRect.right - (float)mCurrentCoord.right(); if (rightClip > 0.0f) { if (_vertexRect.left < (float)mCurrentCoord.right()) { _textureRect.right -= _textureRect.width() * rightClip / _vertexRect.width(); _vertexRect.right -= rightClip; } else { return; } } // символ залазиет вверх float topClip = (float)mCurrentCoord.top - _vertexRect.top; if (topClip > 0.0f) { if ((float)mCurrentCoord.top < _vertexRect.bottom) { _textureRect.top += _textureRect.height() * topClip / _vertexRect.height(); _vertexRect.top += topClip; } else { return; } } // символ залазиет вниз float bottomClip = _vertexRect.bottom - (float)mCurrentCoord.bottom(); if (bottomClip > 0.0f) { if (_vertexRect.top < (float)mCurrentCoord.bottom()) { _textureRect.bottom -= _textureRect.height() * bottomClip / _vertexRect.height(); _vertexRect.bottom -= bottomClip; } else { return; } } float pix_left = mCroppedParent->getAbsoluteLeft() - _renderTargetInfo.leftOffset + _vertexRect.left; float pix_top = mCroppedParent->getAbsoluteTop() - _renderTargetInfo.topOffset + (mShiftText ? 1.0f : 0.0f) + _vertexRect.top; FloatRect vertexRect( ((_renderTargetInfo.pixScaleX * pix_left + _renderTargetInfo.hOffset) * 2.0f) - 1.0f, -(((_renderTargetInfo.pixScaleY * pix_top + _renderTargetInfo.vOffset) * 2.0f) - 1.0f), ((_renderTargetInfo.pixScaleX * (pix_left + _vertexRect.width()) + _renderTargetInfo.hOffset) * 2.0f) - 1.0f, -(((_renderTargetInfo.pixScaleY * (pix_top + _vertexRect.height()) + _renderTargetInfo.vOffset) * 2.0f) - 1.0f)); drawQuad(_vertex, _vertexCount, vertexRect, mNode->getNodeDepth(), _textureRect, _colour); }