/// <summary> /// Draws label /// </summary> /// <param name="position">Top-left position</param> /// <param name="offset"></param> /// <param name="drawSizeMax"></param> /// <returns></returns> public bool Draw(Vector2 position, float offset, Vector2 drawSizeMax) { float skippedSizeY = 0f; int currentLineIndex = 0; int linesPrinted = 0; while (offset > skippedSizeY) { float lineSizeY = m_lines[currentLineIndex].GetSize().Y; //if(skippedSizeY + lineSizeY > offset) //{ // break; //} skippedSizeY += lineSizeY; currentLineIndex++; } //// End our standard sprite batch //MyGuiManager.EndSpriteBatch(); //// Draw the rectangle(basically the opened area) to stencil buffer to be used for clipping partial item //MyGuiManager.DrawStencilMaskRectangle(new MyRectangle2D(position, drawSizeMax), MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_TOP); //// Set up the stencil operation and parameters //MyGuiManager.BeginSpriteBatch_StencilMask(); Vector2 drawPosition = Vector2.Zero; while (currentLineIndex <= m_linesCount) { MyRichLabelLine currentLine = m_lines[currentLineIndex]; if (drawPosition.Y + currentLine.GetSize().Y > drawSizeMax.Y && linesPrinted >= 1) { break; } currentLine.Draw(position + drawPosition); drawPosition.Y += currentLine.GetSize().Y; currentLineIndex++; linesPrinted++; } //// End stencil-mask batch, and restart the standard sprite batch //MyGuiManager.EndSpriteBatch(); //MyGuiManager.BeginSpriteBatch(); return(true); }
private void AppendPart(MyRichLabelPart part) { m_currentLine = m_lines[m_linesCount]; m_currentLine.AddPart(part); m_currentLineRestFreeSpace = m_maxLineWidth - m_currentLine.GetSize().X; }