15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_separator.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <windows.h>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <uxtheme.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Vssym32.h>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/canvas.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_config.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_item_view.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/native_theme/native_theme_aura.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuSeparator::OnPaint(gfx::Canvas* canvas) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const MenuConfig& config = parent_menu_item_->GetMenuConfig();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config.native_theme == ui::NativeThemeAura::instance()) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OnPaintAura(canvas);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int start_x = 0;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config.render_gutter) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If render_gutter is true, we're on Vista and need to render the
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // gutter, then indent the separator from the gutter.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gfx::Rect gutter_bounds(MenuItemView::label_start() -
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        config.gutter_to_label - config.gutter_width, 0,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        config.gutter_width, height());
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::NativeTheme::ExtraParams extra;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    config.native_theme->Paint(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        canvas->sk_canvas(), ui::NativeTheme::kMenuPopupGutter,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ui::NativeTheme::kNormal, gutter_bounds, extra);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_x = gutter_bounds.x() + config.gutter_width;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect separator_bounds(start_x, 0, width(), height());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::NativeTheme::ExtraParams extra;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extra.menu_separator.has_gutter = config.render_gutter;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config.native_theme->Paint(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      canvas->sk_canvas(), ui::NativeTheme::kMenuPopupSeparator,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::NativeTheme::kNormal, separator_bounds, extra);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Size MenuSeparator::GetPreferredSize() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const MenuConfig& config = parent_menu_item_->GetMenuConfig();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config.native_theme == ui::NativeThemeAura::instance())
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return GetPreferredSizeAura();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::Size(10,  // Just in case we're the only item in a menu.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   config.separator_height);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
68