public LinearSegment(Vector2 p0, Vector2 p1, EdgeColor edgeColor = EdgeColor.WHITE)
     : base(edgeColor)
 {
     p    = new Vector2[2];
     p[0] = p0;
     p[1] = p1;
 }
示例#2
0
        public override void AddItem(string result)
        {
            if (!EditMode && bool.Parse(result))
            {
                if (!String.IsNullOrEmpty(GameLocation))
                {
                    ContextMenuMap.Add(new ContextMenuItem("Open Directory", Path.GetDirectoryName(GameLocation)));
                }

                var game = new VideoGame(Title, Path.GetFileName(ImageLocation), EdgeColor.ToString(), MiddleColor.ToString(), HighlightColor.ToString(), GameLocation, TargetParameters, true);

                game.ContextMenuMap = this.ContextMenuMap;

                OnItemAdded?.Invoke(this, new DialogRoutedEventArgs()
                {
                    Object = game
                });
            }
            else
            {
                OnItemAdded?.Invoke(this, new DialogRoutedEventArgs()
                {
                    Object = null
                });
            }
        }
示例#3
0
 public CubicSegment(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, EdgeColor color) : base(color)
 {
     this.p0 = p0;
     this.p1 = p1;
     this.p2 = p2;
     this.p3 = p3;
 }
示例#4
0
 public CubicSegment(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, EdgeColor edgeColor = EdgeColor.WHITE)
     : base(edgeColor)
 {
     _p0 = p0;
     _p1 = p1;
     _p2 = p2;
     _p3 = p3;
 }
示例#5
0
    public override void OnInspectorGUI()
    {
        m_object.Update();
        DrawDefaultInspector();

        EdgeColor _2dxScript = (EdgeColor)target;

        //Texture2D icon = Resources.Load("2dxfxinspector") as Texture2D;
        //if (icon)
        //{
        //    Rect r;
        //    float ih = icon.height;
        //    float iw = icon.width;
        //    float result = ih / iw;
        //    float w = Screen.width;
        //    result = result * w;
        //    r = GUILayoutUtility.GetRect(ih, result);
        //    EditorGUI.DrawTextureTransparent(r, icon);
        //}

        EditorGUILayout.PropertyField(m_object.FindProperty("ActiveUpdate"), new GUIContent("Active Update", "Active Update, for animation / Animator only")); EditorGUILayout.PropertyField(m_object.FindProperty("ForceMaterial"), new GUIContent("Shared Material", "Use a unique material, reduce drastically the use of draw call"));

        if (_2dxScript.ForceMaterial == null)
        {
            _2dxScript.ActiveChange = true;
        }
        else
        {
            if (GUILayout.Button("Remove Shared Material"))
            {
                _2dxScript.ForceMaterial = null;
                _2dxScript.ShaderChange  = 1;
                _2dxScript.ActiveChange  = true;
                _2dxScript.CallUpdate();
            }

            EditorGUILayout.PropertyField(m_object.FindProperty("ActiveChange"), new GUIContent("Change Material Property", "Change The Material Property"));
        }

        if (_2dxScript.ActiveChange)
        {
            EditorGUILayout.BeginVertical("Box");

            Texture2D icone = Resources.Load("2dxfx-icon-color") as Texture2D;
            EditorGUILayout.PropertyField(m_object.FindProperty("_Color"), new GUIContent("Edge Color", icone, "Change the Edge Color"));


            EditorGUILayout.BeginVertical("Box");

            icone = Resources.Load("2dxfx-icon-fade") as Texture2D;
            EditorGUILayout.PropertyField(m_object.FindProperty("_Alpha"), new GUIContent("Fading", icone, "Fade from nothing to showing"));

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndVertical();
        }

        m_object.ApplyModifiedProperties();
    }
示例#6
0
 /// <summary>
 /// ハッシュ値を計算します。
 /// </summary>
 public override int GetHashCode()
 {
     return(
         Font.GetHashCode() ^
         Color.GetHashCode() ^
         EdgeColor.GetHashCode() ^
         EdgeLength.GetHashCode() ^
         IsStretchSize.GetHashCode());
 }
示例#7
0
 public QuadraticSegment(EdgeColor edgeColor, params Vector2[] p) :
     base(edgeColor)
 {
     if (p[1] == p[0] || p[1] == p[2])
     {
         p[1] = 0.5 * (p[0] + p[2]);
     }
     _p = p;
 }
 public CubicSegment(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3, EdgeColor edgeColor = EdgeColor.WHITE)
     : base(edgeColor)
 {
     p    = new Vector2[4];
     p[0] = p0;
     p[1] = p1;
     p[2] = p2;
     p[3] = p3;
 }
        public JsonValue ToJson(JsonSerializer serializer)
        {
            var obj = new JsonObject();

            Name.Serialize(obj, serializer, "name");
            EdgeColor.Serialize(obj, serializer, "edgeColor");
            Pos.Serialize(obj, serializer, "pos");
            return(obj);
        }
示例#10
0
        protected override IEnumerator ProcessPayload(VisualPayload payload)
        {
            payload.VisualData.Bound.name = "Line Graph Bound";

            var lineGraph = VisualizerFactory.InstantiateLineGraph();

            lineGraph.Initialize(this, payload);

            AssignStates(lineGraph);

            var entries = EntryField.GetLastKeyValue(payload.Data) as IEnumerable <MutableObject>;

            if (entries == null)
            {
                throw new Exception("Illegal mutable field here!  " + EntryField.AbsoluteKey + " is not an enumerable of mutables!");
            }

            if (!entries.Any())
            {
                yield return(null);

                yield break;
            }

            foreach (var entry in entries)
            {
                Vector3 entryPosition =
                    new Vector3(
                        XAxis.GetLastKeyValue(entry),
                        YAxis.GetLastKeyValue(entry),
                        ZAxis.GetLastKeyValue(entry)
                        );

                Color pointColor = PointColor.GetLastKeyValue(entry);

                lineGraph.AddPoint(entryPosition, pointColor);

                yield return(null);
            }

            yield return(null);

            lineGraph.SetLineData(MainColor.GetLastKeyValue(payload.Data),
                                  LineWidth.GetLastKeyValue(payload.Data),
                                  ZDepthOffset.GetLastKeyValue(payload.Data),
                                  EdgeColor.GetLastKeyValue(payload.Data),
                                  EdgeWidth.GetLastKeyValue(payload.Data),
                                  PointWidth.GetLastKeyValue(payload.Data),
                                  PulseLine.GetLastKeyValue(payload.Data),
                                  PulseWidth.GetLastKeyValue(payload.Data),
                                  Wipe.GetLastKeyValue(payload.Data),
                                  StartTime.GetLastKeyValue(payload.Data),
                                  WipeDuration.GetLastKeyValue(payload.Data)
                                  );

            lineGraph.ApplyPoints();
        }
示例#11
0
 /// <summary>
 /// ハッシュ値を計算します。
 /// </summary>
 public override int GetHashCode()
 {
     return(
         FontFamilyName.GetHashCode() ^
         FontStyle.GetHashCode() ^
         Size.GetHashCode() ^
         Color.GetHashCode() ^
         EdgeColor.GetHashCode() ^
         EdgeLength.GetHashCode() ^
         IsStretchSize.GetHashCode());
 }
示例#12
0
 public QuadraticSegment(Vector2 p0, Vector2 p1, Vector2 p2, EdgeColor edgeColor = EdgeColor.WHITE)
     : base(edgeColor)
 {
     if (Vector2.IsEq(p1, p0) || Vector2.IsEq(p1, p2))
     {
         p1 = 0.5 * (p0 + p2);
     }
     _p0 = p0;
     _p1 = p1;
     _p2 = p2;
 }
 public QuadraticSegment(Vector2 p0, Vector2 p1, Vector2 p2, EdgeColor edgeColor = EdgeColor.WHITE)
     : base(edgeColor)
 {
     p = new Vector2[3];
     if (Vector2.IsEq(p1, p0) || Vector2.IsEq(p1, p2))
     {
         p1 = 0.5 * (p0 + p2);
     }
     p[0] = p0;
     p[1] = p1;
     p[2] = p2;
 }
        static void SwitchColor(ref EdgeColor color, ref ulong seed, EdgeColor banned)
        {
            EdgeColor combined = color & banned;

            if (combined == EdgeColor.Red || combined == EdgeColor.Green || combined == EdgeColor.Blue)
            {
                color = combined ^ EdgeColor.White;
                return;
            }

            if (color == EdgeColor.Black || color == EdgeColor.White)
            {
                color = switchColors[seed % 3];
                seed /= 3;
                return;
            }

            int shifted = (int)color << (int)(1 + (seed & 1));

            color  = (EdgeColor)((shifted | shifted >> 3) & (int)EdgeColor.White);
            seed >>= 1;
        }
示例#15
0
        private static unsafe void SwitchColor(ref EdgeColor color, ref ulong seed, EdgeColor banned = EdgeColor.Black)
        {
            var combined = color & banned;

            if (combined == EdgeColor.Red || combined == EdgeColor.Green || combined == EdgeColor.Blue)
            {
                color = combined ^ EdgeColor.White;
                return;
            }

            if (color == EdgeColor.Black || color == EdgeColor.White)
            {
                var start = stackalloc[] { EdgeColor.Cyan, EdgeColor.Magenta, EdgeColor.Yellow };
                color = start[seed % 3];
                seed /= 3;
                return;
            }

            var shifted = (int)color << (int)(1 + (seed & 1));

            color  = (EdgeColor)((shifted | (shifted >> 3)) & (int)EdgeColor.White);
            seed >>= 1;
        }
示例#16
0
        static void switchColor(ref EdgeColor color, ref ulong seed, EdgeColor banned = EdgeColor.BLACK)
        {
            EdgeColor combined = color & banned;

            if (combined == EdgeColor.RED || combined == EdgeColor.GREEN || combined == EdgeColor.BLUE)
            {
                color = combined ^ EdgeColor.WHITE;
                return;
            }
            if (color == EdgeColor.BLACK || color == EdgeColor.WHITE)
            {
                //original code use array
                //EdgeColor[] start = new EdgeColor[] { EdgeColor.CYAN, EdgeColor.MAGENTA, EdgeColor.YELLOW };
                //color = start[seed % 3];

                //I don't want to alloc new array=>  I use switch
                switch (seed % 3)
                {
                default: throw new NotSupportedException();

                case 0: color = EdgeColor.CYAN; break;

                case 1: color = EdgeColor.MAGENTA; break;

                case 2: color = EdgeColor.YELLOW; break;
                }

                seed /= 3;
                return;
            }

            int shifted = (int)color << (1 + ((int)seed & 1));

            color  = (EdgeColor)((shifted | shifted >> 3) & (int)EdgeColor.WHITE);
            seed >>= 1;
        }
示例#17
0
 protected EdgeSegment(EdgeColor edgeColor = EdgeColor.White)
 {
     Color = edgeColor;
 }
示例#18
0
 /// <inheritdoc/>
 public override int GetHashCode()
 {
     return(CenterColor.GetHashCode() ^ (EdgeColor.GetHashCode() << 1) ^ ((Style.GetHashCode() + 1) << 2));
 }
        public static void EdgeColoringSimple(Shape shape, double angleThreshold, ulong seed)
        {
            double     crossThreshold = Math.Sin(angleThreshold);
            List <int> corners        = new List <int>();

            for (int i = 0; i < shape.Contours.Count; i++)
            {
                Contour contour = shape.Contours[i];
                corners.Clear();

                if (!(contour.Edges.Count == 0))
                {
                    Vector2 prevDirection = contour.Edges[contour.Edges.Count - 1].GetDirection(1);

                    for (int j = 0; j < contour.Edges.Count; j++)
                    {
                        EdgeSegment edge = contour.Edges[j];
                        if (IsCorner(Vector2.Normalize(prevDirection), Vector2.Normalize(edge.GetDirection(0)), crossThreshold))
                        {
                            corners.Add(j);
                        }
                        prevDirection = edge.GetDirection(1);
                    }
                }

                if (corners.Count == 0)
                {
                    for (int j = 0; j < contour.Edges.Count; j++)
                    {
                        contour.Edges[j].Color = EdgeColor.White;
                    }
                }
                else if (corners.Count == 1)
                {
                    EdgeColor[] colors = { EdgeColor.White, EdgeColor.White, EdgeColor.Black };
                    SwitchColor(ref colors[0], ref seed, EdgeColor.Black);
                    SwitchColor(ref colors[2], ref seed, EdgeColor.Black);

                    int corner = corners[0];

                    if (contour.Edges.Count >= 3)
                    {
                        int m = contour.Edges.Count;
                        for (int j = 0; j < m; j++)
                        {
                            int magic = (int)(3 + 2.875f * j / (m - 1) - 1.4375f + 0.5f) - 3;   //see edge-coloring.cpp in the original msdfgen
                            contour.Edges[(corner + j) % m].Color = colors[1 + magic];
                        }
                    }
                    else if (contour.Edges.Count >= 1)
                    {
                        EdgeSegment[] parts = new EdgeSegment[7];
                        contour.Edges[0].SplitInThirds(out parts[0 + 3 * corner], out parts[1 + 3 * corner], out parts[2 + 3 * corner]);
                        if (contour.Edges.Count >= 2)
                        {
                            contour.Edges[1].SplitInThirds(out parts[3 - 3 * corner], out parts[4 - 3 * corner], out parts[5 - 3 * corner]);
                            parts[0].Color = colors[0];
                            parts[1].Color = colors[0];
                            parts[2].Color = colors[1];
                            parts[3].Color = colors[1];
                            parts[4].Color = colors[2];
                            parts[5].Color = colors[2];
                        }
                        else
                        {
                            parts[0].Color = colors[0];
                            parts[1].Color = colors[1];
                            parts[2].Color = colors[2];
                        }
                        contour.Edges.Clear();
                        for (int j = 0; parts[j] != null; j++)
                        {
                            contour.Edges.Add(parts[j]);
                        }
                    }
                }
                else
                {
                    int       cornerCount = corners.Count;
                    int       spline      = 0;
                    int       start       = corners[0];
                    int       m           = contour.Edges.Count;
                    EdgeColor color       = EdgeColor.White;
                    SwitchColor(ref color, ref seed, EdgeColor.Black);
                    EdgeColor initialColor = color;
                    for (int j = 0; j < m; j++)
                    {
                        int index = (start + j) % m;
                        if (spline + 1 < cornerCount && corners[spline + 1] == index)
                        {
                            spline++;
                            SwitchColor(ref color, ref seed, (EdgeColor)(((spline == cornerCount - 1) ? 1 : 0) * (int)initialColor));
                        }
                        contour.Edges[index].Color = color;
                    }
                }
            }
        }
示例#20
0
 public bool HasComponent(EdgeColor c) => (color & c) != 0;
示例#21
0
 public void AcceptAttributeEdgeColor(EdgeColor edgeColor, PrintContext parameter)
 {
     parameter.WriteLine("Edge Color: {0}", edgeColor.Color);
 }
示例#22
0
 public QuadraticSegment(Vector2 p0, Vector2 p1, Vector2 p2, EdgeColor color) : base(color)
 {
     this.p0 = p0;
     this.p1 = p1;
     this.p2 = p2;
 }
示例#23
0
        public static void edgeColoringSimple(Shape shape, double angleThreshold, ulong seed = 0)
        {
            double     crossThreshold = Math.Sin(angleThreshold);
            List <int> corners        = new List <int>(); //TODO: review reusable list

            // for (std::vector<Contour>::iterator contour = shape.contours.begin(); contour != shape.contours.end(); ++contour)
            foreach (Contour contour in shape.contours)
            {
                // Identify corners
                corners.Clear();
                List <EdgeHolder> edges = contour.edges;
                int edgeCount           = edges.Count;
                if (edgeCount != 0)
                {
                    Vector2 prevDirection = edges[edgeCount - 1].direction(1);// (*(contour->edges.end() - 1))->direction(1);
                    for (int i = 0; i < edgeCount; ++i)
                    {
                        EdgeHolder edge = edges[i];
                        if (isCorner(prevDirection.normalize(),
                                     edge.direction(0).normalize(), crossThreshold))
                        {
                            corners.Add(i);
                        }
                        prevDirection = edge.direction(1);
                    }
                }

                // Smooth contour
                if (corners.Count == 0) //is empty
                {
                    for (int i = edgeCount - 1; i >= 0; --i)
                    {
                        edges[i].color = EdgeColor.WHITE;
                    }
                }
                else if (corners.Count == 1)
                {
                    // "Teardrop" case
                    EdgeColor[] colors = { EdgeColor.WHITE, EdgeColor.WHITE, EdgeColor.BLACK };
                    switchColor(ref colors[0], ref seed);
                    colors[2] = colors[0];
                    switchColor(ref colors[2], ref seed);

                    int corner = corners[0];
                    if (edgeCount >= 3)
                    {
                        int m = edgeCount;
                        for (int i = 0; i < m; ++i)
                        {
                            //TODO: review here
                            contour.edges[(corner + i) % m].color = colors[((int)(3 + 2.875 * i / (m - 1) - 1.4375 + .5) - 3) + 1];
                            //(colors + 1)[int(3 + 2.875 * i / (m - 1) - 1.4375 + .5) - 3];
                        }
                    }
                    else if (edgeCount >= 1)
                    {
                        // Less than three edge segments for three colors => edges must be split
                        EdgeSegment[] parts = new EdgeSegment[7]; //empty array, TODO: review array alloc here
                        edges[0].edgeSegment.splitInThirds(
                            out parts[0 + 3 * corner],
                            out parts[1 + 3 * corner],
                            out parts[2 + 3 * corner]);

                        if (edgeCount >= 2)
                        {
                            edges[1].edgeSegment.splitInThirds(
                                out parts[3 - 3 * corner],
                                out parts[4 - 3 * corner],
                                out parts[5 - 3 * corner]
                                );
                            parts[0].color = parts[1].color = colors[0];
                            parts[2].color = parts[3].color = colors[1];
                            parts[4].color = parts[5].color = colors[2];
                        }
                        else
                        {
                            parts[0].color = colors[0];
                            parts[1].color = colors[1];
                            parts[2].color = colors[2];
                        }
                        contour.edges.Clear();
                        for (int i = 0; i < 7; ++i)
                        {
                            edges.Add(new EdgeHolder(parts[i]));
                        }
                    }
                }
                // Multiple corners
                else
                {
                    int       cornerCount = corners.Count;
                    int       spline      = 0;
                    int       start       = corners[0];
                    int       m           = contour.edges.Count;
                    EdgeColor color       = EdgeColor.WHITE;
                    switchColor(ref color, ref seed);
                    EdgeColor initialColor = color;
                    for (int i = 0; i < m; ++i)
                    {
                        int index = (start + i) % m;
                        if (spline + 1 < cornerCount && corners[spline + 1] == index)
                        {
                            ++spline;
                            switchColor(ref color, ref seed, (EdgeColor)(((spline == cornerCount - 1) ? 1 : 0) * (int)initialColor));
                        }
                        edges[index].color = color;
                    }
                }
            }
        }
 public EdgeSegment(EdgeColor edgeColor)
 {
     this.color = edgeColor;
 }
示例#25
0
 public virtual void AcceptAttributeEdgeColor(EdgeColor edgeColor, T parameter)
 {
     // intentionally left blank
 }
示例#26
0
        protected override void OnPaintSurface(SKPaintSurfaceEventArgs e)
        {
            Trace.WriteLine($"{GetType().Name} OnPaintSurface");
            SKImageInfo info    = e.Info;
            SKSurface   surface = e.Surface;
            SKCanvas    canvas  = surface.Canvas;

            RadiusDefault = Math.Max(info.Width, info.Height) / 2;
            if (Radius == 0)
            {
                Radius = RadiusDefault;
            }

            // 押下状態では影を大きくする
            var seed        = Math.Min(info.Rect.Width, info.Rect.Height);
            int bodyDelta   = seed / 10;
            var bodyRect    = new SKRectI(info.Rect.Left + bodyDelta, info.Rect.Top + bodyDelta, info.Rect.Right - bodyDelta, info.Rect.Bottom - bodyDelta);
            int shadowDelta = IsPressed ? 0 : seed / 20;
            var shadowRect  = new SKRectI(info.Rect.Left + shadowDelta, info.Rect.Top + shadowDelta, info.Rect.Right - shadowDelta, info.Rect.Bottom - shadowDelta);
            var shadowColor = SKColors.DarkGray;
            var sunnyColor  = SKColors.Transparent;

            canvas.Clear();

            // 上下の影
            using (var paint = new SKPaint())
            {
                float start = (float)(bodyRect.Top - shadowRect.Top) / shadowRect.Height;
                float end   = 1 - start;
                var   rect  = new SKRectI(bodyRect.Left, shadowRect.Top, bodyRect.Right, shadowRect.Bottom);

                paint.Shader = SKShader.CreateLinearGradient(
                    new SKPoint(rect.MidX, rect.Top),
                    new SKPoint(rect.MidX, rect.Bottom),
                    new SKColor[] { sunnyColor, shadowColor, shadowColor, sunnyColor },
                    new float[] { 0, start, end, 1 },
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(rect, paint);
            }

            // 左右の影
            using (var paint = new SKPaint())
            {
                float start = (float)(bodyRect.Left - shadowRect.Left) / shadowRect.Width;
                float end   = 1 - start;
                var   rect  = new SKRectI(shadowRect.Left, bodyRect.Top, shadowRect.Right, bodyRect.Bottom);

                paint.Shader = SKShader.CreateLinearGradient(
                    new SKPoint(rect.Left, rect.MidY),
                    new SKPoint(rect.Right, rect.MidY),
                    new SKColor[] { sunnyColor, shadowColor, shadowColor, sunnyColor },
                    new float[] { 0, start, end, 1 },
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(rect, paint);
            }

            // 四隅 左上
            using (var paint = new SKPaint())
            {
                var rect = new SKRectI(shadowRect.Left, shadowRect.Top, bodyRect.Left, bodyRect.Top);

                paint.Shader = SKShader.CreateRadialGradient(
                    new SKPoint(rect.Right, rect.Bottom),
                    rect.Width,
                    new SKColor[] { shadowColor, sunnyColor },
                    null,
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(rect, paint);
            }
            // 四隅 右上
            using (var paint = new SKPaint())
            {
                var rect = new SKRectI(bodyRect.Right, shadowRect.Top, shadowRect.Right, bodyRect.Top);

                paint.Shader = SKShader.CreateRadialGradient(
                    new SKPoint(rect.Left, rect.Bottom),
                    rect.Width,
                    new SKColor[] { shadowColor, sunnyColor },
                    null,
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(rect, paint);
            }
            // 四隅 左下
            using (var paint = new SKPaint())
            {
                var rect = new SKRectI(shadowRect.Left, bodyRect.Bottom, bodyRect.Left, shadowRect.Bottom);

                paint.Shader = SKShader.CreateRadialGradient(
                    new SKPoint(rect.Right, rect.Top),
                    rect.Width,
                    new SKColor[] { shadowColor, sunnyColor },
                    null,
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(rect, paint);
            }
            // 四隅 右下
            using (var paint = new SKPaint())
            {
                var rect = new SKRectI(bodyRect.Right, bodyRect.Bottom, shadowRect.Right, shadowRect.Bottom);

                paint.Shader = SKShader.CreateRadialGradient(
                    new SKPoint(rect.Left, rect.Top),
                    rect.Width,
                    new SKColor[] { shadowColor, sunnyColor },
                    null,
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(rect, paint);
            }

            // 本体
            using (var paint = new SKPaint())
            {
                // 非活性状態ではグレー
                var centerColor = IsEnabled ? CenterColor.ToSKColor() : SKColors.WhiteSmoke;
                var edgeColor   = IsEnabled ? EdgeColor.ToSKColor() : SKColors.LightGray;

                // プラットフォームにより影のサイズが異なるため切れてしまう
                //var sigma = IsPressed ? 4 : 1;
                //paint.ImageFilter = SKImageFilter.CreateDropShadow(0, 0, sigma, sigma, SKColors.Black, SKDropShadowImageFilterShadowMode.DrawShadowAndForeground);

                paint.Shader = SKShader.CreateRadialGradient(
                    new SKPoint(info.Rect.MidX, info.Rect.MidY),
                    Radius,
                    new SKColor[] { centerColor, edgeColor },
                    null,
                    SKShaderTileMode.Clamp);
                canvas.DrawRect(bodyRect, paint);
            }

            // 文字
            using (var paint = new SKPaint())
            {
                paint.Color       = IsEnabled ? SKColors.Black : SKColors.Gray;
                paint.Typeface    = SKTypeface.FromFamilyName("Arial", SKTypefaceStyle.Bold);
                paint.IsAntialias = true;

                // 見やすくならない
                //paint.ImageFilter = SKImageFilter.CreateDropShadow(2, 2, 2, 2, SKColors.Black, SKDropShadowImageFilterShadowMode.DrawShadowAndForeground);

                var textBounds = new SKRect();
                paint.MeasureText(Text, ref textBounds);

                float height = textBounds.Height;
                paint.TextSize = 0.4f * bodyRect.Height * paint.TextSize / height;
                paint.MeasureText(Text, ref textBounds);

                float xText = bodyRect.Width / 2 - textBounds.MidX + bodyDelta;
                float yText = bodyRect.Height / 2 - textBounds.MidY + bodyDelta;

                canvas.DrawText(Text, xText, yText, paint);
            }
        }
示例#27
0
 public CubicSegment(EdgeColor edgeColor, params Vector2[] p) :
     base(edgeColor)
 {
     _p = p;
 }
示例#28
0
 public bool HasComponent(EdgeColor c)
 {
     return((color & c) != 0);
 }
示例#29
0
 public LinearSegment(Vector2 p0, Vector2 p1, EdgeColor edgeColor = EdgeColor.White) : base(edgeColor)
 {
     _p = new[] { p0, p1 };
 }
示例#30
0
 public LinearSegment(Vector2 p0, Vector2 p1, EdgeColor edgeColor = EdgeColor.WHITE)
     : base(edgeColor)
 {
     _p0 = p0;
     _p1 = p1;
 }