diff --git a/src/kits/interface/MenuItem.cpp b/src/kits/interface/MenuItem.cpp index 60e9abd924..b2dfc92c3c 100644 --- a/src/kits/interface/MenuItem.cpp +++ b/src/kits/interface/MenuItem.cpp @@ -444,28 +444,32 @@ BMenuItem::DrawContent() void BMenuItem::Draw() { - rgb_color lowColor = fSuper->LowColor(); + const rgb_color highColor = fSuper->HighColor(); + rgb_color bgColor = fSuper->LowColor(); bool enabled = IsEnabled(); bool selected = IsSelected(); + bool activated = selected && (enabled || Submenu() != NULL); - // set low color and fill background if selected - bool activated = selected && (enabled || Submenu()); if (activated) { + // fill in background + bgColor = ui_color(B_MENU_SELECTED_BACKGROUND_COLOR); BRect rect = Frame(); be_control_look->DrawMenuItemBackground(fSuper, rect, rect, - ui_color(B_MENU_SELECTED_BACKGROUND_COLOR), - BControlLook::B_ACTIVATED); - } + bgColor, BControlLook::B_ACTIVATED); + } else + bgColor = ui_color(B_MENU_BACKGROUND_COLOR); // set high color - if (activated) + if (activated && enabled) fSuper->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR)); else if (enabled) fSuper->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR)); else { - // TODO: Use a lighten tint if the menu uses a dark background - fSuper->SetHighColor(tint_color(lowColor, B_DISABLED_LABEL_TINT)); + if (bgColor.red + bgColor.green + bgColor.blue > 128 * 3) + fSuper->SetHighColor(tint_color(bgColor, B_DISABLED_LABEL_TINT)); + else + fSuper->SetHighColor(tint_color(bgColor, B_LIGHTEN_2_TINT)); } // draw content @@ -485,7 +489,8 @@ BMenuItem::Draw() _DrawSubmenuSymbol(); } - fSuper->SetLowColor(lowColor); + fSuper->SetHighColor(highColor); + // restore the high color of the parent menu }