1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "views/controls/menu/menu_separator.h"
#include <windows.h>
#include <uxtheme.h>
#include <Vssym32.h>
#include "gfx/canvas_skia.h"
#include "gfx/native_theme_win.h"
#include "views/controls/menu/menu_config.h"
#include "views/controls/menu/menu_item_view.h"
namespace views {
void MenuSeparator::Paint(gfx::Canvas* canvas) {
const MenuConfig& config = MenuConfig::instance();
// The gutter is rendered before the background.
int start_x = 0;
int start_y = height() / 3;
HDC dc = canvas->AsCanvasSkia()->beginPlatformPaint();
if (config.render_gutter) {
// If render_gutter is true, we're on Vista and need to render the
// gutter, then indent the separator from the gutter.
RECT gutter_bounds = { MenuItemView::label_start() -
config.gutter_to_label - config.gutter_width, 0, 0,
height() };
gutter_bounds.right = gutter_bounds.left + config.gutter_width;
gfx::NativeTheme::instance()->PaintMenuGutter(dc, MENU_POPUPGUTTER,
MPI_NORMAL, &gutter_bounds);
start_x = gutter_bounds.left + config.gutter_width;
start_y = 0;
}
RECT separator_bounds = { start_x, start_y, width(), height() };
gfx::NativeTheme::instance()->PaintMenuSeparator(
dc, MENU_POPUPSEPARATOR, MPI_NORMAL, &separator_bounds);
canvas->AsCanvasSkia()->endPlatformPaint();
}
gfx::Size MenuSeparator::GetPreferredSize() {
return gfx::Size(10, // Just in case we're the only item in a menu.
MenuConfig::instance().separator_height);
}
} // namespace views
|