Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: views/controls/menu/menu_item_view_win.cc

Issue 2811032: Revert 50784 - Canvas refactoring part 3.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "views/controls/menu/menu_item_view.h" 5 #include "views/controls/menu/menu_item_view.h"
6 6
7 #include <uxtheme.h> 7 #include <uxtheme.h>
8 #include <Vssym32.h> 8 #include <Vssym32.h>
9 9
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
11 #include "gfx/canvas_skia.h" 11 #include "gfx/canvas.h"
12 #include "gfx/native_theme_win.h" 12 #include "gfx/native_theme_win.h"
13 #include "grit/app_strings.h" 13 #include "grit/app_strings.h"
14 #include "views/controls/menu/menu_config.h" 14 #include "views/controls/menu/menu_config.h"
15 #include "views/controls/menu/submenu_view.h" 15 #include "views/controls/menu/submenu_view.h"
16 16
17 using gfx::NativeTheme; 17 using gfx::NativeTheme;
18 18
19 namespace views { 19 namespace views {
20 20
21 gfx::Size MenuItemView::GetPreferredSize() { 21 gfx::Size MenuItemView::GetPreferredSize() {
22 const gfx::Font& font = MenuConfig::instance().font; 22 const gfx::Font& font = MenuConfig::instance().font;
23 return gfx::Size( 23 return gfx::Size(
24 font.GetStringWidth(title_) + label_start_ + item_right_margin_ + 24 font.GetStringWidth(title_) + label_start_ + item_right_margin_ +
25 GetChildPreferredWidth(), 25 GetChildPreferredWidth(),
26 font.height() + GetBottomMargin() + GetTopMargin()); 26 font.height() + GetBottomMargin() + GetTopMargin());
27 } 27 }
28 28
29 void MenuItemView::Paint(gfx::Canvas* canvas, bool for_drag) { 29 void MenuItemView::Paint(gfx::Canvas* canvas, bool for_drag) {
30 const MenuConfig& config = MenuConfig::instance(); 30 const MenuConfig& config = MenuConfig::instance();
31 bool render_selection = 31 bool render_selection =
32 (!for_drag && IsSelected() && 32 (!for_drag && IsSelected() &&
33 parent_menu_item_->GetSubmenu()->GetShowSelection(this) && 33 parent_menu_item_->GetSubmenu()->GetShowSelection(this) &&
34 GetChildViewCount() == 0); 34 GetChildViewCount() == 0);
35 int state = render_selection ? MPI_HOT : 35 int state = render_selection ? MPI_HOT :
36 (IsEnabled() ? MPI_NORMAL : MPI_DISABLED); 36 (IsEnabled() ? MPI_NORMAL : MPI_DISABLED);
37 HDC dc = canvas->AsCanvasSkia()->beginPlatformPaint(); 37 HDC dc = canvas->beginPlatformPaint();
38 38
39 // The gutter is rendered before the background. 39 // The gutter is rendered before the background.
40 if (config.render_gutter && !for_drag) { 40 if (config.render_gutter && !for_drag) {
41 gfx::Rect gutter_bounds(label_start_ - config.gutter_to_label - 41 gfx::Rect gutter_bounds(label_start_ - config.gutter_to_label -
42 config.gutter_width, 0, config.gutter_width, 42 config.gutter_width, 0, config.gutter_width,
43 height()); 43 height());
44 AdjustBoundsForRTLUI(&gutter_bounds); 44 AdjustBoundsForRTLUI(&gutter_bounds);
45 RECT gutter_rect = gutter_bounds.ToRECT(); 45 RECT gutter_rect = gutter_bounds.ToRECT();
46 NativeTheme::instance()->PaintMenuGutter(dc, MENU_POPUPGUTTER, MPI_NORMAL, 46 NativeTheme::instance()->PaintMenuGutter(dc, MENU_POPUPGUTTER, MPI_NORMAL,
47 &gutter_rect); 47 &gutter_rect);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 const gfx::Font& font = MenuConfig::instance().font; 80 const gfx::Font& font = MenuConfig::instance().font;
81 int accel_width = parent_menu_item_->GetSubmenu()->max_accelerator_width(); 81 int accel_width = parent_menu_item_->GetSubmenu()->max_accelerator_width();
82 int width = this->width() - item_right_margin_ - label_start_ - accel_width; 82 int width = this->width() - item_right_margin_ - label_start_ - accel_width;
83 gfx::Rect text_bounds(label_start_, top_margin, width, font.height()); 83 gfx::Rect text_bounds(label_start_, top_margin, width, font.height());
84 text_bounds.set_x(MirroredLeftPointForRect(text_bounds)); 84 text_bounds.set_x(MirroredLeftPointForRect(text_bounds));
85 if (for_drag) { 85 if (for_drag) {
86 // With different themes, it's difficult to tell what the correct 86 // With different themes, it's difficult to tell what the correct
87 // foreground and background colors are for the text to draw the correct 87 // foreground and background colors are for the text to draw the correct
88 // halo. Instead, just draw black on white, which will look good in most 88 // halo. Instead, just draw black on white, which will look good in most
89 // cases. 89 // cases.
90 canvas->AsCanvasSkia()->DrawStringWithHalo( 90 canvas->DrawStringWithHalo(GetTitle(), font, 0x00000000, 0xFFFFFFFF,
91 GetTitle(), font, 0x00000000, 0xFFFFFFFF, text_bounds.x(), 91 text_bounds.x(), text_bounds.y(),
92 text_bounds.y(), text_bounds.width(), text_bounds.height(), 92 text_bounds.width(), text_bounds.height(),
93 GetRootMenuItem()->GetDrawStringFlags()); 93 GetRootMenuItem()->GetDrawStringFlags());
94 } else { 94 } else {
95 canvas->DrawStringInt(GetTitle(), font, fg_color, 95 canvas->DrawStringInt(GetTitle(), font, fg_color,
96 text_bounds.x(), text_bounds.y(), text_bounds.width(), 96 text_bounds.x(), text_bounds.y(), text_bounds.width(),
97 text_bounds.height(), 97 text_bounds.height(),
98 GetRootMenuItem()->GetDrawStringFlags()); 98 GetRootMenuItem()->GetDrawStringFlags());
99 } 99 }
100 100
101 PaintAccelerator(canvas); 101 PaintAccelerator(canvas);
102 102
103 if (icon_.width() > 0) { 103 if (icon_.width() > 0) {
(...skipping 20 matching lines...) Expand all
124 if (base::i18n::IsRTL()) 124 if (base::i18n::IsRTL())
125 arrow_direction = NativeTheme::LEFT_POINTING_ARROW; 125 arrow_direction = NativeTheme::LEFT_POINTING_ARROW;
126 else 126 else
127 arrow_direction = NativeTheme::RIGHT_POINTING_ARROW; 127 arrow_direction = NativeTheme::RIGHT_POINTING_ARROW;
128 128
129 RECT arrow_rect = arrow_bounds.ToRECT(); 129 RECT arrow_rect = arrow_bounds.ToRECT();
130 NativeTheme::instance()->PaintMenuArrow( 130 NativeTheme::instance()->PaintMenuArrow(
131 NativeTheme::MENU, dc, MENU_POPUPSUBMENU, state_id, &arrow_rect, 131 NativeTheme::MENU, dc, MENU_POPUPSUBMENU, state_id, &arrow_rect,
132 arrow_direction, render_selection); 132 arrow_direction, render_selection);
133 } 133 }
134 canvas->AsCanvasSkia()->endPlatformPaint(); 134 canvas->endPlatformPaint();
135 } 135 }
136 void MenuItemView::PaintCheck(HDC dc, 136 void MenuItemView::PaintCheck(HDC dc,
137 int state_id, 137 int state_id,
138 bool render_selection, 138 bool render_selection,
139 int icon_width, 139 int icon_width,
140 int icon_height) { 140 int icon_height) {
141 int top_margin = GetTopMargin(); 141 int top_margin = GetTopMargin();
142 int icon_x = MenuConfig::instance().item_left_margin; 142 int icon_x = MenuConfig::instance().item_left_margin;
143 int icon_y = top_margin + 143 int icon_y = top_margin +
144 (height() - top_margin - GetBottomMargin() - icon_height) / 2; 144 (height() - top_margin - GetBottomMargin() - icon_height) / 2;
145 // Draw the background. 145 // Draw the background.
146 gfx::Rect bg_bounds(0, 0, icon_x + icon_width, height()); 146 gfx::Rect bg_bounds(0, 0, icon_x + icon_width, height());
147 int bg_state = IsEnabled() ? MCB_NORMAL : MCB_DISABLED; 147 int bg_state = IsEnabled() ? MCB_NORMAL : MCB_DISABLED;
148 AdjustBoundsForRTLUI(&bg_bounds); 148 AdjustBoundsForRTLUI(&bg_bounds);
149 RECT bg_rect = bg_bounds.ToRECT(); 149 RECT bg_rect = bg_bounds.ToRECT();
150 NativeTheme::instance()->PaintMenuCheckBackground( 150 NativeTheme::instance()->PaintMenuCheckBackground(
151 NativeTheme::MENU, dc, MENU_POPUPCHECKBACKGROUND, bg_state, 151 NativeTheme::MENU, dc, MENU_POPUPCHECKBACKGROUND, bg_state,
152 &bg_rect); 152 &bg_rect);
153 153
154 // And the check. 154 // And the check.
155 gfx::Rect icon_bounds(icon_x / 2, icon_y, icon_width, icon_height); 155 gfx::Rect icon_bounds(icon_x / 2, icon_y, icon_width, icon_height);
156 AdjustBoundsForRTLUI(&icon_bounds); 156 AdjustBoundsForRTLUI(&icon_bounds);
157 RECT icon_rect = icon_bounds.ToRECT(); 157 RECT icon_rect = icon_bounds.ToRECT();
158 NativeTheme::instance()->PaintMenuCheck( 158 NativeTheme::instance()->PaintMenuCheck(
159 NativeTheme::MENU, dc, MENU_POPUPCHECK, state_id, &icon_rect, 159 NativeTheme::MENU, dc, MENU_POPUPCHECK, state_id, &icon_rect,
160 render_selection); 160 render_selection);
161 } 161 }
162 162
163 } // namespace views 163 } // namespace views
OLDNEW
« no previous file with comments | « views/controls/menu/menu_item_view_gtk.cc ('k') | views/controls/menu/menu_scroll_view_container.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698