예제 #1
0
        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;
        }
예제 #2
0
        public bool IsSelectionDraggable()
        {
            foreach (var n in m_selection)
            {
                if (n.Locked)
                {
                    return(false);
                }

                if (n is RootNode)
                {
                    RootNode r = n as RootNode;
                    if (r != null && r.IsFullscren)
                    {
                        return(false);
                    }
                }
                else if (NodeSGUtil.HasLockedLayoutParent(n))
                {
                    return(false);
                }
            }

            return(true);
        }