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

Unified Diff: ui/views/controls/menu/menu_separator.cc

Issue 2655553003: Native themes: Add menu separator part (Closed)
Patch Set: item->separator Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/controls/menu/menu_separator.h ('k') | ui/views/controls/menu/menu_separator_views.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/controls/menu/menu_separator.cc
diff --git a/ui/views/controls/menu/menu_separator_views.cc b/ui/views/controls/menu/menu_separator.cc
similarity index 64%
rename from ui/views/controls/menu/menu_separator_views.cc
rename to ui/views/controls/menu/menu_separator.cc
index 86f794ad0af5cc7150b916cdc71395effdfc1537..d3d532e2fb5d7f6d75232bc207845dda4e276378 100644
--- a/ui/views/controls/menu/menu_separator_views.cc
+++ b/ui/views/controls/menu/menu_separator.cc
@@ -10,58 +10,72 @@
#include "ui/native_theme/native_theme.h"
#include "ui/views/controls/menu/menu_config.h"
+#if defined(OS_WIN)
+#include "ui/display/win/dpi.h"
+#endif
+
namespace views {
-#if !defined(OS_WIN)
void MenuSeparator::OnPaint(gfx::Canvas* canvas) {
- canvas->FillRect(GetPaintBounds(),
- GetNativeTheme()->GetSystemColor(
- ui::NativeTheme::kColorId_MenuSeparatorColor));
-}
-#endif
+ if (type_ == ui::SPACING_SEPARATOR)
+ return;
-gfx::Size MenuSeparator::GetPreferredSize() const {
const MenuConfig& menu_config = MenuConfig::instance();
- int height = menu_config.separator_height;
- switch(type_) {
- case ui::SPACING_SEPARATOR:
- height = menu_config.separator_spacing_height;
- break;
+ int pos = 0;
+ int separator_thickness = menu_config.separator_thickness;
+ switch (type_) {
case ui::LOWER_SEPARATOR:
- height = menu_config.separator_lower_height;
+ pos = height() - separator_thickness;
break;
case ui::UPPER_SEPARATOR:
- height = menu_config.separator_upper_height;
break;
default:
- height = menu_config.separator_height;
+ pos = height() / 2;
break;
}
- return gfx::Size(10, // Just in case we're the only item in a menu.
- height);
+
+ gfx::Rect paint_rect(0, pos, width(), separator_thickness);
+ if (menu_config.use_outer_border)
+ paint_rect.Inset(1, 0);
+
+#if defined(OS_WIN)
+ // Hack to get the separator to display correctly on Windows where we may
+ // have fractional scales. We move the separator 1 pixel down to ensure that
+ // it falls within the clipping rect which is scaled up.
+ float device_scale = display::win::GetDPIScale();
+ bool is_fractional_scale =
+ (device_scale - static_cast<int>(device_scale) != 0);
+ if (is_fractional_scale && paint_rect.y() == 0)
+ paint_rect.set_y(1);
+#endif
+
+ ui::NativeTheme::ExtraParams params;
+ params.menu_separator.paint_rect = &paint_rect;
+ params.menu_separator.type = type_;
+ GetNativeTheme()->Paint(
+ canvas->sk_canvas(), ui::NativeTheme::kMenuPopupSeparator,
+ ui::NativeTheme::kNormal, gfx::Rect(bounds().size()), params);
}
-gfx::Rect MenuSeparator::GetPaintBounds() {
- int pos = 0;
+gfx::Size MenuSeparator::GetPreferredSize() const {
const MenuConfig& menu_config = MenuConfig::instance();
- int separator_thickness = menu_config.separator_thickness;
+ int height = menu_config.separator_height;
switch (type_) {
+ case ui::SPACING_SEPARATOR:
+ height = menu_config.separator_spacing_height;
+ break;
case ui::LOWER_SEPARATOR:
- pos = height() - separator_thickness;
+ height = menu_config.separator_lower_height;
break;
- case ui::SPACING_SEPARATOR:
- return gfx::Rect();
case ui::UPPER_SEPARATOR:
+ height = menu_config.separator_upper_height;
break;
default:
- pos = height() / 2;
+ height = menu_config.separator_height;
break;
}
-
- gfx::Rect paint_rect(0, pos, width(), separator_thickness);
- if (menu_config.use_outer_border)
- paint_rect.Inset(1, 0);
- return paint_rect;
+ return gfx::Size(10, // Just in case we're the only item in a menu.
+ height);
}
} // namespace views
« no previous file with comments | « ui/views/controls/menu/menu_separator.h ('k') | ui/views/controls/menu/menu_separator_views.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698