// render void CWindowControl_Check::render(void) { CGDIPlusUtility::drawRectangleFill(getPosition(), getSize(), getFillColour()); CGDIPlusUtility::drawRectangleBorder(getPosition(), getSize(), getLineColour()); if(isChecked()) { CGDIPlusUtility::drawLine(CVector2ui32(getPosition().m_x, getPosition().m_y + getSize().m_y), CVector2ui32(getPosition().m_x + getSize().m_x, getPosition().m_y), getLineColour()); } CGDIPlusUtility::drawText(CVector2ui32(getPosition().m_x + getSize().m_x + getIconRightMargin(), getPosition().m_y), getSize(), getText(), getTextColour(), getFontSize(), isBold()); }
//=========================================== // TextEntity::updateModel //=========================================== void TextEntity::updateModel() const { float32_t x = getTranslation_abs().x; float32_t y = getTranslation_abs().y; float32_t z = getZ(); float32_t texSectionX1 = m_font->getTextureSection().getPosition().x; float32_t texSectionY1 = m_font->getTextureSection().getPosition().y; float32_t texSectionX2 = texSectionX1 + m_font->getTextureSection().getSize().x; float32_t texSectionY2 = texSectionY1 + m_font->getTextureSection().getSize().y; float32_t texW = static_cast<float32_t>(m_font->getTexture()->getWidth()); float32_t texH = static_cast<float32_t>(m_font->getTexture()->getHeight()); float32_t pxChW = static_cast<float32_t>(m_font->getCharWidth()); // Char dimensions in pixels float32_t pxChH = static_cast<float32_t>(m_font->getCharHeight()); int rowLen = static_cast<int>(static_cast<float32_t>(texSectionX2 - texSectionX1) / static_cast<float32_t>(pxChW)); StackAllocator::marker_t marker = gGetMemStack().getMarker(); vvvtt_t* verts = reinterpret_cast<vvvtt_t*>(gGetMemStack().alloc(m_text.size() * 6 * sizeof(vvvtt_t))); int v = 0; for (uint_t i = 0; i < m_text.length(); ++i) { // Character world coords (pre-transformation) float32_t chX = x + static_cast<float32_t>(i) * m_size.x; float32_t chY = y; float32_t srcX = texSectionX1 + pxChW * static_cast<float32_t>((m_text[i] - ' ') % rowLen); float32_t srcY = texSectionY2 - pxChH * static_cast<float32_t>((m_text[i] - ' ') / rowLen + 1); float32_t tY1 = srcY / texH; float32_t tY2 = (srcY + pxChH) / texH; tY1 = 1.f - tY1; tY2 = 1.f - tY2; verts[v] = vvvtt_t(chX + m_size.x, chY, z, (srcX + pxChW) / texW, tY1); ++v; verts[v] = vvvtt_t(chX + m_size.x, chY + m_size.y, z, (srcX + pxChW) / texW, tY2); ++v; verts[v] = vvvtt_t(chX, chY, z, srcX / texW, tY1); ++v; verts[v] = vvvtt_t(chX + m_size.x, chY + m_size.y, z, (srcX + pxChW) / texW, tY2); ++v; verts[v] = vvvtt_t(chX, chY + m_size.y, z, srcX / texW, tY2); ++v; verts[v] = vvvtt_t(chX, chY, z, srcX / texW, tY1); ++v; } m_model.eraseVertices(); m_model.setVertices(0, verts, 6 * m_text.size()); m_model.setColour(getFillColour()); m_model.setLineWidth(0); m_model.setTextureHandle(m_font->getTexture()->getHandle()); m_renderer.bufferModel(&m_model); gGetMemStack().freeToMarker(marker); }
// render void CWindowControl_Radio::render(void) { float32 fRadius = getSize().m_x / 2; CVector2ui32 vecCircleCenterPosition = getPosition() + ((uint32) fRadius); // todo - use CVector2ui32 vecCircleCenterPosition = CMathUtility::getCircleFromRectangle() if (isChecked()) { CGDIPlusUtility::drawCircleFill(vecCircleCenterPosition, fRadius, 0x0000FFFF); } else { CGDIPlusUtility::drawCircleFill(vecCircleCenterPosition, fRadius, getFillColour()); } CGDIPlusUtility::drawCircleBorder(vecCircleCenterPosition, fRadius, getLineColour()); CGDIPlusUtility::drawText(CVector2ui32(getPosition().m_x + getSize().m_x + getIconRightMargin(), getPosition().m_y), CVector2ui32(getPosition().m_x + getSize().m_x + getIconRightMargin() + 500, getSize().m_y), getText(), getTextColour(), getFontSize(), isBold()); }
//=========================================== // TextEntity::setFillColour //=========================================== void TextEntity::setFillColour(const Colour& colour) { Entity::setFillColour(colour); m_model.setColour(getFillColour()); }