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"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/native_theme/native_theme_aura.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_config.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/menu/menu_item_view.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuSeparator::OnPaint(gfx::Canvas* canvas) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const MenuConfig& config = parent_menu_item_->GetMenuConfig();
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config.native_theme == ui::NativeThemeAura::instance()) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    OnPaintAura(canvas);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int start_x = 0;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config.render_gutter) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If render_gutter is true, we're on Vista and need to render the
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // gutter, then indent the separator from the gutter.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gfx::Rect gutter_bounds(MenuItemView::label_start() -
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        config.gutter_to_label - config.gutter_width, 0,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        config.gutter_width, height());
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::NativeTheme::ExtraParams extra;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    config.native_theme->Paint(
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        canvas->sk_canvas(), ui::NativeTheme::kMenuPopupGutter,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ui::NativeTheme::kNormal, gutter_bounds, extra);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    start_x = gutter_bounds.x() + config.gutter_width;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect separator_bounds(start_x, 0, width(), height());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::NativeTheme::ExtraParams extra;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  extra.menu_separator.has_gutter = config.render_gutter;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config.native_theme->Paint(
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      canvas->sk_canvas(), ui::NativeTheme::kMenuPopupSeparator,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::NativeTheme::kNormal, separator_bounds, extra);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size MenuSeparator::GetPreferredSize() const {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const MenuConfig& config = parent_menu_item_->GetMenuConfig();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config.native_theme == ui::NativeThemeAura::instance())
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return GetPreferredSizeAura();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::Size(10,  // Just in case we're the only item in a menu.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   config.separator_height);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace views
61