Закругленная кнопка оставляет цвет фона на рамке - PullRequest
0 голосов
/ 13 марта 2020

Я использую этот код C#, чтобы получить закругленную кнопку. Но вы видите, что он оставляет цвет фона вдоль границы. Тем не менее, кнопка находится на NSView, который является белым. В чем может быть причина? и как это исправить?

enter image description here

Код для рисования кнопки и границы (в этом случае границы не требуется):

Код Callee:

_startButton.SetupButton(NSColor.Black, NSColor.White, NSColor.Black, NSColor.White, false, NSColor.Black, 15, false);

Код подкласса NSButton:

public void SetupButton(NSColor backgroundColor,
                            NSColor textColor,
                            NSColor backgroundHoverColor,
                            NSColor textHoverColor,
                            bool requiresBorder,
                            NSColor borderColor,
                            int cornerRadius,
                            bool requiresTransparent)
    {
        _bgColor = backgroundColor;
        _textColor = textColor;
        _bgColorHover = backgroundHoverColor;
        _textColorHover = textHoverColor;
        _borderColor = borderColor;
        _requiresBorder = requiresBorder;
        _cornerRadius = cornerRadius;
        _requiresTransparent = requiresTransparent;

    }

    public override void DrawRect(CGRect dirtyRect)
    {
        base.DrawRect(dirtyRect);

        if (_requiresBorder)
        {
            //draw border
            var borderPath = new NSBezierPath();
            var borderRect = new CGRect(0, 0, dirtyRect.Size.Width, dirtyRect.Size.Height);
            borderPath.AppendPathWithRoundedRect(borderRect, _cornerRadius, _cornerRadius);
            _borderColor.Set();
            borderPath.LineWidth = 3;
            borderPath.Stroke();
        }

        //draw button
        var buttonPath = new NSBezierPath();
        var buttonRect = new CGRect(1, 1, dirtyRect.Size.Width - 2, dirtyRect.Size.Height - 2);
        buttonPath.AppendPathWithRoundedRect(buttonRect, _cornerRadius, _cornerRadius);

        if (_requiresTransparent)
            NSColor.Clear.SetFill();
        else
            _bgColor.SetFill();

        buttonPath.Fill();


        //NSColor.White.Set();
        //NSGraphics.RectFill(dirtyRect);

        //draw text
        var paraStyle = new NSMutableParagraphStyle
        {
            Alignment = NSTextAlignment.Center
        };
        var attributes = new NSMutableDictionary
        {
            { NSStringAttributeKey.ForegroundColor, _textColor },
            { NSStringAttributeKey.Font, Font },
            { NSStringAttributeKey.ParagraphStyle, paraStyle },
            { NSStringAttributeKey.BaselineOffset, NSNumber.FromFloat(0.0f) }
        };

        var titleRect = new CGRect(dirtyRect.X, dirtyRect.Height / 2 - 10, dirtyRect.Width, dirtyRect.Height);
        Title.DrawInRect(titleRect, attributes);
    }
...