예제 #1
0
        protected virtual void OnRenderCheck(UICheck control, CanvasRenderer renderer)
        {
            var borderColor = new ColorValue(0.5, 0.5, 0.5);
            var insideColor = new ColorValue(0, 0, 0);
            var checkColor  = new ColorValue(1, 1, 0);
            var textColor   = new ColorValue(1, 1, 1);

            switch (control.State)
            {
            //case UICheck.StateEnum.Hover:
            //	checkColor = new ColorValue( 1, 1, 1 );
            //	break;

            case UICheck.StateEnum.Pushed:
                checkColor = new ColorValue(1, 1, 1);
                break;

            case UICheck.StateEnum.Disabled:
                checkColor = new ColorValue(0.7, 0.7, 0.7);
                textColor  = new ColorValue(0.5, 0.5, 0.5);
                break;
            }

            var colorMultiplier = new ColorValue(1, 1, 1);

            //var colorMultiplier = control.GetTotalColorMultiplier();
            //if( colorMultiplier.Alpha > 0 )
            //{
            control.GetScreenRectangle(out var rect);

            renderer.AddQuad(rect, borderColor * colorMultiplier);
            renderer.AddQuad(Multiply(rect, new Rectangle(0.1, 0.1, 0.9, 0.9)), insideColor * colorMultiplier);

            //Checked image
            if (control.Checked.Value == UICheck.CheckValue.Checked)
            {
                var points = new Vector2[]
                {
                    new Vector2(290.04, 33.286),
                    new Vector2(118.861, 204.427),
                    new Vector2(52.32, 137.907),
                    new Vector2(0, 190.226),
                    new Vector2(118.861, 309.071),
                    new Vector2(342.357, 85.606),
                };
                var points2 = new Vector2[points.Length];
                for (int n = 0; n < points2.Length; n++)
                {
                    points2[n] = points[n] / new Vector2(342.357, 342.357);
                }

                var color2 = checkColor * colorMultiplier;

                var vertices = new CanvasRenderer.TriangleVertex[points2.Length];
                for (int n = 0; n < points2.Length; n++)
                {
                    vertices[n] = new CanvasRenderer.TriangleVertex(Multiply(rect, points2[n]).ToVector2F(), color2);
                }

                var indices = new int[] { 0, 1, 5, 5, 4, 1, 1, 2, 3, 3, 1, 4 };

                renderer.AddTriangles(vertices, indices);
            }

            //Indeterminate image
            if (control.Checked.Value == UICheck.CheckValue.Indeterminate)
            {
                renderer.AddQuad(Multiply(rect, new Rectangle(0.3, 0.3, 0.7, 0.7)), checkColor * colorMultiplier);
            }

            //!!!!странно рисует чуть ниже, чем посередине
            //text
            renderer.AddText(" " + control.Text, new Vector2(rect.Right, rect.GetCenter().Y), EHorizontalAlignment.Left, EVerticalAlignment.Center, textColor * colorMultiplier);
            //renderer.AddText( " " + control.Text, new Vector2( rect.Right, rect.Top ), EHorizontalAlignment.Left, EVerticalAlignment.Top, textColor * colorMultiplier );
            //}
        }