Я использую этот код C#, чтобы получить закругленную кнопку. Но вы видите, что он оставляет цвет фона вдоль границы. Тем не менее, кнопка находится на NSView, который является белым. В чем может быть причина? и как это исправить?
Код для рисования кнопки и границы (в этом случае границы не требуется):
Код 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);
}