private static Geometry GetRightDeleteGeometry(StateButton sender)
        {
            Rect iconRect = sender.IconRect;

            double deleteOffsetWidth  = iconRect.Width * iconDeleteOffsetFactor;
            double deleteOffsetHeight = iconRect.Height * iconDeleteOffsetFactor;

            Point pEmpty1 = new Point(sender.ActualWidth / 2, sender.ActualHeight / 2);
            Point pEmpty2 = new Point(iconRect.X + iconRect.Width + deleteOffsetWidth, iconRect.Y + iconRect.Height + deleteOffsetHeight);
            Point pEmpty3 = new Point(iconRect.X + iconRect.Width + deleteOffsetWidth, iconRect.Y - deleteOffsetHeight);

            return(new PathGeometry(StateButton.GetFigures(pEmpty1, pEmpty2, pEmpty3)));
        }
        private static Geometry GetArrowGeometry(StateButton sender)
        {
            Rect iconRect = sender.IconRect;

            double sqrt2        = Math.Sqrt(2);
            double arrowWidth   = iconRect.Width * iconArrowWidthFactor;
            double radiusMiddle = iconRect.Width * (1 - iconCurveThicknessFactor) / 2;
            Point  middlePoint  = new Point(sender.ActualWidth / 2, sender.ActualHeight / 2);

            Vector pArrowOffset1 = new Vector(-radiusMiddle * (1 + iconArrowHeightFactor) / sqrt2,
                                              -radiusMiddle * (1 + iconArrowHeightFactor) / sqrt2);
            Vector pArrowOffset2 = new Vector(-radiusMiddle * (1 - iconArrowHeightFactor) / sqrt2,
                                              -radiusMiddle * (1 - iconArrowHeightFactor) / sqrt2);
            Vector pArrowOffset3 = new Vector((arrowWidth - radiusMiddle) / sqrt2, (-arrowWidth - radiusMiddle) / sqrt2);

            Point pArrow1 = Point.Add(middlePoint, pArrowOffset1);
            Point pArrow2 = Point.Add(middlePoint, pArrowOffset2);
            Point pArrow3 = Point.Add(middlePoint, pArrowOffset3);

            return(new PathGeometry(StateButton.GetFigures(pArrow1, pArrow2, pArrow3)));
        }
        private static Geometry GetOneGeomerty(StateButton sender)
        {
            Rect iconRect = sender.IconRect;

            double diagonalStrokeWidth  = iconRect.Width * iconOneDiagonalStrokeWidthFactor;
            double diagonalStrokeHeight = iconRect.Height * iconOneDiagonalStrokeHeightFactor;

            double thickness       = iconRect.Width * iconOneStrokeThicknessFactor;
            double thicknessFactor = thickness * Math.Sqrt(1 / (Math.Pow(diagonalStrokeWidth, 2) + Math.Pow(diagonalStrokeHeight, 2)));

            double diagonalShortWidth  = diagonalStrokeWidth * thicknessFactor;
            double diagonalShortHeight = diagonalStrokeHeight * thicknessFactor;

            double diagonalLongWidth  = thickness + diagonalStrokeWidth;
            double diagonalLongHeight = diagonalStrokeHeight + diagonalShortHeight;

            double diagonalMiddleWidth  = diagonalStrokeWidth - diagonalShortHeight;
            double diagonalMiddleHeight = diagonalLongHeight / diagonalLongWidth * diagonalMiddleWidth;

            Vector vDiagonalShort  = new Vector(diagonalShortHeight, diagonalShortWidth);
            Vector vDiagonalMiddle = new Vector(diagonalMiddleWidth, -diagonalMiddleHeight);
            Vector vDiagonalLong   = new Vector(-diagonalLongWidth, diagonalLongHeight);

            Vector vVerticalLong    = new Vector(0, iconRect.Height * iconOneVerticalStrokeHeightFactor);
            Vector vHorizontalShort = new Vector(-thickness, 0);

            Point pCornerSpire = new Point(iconRect.X + iconRect.Width * (1 - iconOneOffsetWidthFactor),
                                           iconRect.Y + iconRect.Height * iconOneOffsetHeightFactor);
            Point pMiddleTop    = Point.Add(pCornerSpire, vDiagonalLong);
            Point pMiddleBottom = Point.Add(pMiddleTop, vDiagonalShort);
            Point pCornerInner  = Point.Add(pMiddleBottom, vDiagonalMiddle);
            Point pBottomRight  = Point.Add(pCornerSpire, vVerticalLong);
            Point pBottomLeft   = Point.Add(pBottomRight, vHorizontalShort);

            return(new PathGeometry(StateButton.GetFigures(pCornerSpire, pMiddleTop, pMiddleBottom, pCornerInner, pBottomLeft, pBottomRight)));
        }