void GUICanvas::drawPolyLine(const Vector<Vector2I>& vertices, const Color& color) { if(vertices.size() < 2) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Line; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)vertices.size(); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; for (auto& vertex : vertices) { Vector2 point = Vector2((float)vertex.x, (float)vertex.y); point += Vector2(0.5f, 0.5f); // Offset to the middle of the pixel mVertexData.push_back(point); } mForceTriangleBuild = true; _markContentAsDirty(); }
void GUICanvas::drawTriangleList(const Vector<Vector2I>& vertices, const Color& color) { if (vertices.size() < 3 || vertices.size() % 3 != 0) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Triangle; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)vertices.size(); for (auto& vertex : vertices) mVertexData.push_back(Vector2((float)vertex.x, (float)vertex.y)); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; mForceTriangleBuild = true; _markContentAsDirty(); }
void GUIElementBase::_setDisabled(bool disabled) { bool isDisabled = (mFlags & GUIElem_Disabled) != 0; if (isDisabled == disabled) return; if (!disabled) { bool disabledSelf = (mFlags & GUIElem_DisabledSelf) != 0; if (!disabledSelf) { mFlags &= ~GUIElem_Disabled; for (auto& child : mChildren) child->_setDisabled(false); } } else { mFlags |= GUIElem_Disabled; for (auto& child : mChildren) child->_setDisabled(true); } if (_isVisible()) _markContentAsDirty(); }
void GUICanvas::drawPolyLine(const Vector<Vector2I>& vertices, const Color& color) { if(vertices.size() < 2) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Line; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)vertices.size(); // TODO - Add actual triangle line data here for (auto& vertex : vertices) mVertexData.push_back(Vector2((float)vertex.x, (float)vertex.y)); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; elemData.matInfo.type = SpriteMaterial::ImageAlpha; // TODO - Use line material here mForceTriangleBuild = true; _markContentAsDirty(); }
void GUICanvas::drawTriangleStrip(const Vector<Vector2I>& vertices, const Color& color) { if (vertices.size() < 3) { LOGWRN("Invalid number of vertices. Ignoring call."); return; } mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Triangle; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = (UINT32)(vertices.size() - 2) * 3; // Convert strip to list for(UINT32 i = 2; i < (UINT32)vertices.size(); i++) { mVertexData.push_back(Vector2((float)vertices[i - 2].x, (float)vertices[i - 2].y)); mVertexData.push_back(Vector2((float)vertices[i - 1].x, (float)vertices[i - 1].y)); mVertexData.push_back(Vector2((float)vertices[i - 0].x, (float)vertices[i - 0].y)); } mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; elemData.matInfo.type = SpriteMaterial::ImageAlpha; mForceTriangleBuild = true; _markContentAsDirty(); }
void GUIColor::setColor(const Color& color) { if (color != mValue) { mValue = color; _markContentAsDirty(); } }
void GUIButtonBase::_setState(GUIElementState state) { Vector2I origSize = mDimensions.calculateSizeRange(_getOptimalSize()).optimal; mActiveState = state; refreshContentSprite(); Vector2I newSize = mDimensions.calculateSizeRange(_getOptimalSize()).optimal; if (origSize != newSize) _markLayoutAsDirty(); else _markContentAsDirty(); }
void GUIButtonBase::setContent(const GUIContent& content) { Vector2I origSize = mDimensions.calculateSizeRange(_getOptimalSize()).optimal; mContent = content; refreshContentSprite(); Vector2I newSize = mDimensions.calculateSizeRange(_getOptimalSize()).optimal; if (origSize != newSize) _markLayoutAsDirty(); else _markContentAsDirty(); }
void GUICanvas::drawTexture(const HSpriteTexture& texture, const Rect2I& area, TextureScaleMode scaleMode, const Color& color) { mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Image; element.color = color; element.dataId = (UINT32)mImageData.size(); element.scaleMode = scaleMode; element.imageSprite = bs_new<ImageSprite>(); mImageData.push_back({ texture, area }); _markContentAsDirty(); }
void GUICanvas::drawText(const WString& text, const Vector2I& position, const HFont& font, UINT32 size, const Color& color) { mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Text; element.color = color; element.dataId = (UINT32)mTextData.size(); element.size = size; element.textSprite = bs_new<TextSprite>(); mTextData.push_back({ text, font, position }); _markContentAsDirty(); }
void GUIWindowFrame::setFocused(bool focused) { Vector2I origSize = mDimensions.calculateSizeRange(_getOptimalSize()).optimal; if(focused) mActiveTexture = _getStyle()->focused.texture; else mActiveTexture = _getStyle()->normal.texture; Vector2I newSize = mDimensions.calculateSizeRange(_getOptimalSize()).optimal; if (origSize != newSize) _markLayoutAsDirty(); else _markContentAsDirty(); }
void GUICanvas::drawLine(const Vector2I& a, const Vector2I& b, const Color& color) { mElements.push_back(CanvasElement()); CanvasElement& element = mElements.back(); element.type = CanvasElementType::Line; element.color = color; element.dataId = (UINT32)mTriangleElementData.size(); element.vertexStart = (UINT32)mVertexData.size(); element.numVertices = 2; // TODO - Add actual triangle line data here mVertexData.push_back(Vector2((float)a.x, (float)a.y)); mVertexData.push_back(Vector2((float)b.x, (float)b.y)); mTriangleElementData.push_back(TriangleElementData()); TriangleElementData& elemData = mTriangleElementData.back(); elemData.matInfo.groupId = 0; elemData.matInfo.tint = color; elemData.matInfo.type = SpriteMaterial::ImageAlpha; // TODO - Use line material here mForceTriangleBuild = true; _markContentAsDirty(); }
void GUIElement::setTint(const Color& color) { mColor = color; _markContentAsDirty(); }