1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/views/controls/menu/menu_separator.h"
6
7#include "third_party/skia/include/core/SkColor.h"
8#include "ui/gfx/canvas.h"
9#include "ui/native_theme/native_theme.h"
10#include "ui/views/controls/menu/menu_config.h"
11#include "ui/views/controls/menu/menu_item_view.h"
12
13namespace {
14
15const int kSeparatorHeight = 1;
16
17}  // namespace
18
19namespace views {
20
21#if !defined(OS_WIN)
22void MenuSeparator::OnPaint(gfx::Canvas* canvas) {
23  OnPaintAura(canvas);
24}
25
26gfx::Size MenuSeparator::GetPreferredSize() const {
27  return GetPreferredSizeAura();
28}
29#endif
30
31void MenuSeparator::OnPaintAura(gfx::Canvas* canvas) {
32  int pos = 0;
33  switch (type_) {
34    case ui::LOWER_SEPARATOR:
35      pos = height() - kSeparatorHeight;
36      break;
37    case ui::SPACING_SEPARATOR:
38      return;
39    case ui::UPPER_SEPARATOR:
40      break;
41    default:
42      pos = height() / 2;
43      break;
44  }
45  canvas->FillRect(gfx::Rect(0, pos, width(), kSeparatorHeight),
46                   GetNativeTheme()->GetSystemColor(
47                       ui::NativeTheme::kColorId_MenuSeparatorColor));
48}
49
50gfx::Size MenuSeparator::GetPreferredSizeAura() const {
51  const MenuConfig& menu_config = parent_menu_item_->GetMenuConfig();
52  int height = menu_config.separator_height;
53  switch(type_) {
54    case ui::SPACING_SEPARATOR:
55      height = menu_config.separator_spacing_height;
56      break;
57    case ui::LOWER_SEPARATOR:
58      height = menu_config.separator_lower_height;
59      break;
60    case ui::UPPER_SEPARATOR:
61      height = menu_config.separator_upper_height;
62      break;
63    default:
64      height = menu_config.separator_height;
65      break;
66  }
67  return gfx::Size(10,  // Just in case we're the only item in a menu.
68                   height);
69}
70
71}  // namespace views
72