private void RenderTextNode(TextNode textNode, GwenRenderContext grc) { if (string.IsNullOrEmpty(textNode.Text)) { return; } // 当需要的时候,先更新 TextNode 的尺寸 Point textSize = grc.Renderer.MeasureText(grc.Font, textNode.Text); if (textNode.RequestedSizeRefreshing) { textNode.Size = new Size( Math.Max(textNode.Size.Width, textSize.X), Math.Max(textNode.Size.Height, textSize.Y)); NodeSGUtil.ClampBounds(textNode); textNode.RequestedSizeRefreshing = false; } Point loc = grc.GetAccumulatedDockedScrolledTranslate(); // 理论上这里我们不应当每帧对每段 Text 都调用 MeasureText() // 不过考察 Gwen.Renderer.Tao.MeasureText() 后我们发现 // 其内部已经 Cache 了一份,把尺寸再缓存一份意义不大 Point internalOffset = TextNodeUtil.CalculateInternalTextOffset(textNode, textSize); loc.Offset(internalOffset); Color c = grc.Renderer.DrawColor; grc.Renderer.DrawColor = textNode.TextColor; grc.Renderer.RenderText(grc.Font, loc, textNode.Text); grc.Renderer.DrawColor = c; }
private void RenderCheckBox(CheckBox cb, GwenRenderContext grc) { Rectangle rect = new Rectangle(grc.GetAccumulatedDockedScrolledTranslate(), cb.MarkSize); DrawImage(grc, rect, cb.Res_Background); DrawImage(grc, rect, cb.Res_Mark); }
private void RenderGrid(Grid g, GwenRenderContext grc) { Rectangle rect = new Rectangle(grc.GetAccumulatedDockedTranslate(), g.Size); grc.Renderer.DrawLinedRect(rect); Point loc = grc.GetAccumulatedDockedScrolledTranslate(); for (int i = 0; i < g.RowCount; i++) { for (int k = 0; k < g.ColumnCount; k++) { Rectangle cellRect = new Rectangle(); cellRect.X = loc.X + i * (g.CellSize.Width + g.CellPadding.Width); cellRect.Y = loc.Y + k * (g.CellSize.Height + g.CellPadding.Height); cellRect.Width = g.CellSize.Width; cellRect.Height = g.CellSize.Height; grc.Renderer.DrawLinedRect(cellRect); } } }
private void RenderImageNode(ImageNode imageNode, GwenRenderContext grc) { DrawImage(grc, new Rectangle(grc.GetAccumulatedDockedScrolledTranslate(), imageNode.Size), imageNode.Res); }
private void RenderProgressBar(ProgressBar pb, GwenRenderContext grc) { Rectangle rect = new Rectangle(grc.GetAccumulatedDockedScrolledTranslate(), pb.Size); DrawImage(grc, rect, pb.Res_Progress); }
private void RenderButton(Button bt, GwenRenderContext grc) { DrawImage(grc, new Rectangle(grc.GetAccumulatedDockedScrolledTranslate(), bt.Size), bt.Res_Current); }