summaryrefslogtreecommitdiffstats
path: root/ui/base/native_theme/native_theme_aura.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/base/native_theme/native_theme_aura.cc')
-rw-r--r--ui/base/native_theme/native_theme_aura.cc295
1 files changed, 295 insertions, 0 deletions
diff --git a/ui/base/native_theme/native_theme_aura.cc b/ui/base/native_theme/native_theme_aura.cc
new file mode 100644
index 0000000..56336c0
--- /dev/null
+++ b/ui/base/native_theme/native_theme_aura.cc
@@ -0,0 +1,295 @@
+// Copyright (c) 2012 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 "ui/base/native_theme/native_theme_aura.h"
+
+#include "base/logging.h"
+#include "grit/gfx_resources.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/rect.h"
+#include "ui/gfx/size.h"
+#include "ui/gfx/skbitmap_operations.h"
+
+namespace {
+
+const SkColor kMenuBackgroundColor = SK_ColorWHITE;
+
+// Theme colors returned by GetSystemColor().
+const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128);
+// Dialogs:
+const SkColor kDialogBackgroundColor = SK_ColorWHITE;
+// FocusableBorder:
+const SkColor kFocusedBorderColor = SkColorSetRGB(0x4D, 0x90, 0xFE);
+const SkColor kUnfocusedBorderColor = SkColorSetRGB(0xD9, 0xD9, 0xD9);
+// TextButton:
+const SkColor kTextButtonBackgroundColor = SkColorSetRGB(0xDE, 0xDE, 0xDE);
+const SkColor kTextButtonEnabledColor = SkColorSetRGB(0x22, 0x22, 0x22);
+const SkColor kTextButtonDisabledColor = SkColorSetRGB(0x99, 0x99, 0x99);
+const SkColor kTextButtonHighlightColor = SkColorSetRGB(0, 0, 0);
+const SkColor kTextButtonHoverColor = kTextButtonEnabledColor;
+// MenuItem:
+const SkColor kEnabledMenuItemForegroundColor = kTextButtonEnabledColor;
+const SkColor kDisabledMenuItemForegroundColor = kTextButtonDisabledColor;
+const SkColor kFocusedMenuItemBackgroundColor = SkColorSetRGB(0xF1, 0xF1, 0xF1);
+const SkColor kMenuSeparatorColor = SkColorSetRGB(0xDA, 0xDA, 0xDA);
+// Label:
+const SkColor kLabelEnabledColor = kTextButtonEnabledColor;
+const SkColor kLabelDisabledColor = kTextButtonDisabledColor;
+const SkColor kLabelBackgroundColor = SK_ColorWHITE;
+// Textfield:
+const SkColor kTextfieldDefaultColor = SK_ColorBLACK;
+const SkColor kTextfieldDefaultBackground = SK_ColorWHITE;
+const SkColor kTextfieldSelectionBackgroundFocused =
+ SkColorSetARGB(0x54, 0x60, 0xA8, 0xEB);
+const SkColor kTextfieldSelectionBackgroundUnfocused = SK_ColorLTGRAY;
+const SkColor kTextfieldSelectionColor =
+ color_utils::AlphaBlend(SK_ColorBLACK,
+ kTextfieldSelectionBackgroundFocused, 0xdd);
+
+} // namespace
+
+namespace ui {
+
+// static
+const NativeTheme* NativeTheme::instance() {
+ return NativeThemeAura::instance();
+}
+
+// static
+const NativeThemeAura* NativeThemeAura::instance() {
+ CR_DEFINE_STATIC_LOCAL(NativeThemeAura, s_native_theme, ());
+ return &s_native_theme;
+}
+
+NativeThemeAura::NativeThemeAura() {
+ // We don't draw scrollbar buttons.
+ set_scrollbar_button_length(0);
+}
+
+NativeThemeAura::~NativeThemeAura() {
+}
+
+SkColor NativeThemeAura::GetSystemColor(ColorId color_id) const {
+ // This implementation returns hardcoded colors.
+ switch (color_id) {
+
+ // Dialogs
+ case kColorId_DialogBackground:
+ return kDialogBackgroundColor;
+
+ // FocusableBorder
+ case kColorId_FocusedBorderColor:
+ return kFocusedBorderColor;
+ case kColorId_UnfocusedBorderColor:
+ return kUnfocusedBorderColor;
+
+ // TextButton
+ case kColorId_TextButtonBackgroundColor:
+ return kTextButtonBackgroundColor;
+ case kColorId_TextButtonEnabledColor:
+ return kTextButtonEnabledColor;
+ case kColorId_TextButtonDisabledColor:
+ return kTextButtonDisabledColor;
+ case kColorId_TextButtonHighlightColor:
+ return kTextButtonHighlightColor;
+ case kColorId_TextButtonHoverColor:
+ return kTextButtonHoverColor;
+
+ // MenuItem
+ case kColorId_EnabledMenuItemForegroundColor:
+ return kEnabledMenuItemForegroundColor;
+ case kColorId_DisabledMenuItemForegroundColor:
+ return kDisabledMenuItemForegroundColor;
+ case kColorId_FocusedMenuItemBackgroundColor:
+ return kFocusedMenuItemBackgroundColor;
+ case kColorId_MenuSeparatorColor:
+ return kMenuSeparatorColor;
+
+ // Label
+ case kColorId_LabelEnabledColor:
+ return kLabelEnabledColor;
+ case kColorId_LabelDisabledColor:
+ return kLabelDisabledColor;
+ case kColorId_LabelBackgroundColor:
+ return kLabelBackgroundColor;
+
+ // Textfield
+ case kColorId_TextfieldDefaultColor:
+ return kTextfieldDefaultColor;
+ case kColorId_TextfieldDefaultBackground:
+ return kTextfieldDefaultBackground;
+ case kColorId_TextfieldSelectionColor:
+ return kTextfieldSelectionColor;
+ case kColorId_TextfieldSelectionBackgroundFocused:
+ return kTextfieldSelectionBackgroundFocused;
+ case kColorId_TextfieldSelectionBackgroundUnfocused:
+ return kTextfieldSelectionBackgroundUnfocused;
+
+ default:
+ NOTREACHED() << "Invalid color_id: " << color_id;
+ break;
+ }
+
+ return kInvalidColorIdColor;
+}
+
+void NativeThemeAura::PaintMenuPopupBackground(SkCanvas* canvas,
+ const gfx::Size& size) const {
+ canvas->drawColor(kMenuBackgroundColor, SkXfermode::kSrc_Mode);
+}
+
+void NativeThemeAura::PaintScrollbarTrack(
+ SkCanvas* canvas,
+ Part part,
+ State state,
+ const ScrollbarTrackExtraParams& extra_params,
+ const gfx::Rect& rect) const {
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (part == kScrollbarVerticalTrack) {
+ int center_offset = 0;
+ int center_height = rect.height();
+
+ if (rect.y() == extra_params.track_y) {
+ // TODO(derat): Honor |state| instead of only using the highlighted images
+ // after updating WebKit so we can draw the entire track in one go instead
+ // of as two separate pieces: otherwise, only the portion of the scrollbar
+ // that the mouse is over gets the highlighted state.
+ SkBitmap* top = rb.GetBitmapNamed(IDR_SCROLL_BASE_VERTICAL_TOP_H);
+ DrawTiledImage(canvas, *top,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y(), top->width(), top->height());
+ center_offset += top->height();
+ center_height -= top->height();
+ }
+
+ if (rect.y() + rect.height() ==
+ extra_params.track_y + extra_params.track_height) {
+ SkBitmap* bottom = rb.GetBitmapNamed(IDR_SCROLL_BASE_VERTICAL_BOTTOM_H);
+ DrawTiledImage(canvas, *bottom,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y() + rect.height() - bottom->height(),
+ bottom->width(), bottom->height());
+ center_height -= bottom->height();
+ }
+
+ if (center_height > 0) {
+ SkBitmap* center = rb.GetBitmapNamed(IDR_SCROLL_BASE_VERTICAL_CENTER_H);
+ DrawTiledImage(canvas, *center,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y() + center_offset,
+ center->width(), center_height);
+ }
+ } else {
+ int center_offset = 0;
+ int center_width = rect.width();
+
+ if (rect.x() == extra_params.track_x) {
+ SkBitmap* left = rb.GetBitmapNamed(IDR_SCROLL_BASE_HORIZONTAL_LEFT_H);
+ DrawTiledImage(canvas, *left,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y(), left->width(), left->height());
+ center_offset += left->width();
+ center_width -= left->width();
+ }
+
+ if (rect.x() + rect.width() ==
+ extra_params.track_x + extra_params.track_width) {
+ SkBitmap* right = rb.GetBitmapNamed(IDR_SCROLL_BASE_HORIZONTAL_RIGHT_H);
+ DrawTiledImage(canvas, *right,
+ 0, 0, 1.0, 1.0,
+ rect.x() + rect.width() - right->width(), rect.y(),
+ right->width(), right->height());
+ center_width -= right->width();
+ }
+
+ if (center_width > 0) {
+ SkBitmap* center = rb.GetBitmapNamed(IDR_SCROLL_BASE_HORIZONTAL_CENTER_H);
+ DrawTiledImage(canvas, *center,
+ 0, 0, 1.0, 1.0,
+ rect.x() + center_offset, rect.y(),
+ center_width, center->height());
+ }
+ }
+}
+
+void NativeThemeAura::PaintArrowButton(SkCanvas* canvas,
+ const gfx::Rect& rect,
+ Part part,
+ State state) const {
+ DCHECK(rect.IsEmpty());
+}
+
+void NativeThemeAura::PaintScrollbarThumb(SkCanvas* canvas,
+ Part part,
+ State state,
+ const gfx::Rect& rect) const {
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ if (part == kScrollbarVerticalThumb) {
+ int top_resource_id =
+ state == kHovered ? IDR_SCROLL_THUMB_VERTICAL_TOP_H :
+ state == kPressed ? IDR_SCROLL_THUMB_VERTICAL_TOP_P :
+ IDR_SCROLL_THUMB_VERTICAL_TOP;
+ SkBitmap* top = rb.GetBitmapNamed(top_resource_id);
+ DrawTiledImage(canvas, *top,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y(), top->width(), top->height());
+
+ int bottom_resource_id =
+ state == kHovered ? IDR_SCROLL_THUMB_VERTICAL_BOTTOM_H :
+ state == kPressed ? IDR_SCROLL_THUMB_VERTICAL_BOTTOM_P :
+ IDR_SCROLL_THUMB_VERTICAL_BOTTOM;
+ SkBitmap* bottom = rb.GetBitmapNamed(bottom_resource_id);
+ DrawTiledImage(canvas, *bottom,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y() + rect.height() - bottom->height(),
+ bottom->width(), bottom->height());
+
+ if (rect.height() > top->height() + bottom->height()) {
+ int center_resource_id =
+ state == kHovered ? IDR_SCROLL_THUMB_VERTICAL_CENTER_H :
+ state == kPressed ? IDR_SCROLL_THUMB_VERTICAL_CENTER_P :
+ IDR_SCROLL_THUMB_VERTICAL_CENTER;
+ SkBitmap* center = rb.GetBitmapNamed(center_resource_id);
+ DrawTiledImage(canvas, *center,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y() + top->height(),
+ center->width(),
+ rect.height() - top->height() - bottom->height());
+ }
+ } else {
+ int left_resource_id =
+ state == kHovered ? IDR_SCROLL_THUMB_HORIZONTAL_LEFT_H :
+ state == kPressed ? IDR_SCROLL_THUMB_HORIZONTAL_LEFT_P :
+ IDR_SCROLL_THUMB_HORIZONTAL_LEFT;
+ SkBitmap* left = rb.GetBitmapNamed(left_resource_id);
+ DrawTiledImage(canvas, *left,
+ 0, 0, 1.0, 1.0,
+ rect.x(), rect.y(), left->width(), left->height());
+
+ int right_resource_id =
+ state == kHovered ? IDR_SCROLL_THUMB_HORIZONTAL_RIGHT_H :
+ state == kPressed ? IDR_SCROLL_THUMB_HORIZONTAL_RIGHT_P :
+ IDR_SCROLL_THUMB_HORIZONTAL_RIGHT;
+ SkBitmap* right = rb.GetBitmapNamed(right_resource_id);
+ DrawTiledImage(canvas, *right,
+ 0, 0, 1.0, 1.0,
+ rect.x() + rect.width() - right->width(), rect.y(),
+ right->width(), right->height());
+
+ if (rect.width() > left->width() + right->width()) {
+ int center_resource_id =
+ state == kHovered ? IDR_SCROLL_THUMB_HORIZONTAL_CENTER_H :
+ state == kPressed ? IDR_SCROLL_THUMB_HORIZONTAL_CENTER_P :
+ IDR_SCROLL_THUMB_HORIZONTAL_CENTER;
+ SkBitmap* center = rb.GetBitmapNamed(center_resource_id);
+ DrawTiledImage(canvas, *center,
+ 0, 0, 1.0, 1.0,
+ rect.x() + left->width(), rect.y(),
+ rect.width() - left->width() - right->width(),
+ center->height());
+ }
+ }
+}
+
+} // namespace ui