void BRadioButton::Draw(BRect updateRect) { if (Window() == NULL) return; BFont font; GetFont(&font); font_height fontHeight; font.GetHeight(&fontHeight); float sHeight = fontHeight.ascent + fontHeight.descent; BRect rect = Frame().OffsetToSelf(B_ORIGIN); rect.InsetBy(5, (rect.Height() - sHeight) / 2); if (rect.IsValid() == false) return; if ((IsFocus() || IsFocusChanging()) && IsEnabled() && Label() != NULL) { BPoint penLocation; penLocation.Set(rect.left + rect.Height() + 5, rect.Center().y + sHeight / 2 + 1); SetHighColor((IsFocus() && Window()->IsActivate()) ? ui_color(B_NAVIGATION_BASE_COLOR) : ViewColor()); StrokeLine(penLocation, penLocation + BPoint(font.StringWidth(Label()), 0)); } if (IsFocusChanging()) return; rgb_color shineColor = ui_color(B_SHINE_COLOR); rgb_color shadowColor = ui_color(B_SHADOW_COLOR); if (!IsEnabled()) { shineColor.disable(ViewColor()); shadowColor.disable(ViewColor()); } rect.right = rect.left + rect.Height(); SetHighColor(shineColor.mix_copy(0, 0, 0, 5)); FillEllipse(rect); SetHighColor(shineColor); StrokeArc(rect, 225, 180); SetHighColor(shadowColor); StrokeArc(rect, 45, 180); if (Value() == B_CONTROL_ON) { SetHighColor(shadowColor.mix_copy(255, 255, 255, 50)); BRect r = rect.InsetByCopy(3, 3); FillEllipse(r); } if (Label() != NULL) { BPoint penLocation; penLocation.x = rect.right + 5; penLocation.y = rect.Center().y - sHeight / 2.f; penLocation.y += fontHeight.ascent + 1; SetHighColor(IsEnabled() ? ui_color(B_PANEL_TEXT_COLOR) : ui_color(B_SHINE_COLOR).disable(ViewColor())); SetLowColor(ViewColor()); DrawString(Label(), penLocation); if (!IsEnabled()) { SetHighColor(ui_color(B_SHADOW_COLOR).disable(ViewColor())); DrawString(Label(), penLocation - BPoint(1, 1)); } } }