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#endif
26
27gfx::Size MenuSeparator::GetPreferredSize() const {
28  const MenuConfig& menu_config = parent_menu_item_->GetMenuConfig();
29  int height = menu_config.separator_height;
30  switch(type_) {
31    case ui::SPACING_SEPARATOR:
32      height = menu_config.separator_spacing_height;
33      break;
34    case ui::LOWER_SEPARATOR:
35      height = menu_config.separator_lower_height;
36      break;
37    case ui::UPPER_SEPARATOR:
38      height = menu_config.separator_upper_height;
39      break;
40    default:
41      height = menu_config.separator_height;
42      break;
43  }
44  return gfx::Size(10,  // Just in case we're the only item in a menu.
45                   height);
46}
47
48gfx::Rect MenuSeparator::GetPaintBounds() {
49  int pos = 0;
50  switch (type_) {
51    case ui::LOWER_SEPARATOR:
52      pos = height() - kSeparatorHeight;
53      break;
54    case ui::SPACING_SEPARATOR:
55      return gfx::Rect();
56    case ui::UPPER_SEPARATOR:
57      break;
58    default:
59      pos = height() / 2;
60      break;
61  }
62
63  return gfx::Rect(0, pos, width(), kSeparatorHeight);
64}
65
66void MenuSeparator::OnPaintAura(gfx::Canvas* canvas) {
67  canvas->FillRect(GetPaintBounds(),
68                   GetNativeTheme()->GetSystemColor(
69                       ui::NativeTheme::kColorId_MenuSeparatorColor));
70}
71
72}  // namespace views
73