summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/native_theme/fallback_theme.cc198
-rw-r--r--ui/native_theme/fallback_theme.h28
-rw-r--r--ui/native_theme/native_theme.gyp2
-rw-r--r--ui/native_theme/native_theme_aura.cc168
-rw-r--r--ui/native_theme/native_theme_aura.h5
-rw-r--r--webkit/glue/webfallbackthemeengine_impl.cc191
-rw-r--r--webkit/glue/webfallbackthemeengine_impl.h39
-rw-r--r--webkit/glue/webkit_glue.gypi2
-rw-r--r--webkit/glue/webkitplatformsupport_impl.cc7
-rw-r--r--webkit/glue/webkitplatformsupport_impl.h5
10 files changed, 472 insertions, 173 deletions
diff --git a/ui/native_theme/fallback_theme.cc b/ui/native_theme/fallback_theme.cc
new file mode 100644
index 0000000..4bfe8d9
--- /dev/null
+++ b/ui/native_theme/fallback_theme.cc
@@ -0,0 +1,198 @@
+// 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/native_theme/fallback_theme.h"
+
+#include "base/basictypes.h"
+#include "base/logging.h"
+#include "ui/gfx/color_utils.h"
+#include "ui/gfx/skia_utils_gtk.h"
+#include "ui/native_theme/common_theme.h"
+
+namespace ui {
+
+FallbackTheme::FallbackTheme() {
+}
+
+FallbackTheme::~FallbackTheme() {
+}
+
+SkColor FallbackTheme::GetSystemColor(ColorId color_id) const {
+ // This implementation returns hardcoded colors.
+
+ static const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128);
+ // Menu:
+ static const SkColor kMenuBackgroundColor = SK_ColorWHITE;
+ // Windows:
+ static const SkColor kWindowBackgroundColor = SK_ColorWHITE;
+ // Dialogs:
+ static const SkColor kDialogBackgroundColor = SkColorSetRGB(251, 251, 251);
+ // FocusableBorder:
+ static const SkColor kFocusedBorderColor = SkColorSetRGB(0x4D, 0x90, 0xFE);
+ static const SkColor kUnfocusedBorderColor = SkColorSetRGB(0xD9, 0xD9, 0xD9);
+ // Button:
+ static const SkColor kButtonBackgroundColor = SkColorSetRGB(0xDE, 0xDE, 0xDE);
+ static const SkColor kButtonEnabledColor = SkColorSetRGB(0x22, 0x22, 0x22);
+ static const SkColor kButtonDisabledColor = SkColorSetRGB(0x99, 0x99, 0x99);
+ static const SkColor kButtonHighlightColor = SkColorSetRGB(0, 0, 0);
+ static const SkColor kButtonHoverColor = kButtonEnabledColor;
+ // MenuItem:
+ static const SkColor kEnabledMenuItemForegroundColor = kButtonEnabledColor;
+ static const SkColor kDisabledMenuItemForegroundColor = kButtonDisabledColor;
+ static const SkColor kFocusedMenuItemBackgroundColor =
+ SkColorSetRGB(0xF1, 0xF1, 0xF1);
+ static const SkColor kHoverMenuItemBackgroundColor =
+ SkColorSetARGB(204, 255, 255, 255);
+ static const SkColor kMenuSeparatorColor = SkColorSetRGB(0xED, 0xED, 0xED);
+ static const SkColor kEnabledMenuButtonBorderColor =
+ SkColorSetARGB(36, 0, 0, 0);
+ static const SkColor kFocusedMenuButtonBorderColor =
+ SkColorSetARGB(72, 0, 0, 0);
+ static const SkColor kHoverMenuButtonBorderColor =
+ SkColorSetARGB(72, 0, 0, 0);
+ // Label:
+ static const SkColor kLabelEnabledColor = kButtonEnabledColor;
+ static const SkColor kLabelDisabledColor = kButtonDisabledColor;
+ static const SkColor kLabelBackgroundColor = SK_ColorWHITE;
+ // Textfield:
+ static const SkColor kTextfieldDefaultColor = SK_ColorBLACK;
+ static const SkColor kTextfieldDefaultBackground = SK_ColorWHITE;
+ static const SkColor kTextfieldReadOnlyColor = SK_ColorDKGRAY;
+ static const SkColor kTextfieldReadOnlyBackground = SK_ColorWHITE;
+ static const SkColor kTextfieldSelectionBackgroundFocused =
+ SkColorSetARGB(0x54, 0x60, 0xA8, 0xEB);
+ static const SkColor kTextfieldSelectionBackgroundUnfocused = SK_ColorLTGRAY;
+ static const SkColor kTextfieldSelectionColor =
+ color_utils::AlphaBlend(SK_ColorBLACK,
+ kTextfieldSelectionBackgroundFocused, 0xdd);
+ // Tree
+ static const SkColor kTreeBackground = SK_ColorWHITE;
+ static const SkColor kTreeTextColor = SK_ColorBLACK;
+ static const SkColor kTreeSelectedTextColor = SK_ColorBLACK;
+ static const SkColor kTreeSelectionBackgroundColor =
+ SkColorSetRGB(0xEE, 0xEE, 0xEE);
+ static const SkColor kTreeArrowColor = SkColorSetRGB(0x7A, 0x7A, 0x7A);
+ // Table
+ static const SkColor kTableBackground = SK_ColorWHITE;
+ static const SkColor kTableTextColor = SK_ColorBLACK;
+ static const SkColor kTableSelectedTextColor = SK_ColorBLACK;
+ static const SkColor kTableSelectionBackgroundColor =
+ SkColorSetRGB(0xEE, 0xEE, 0xEE);
+ static const SkColor kTableGroupingIndicatorColor =
+ SkColorSetRGB(0xCC, 0xCC, 0xCC);
+
+ SkColor color;
+ if (CommonThemeGetSystemColor(color_id, &color))
+ return color;
+
+ switch (color_id) {
+ // Windows
+ case kColorId_WindowBackground:
+ return kWindowBackgroundColor;
+
+ // Dialogs
+ case kColorId_DialogBackground:
+ return kDialogBackgroundColor;
+
+ // FocusableBorder
+ case kColorId_FocusedBorderColor:
+ return kFocusedBorderColor;
+ case kColorId_UnfocusedBorderColor:
+ return kUnfocusedBorderColor;
+
+ // Button
+ case kColorId_ButtonBackgroundColor:
+ return kButtonBackgroundColor;
+ case kColorId_ButtonEnabledColor:
+ return kButtonEnabledColor;
+ case kColorId_ButtonDisabledColor:
+ return kButtonDisabledColor;
+ case kColorId_ButtonHighlightColor:
+ return kButtonHighlightColor;
+ case kColorId_ButtonHoverColor:
+ return kButtonHoverColor;
+
+ // MenuItem
+ case kColorId_EnabledMenuItemForegroundColor:
+ return kEnabledMenuItemForegroundColor;
+ case kColorId_DisabledMenuItemForegroundColor:
+ return kDisabledMenuItemForegroundColor;
+ case kColorId_SelectedMenuItemForegroundColor:
+ return kEnabledMenuItemForegroundColor;
+ case kColorId_FocusedMenuItemBackgroundColor:
+ return kFocusedMenuItemBackgroundColor;
+ case kColorId_HoverMenuItemBackgroundColor:
+ return kHoverMenuItemBackgroundColor;
+ case kColorId_MenuSeparatorColor:
+ return kMenuSeparatorColor;
+ case kColorId_EnabledMenuButtonBorderColor:
+ return kEnabledMenuButtonBorderColor;
+ case kColorId_FocusedMenuButtonBorderColor:
+ return kFocusedMenuButtonBorderColor;
+ case kColorId_HoverMenuButtonBorderColor:
+ return kHoverMenuButtonBorderColor;
+
+ // 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_TextfieldReadOnlyColor:
+ return kTextfieldReadOnlyColor;
+ case kColorId_TextfieldReadOnlyBackground:
+ return kTextfieldReadOnlyBackground;
+ case kColorId_TextfieldSelectionColor:
+ return kTextfieldSelectionColor;
+ case kColorId_TextfieldSelectionBackgroundFocused:
+ return kTextfieldSelectionBackgroundFocused;
+ case kColorId_TextfieldSelectionBackgroundUnfocused:
+ return kTextfieldSelectionBackgroundUnfocused;
+
+ // Tree
+ case kColorId_TreeBackground:
+ return kTreeBackground;
+ case kColorId_TreeText:
+ return kTreeTextColor;
+ case kColorId_TreeSelectedText:
+ case kColorId_TreeSelectedTextUnfocused:
+ return kTreeSelectedTextColor;
+ case kColorId_TreeSelectionBackgroundFocused:
+ case kColorId_TreeSelectionBackgroundUnfocused:
+ return kTreeSelectionBackgroundColor;
+ case kColorId_TreeArrow:
+ return kTreeArrowColor;
+
+ // Table
+ case kColorId_TableBackground:
+ return kTableBackground;
+ case kColorId_TableText:
+ return kTableTextColor;
+ case kColorId_TableSelectedText:
+ case kColorId_TableSelectedTextUnfocused:
+ return kTableSelectedTextColor;
+ case kColorId_TableSelectionBackgroundFocused:
+ case kColorId_TableSelectionBackgroundUnfocused:
+ return kTableSelectionBackgroundColor;
+ case kColorId_TableGroupingIndicatorColor:
+ return kTableGroupingIndicatorColor;
+
+ case kColorId_MenuBackgroundColor:
+ return kMenuBackgroundColor;
+ case kColorId_MenuBorderColor:
+ NOTREACHED();
+ break;
+ }
+
+ return kInvalidColorIdColor;
+}
+
+} // namespace ui
diff --git a/ui/native_theme/fallback_theme.h b/ui/native_theme/fallback_theme.h
new file mode 100644
index 0000000..2a69936
--- /dev/null
+++ b/ui/native_theme/fallback_theme.h
@@ -0,0 +1,28 @@
+// 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.
+
+#ifndef UI_NATIVE_THEME_FALLBACK_THEME_H_
+#define UI_NATIVE_THEME_FALLBACK_THEME_H_
+
+#include "ui/native_theme/native_theme_base.h"
+
+namespace ui {
+
+// This theme can draw UI controls on every platform. This is only used when
+// zooming a web page and the native theme doesn't support scaling.
+class NATIVE_THEME_EXPORT FallbackTheme : public NativeThemeBase {
+ public:
+ FallbackTheme();
+ virtual ~FallbackTheme();
+
+ private:
+ // Overridden from NativeThemeBase:
+ virtual SkColor GetSystemColor(ColorId color_id) const OVERRIDE;
+
+ DISALLOW_COPY_AND_ASSIGN(FallbackTheme);
+};
+
+} // namespace ui
+
+#endif // UI_NATIVE_THEME_FALLBACK_THEME_H_
diff --git a/ui/native_theme/native_theme.gyp b/ui/native_theme/native_theme.gyp
index 70d27a3..671f286 100644
--- a/ui/native_theme/native_theme.gyp
+++ b/ui/native_theme/native_theme.gyp
@@ -23,6 +23,8 @@
'sources': [
'common_theme.cc',
'common_theme.h',
+ 'fallback_theme.cc',
+ 'fallback_theme.h',
'native_theme.cc',
'native_theme.h',
'native_theme_android.cc',
diff --git a/ui/native_theme/native_theme_aura.cc b/ui/native_theme/native_theme_aura.cc
index 8d7ae0b..6cbc255 100644
--- a/ui/native_theme/native_theme_aura.cc
+++ b/ui/native_theme/native_theme_aura.cc
@@ -19,59 +19,6 @@ namespace {
const SkColor kMenuBackgroundColor = SK_ColorWHITE;
-// Theme colors returned by GetSystemColor().
-const SkColor kInvalidColorIdColor = SkColorSetRGB(255, 0, 128);
-// Windows:
-const SkColor kWindowBackgroundColor = SK_ColorWHITE;
-// Dialogs:
-const SkColor kDialogBackgroundColor = SkColorSetRGB(251, 251, 251);
-// FocusableBorder:
-const SkColor kFocusedBorderColor = SkColorSetRGB(0x4D, 0x90, 0xFE);
-const SkColor kUnfocusedBorderColor = SkColorSetRGB(0xD9, 0xD9, 0xD9);
-// Button:
-const SkColor kButtonBackgroundColor = SkColorSetRGB(0xDE, 0xDE, 0xDE);
-const SkColor kButtonEnabledColor = SkColorSetRGB(0x22, 0x22, 0x22);
-const SkColor kButtonDisabledColor = SkColorSetRGB(0x99, 0x99, 0x99);
-const SkColor kButtonHighlightColor = SkColorSetRGB(0, 0, 0);
-const SkColor kButtonHoverColor = kButtonEnabledColor;
-// MenuItem:
-const SkColor kEnabledMenuItemForegroundColor = kButtonEnabledColor;
-const SkColor kDisabledMenuItemForegroundColor = kButtonDisabledColor;
-const SkColor kFocusedMenuItemBackgroundColor = SkColorSetRGB(0xF1, 0xF1, 0xF1);
-const SkColor kHoverMenuItemBackgroundColor =
- SkColorSetARGB(204, 255, 255, 255);
-const SkColor kMenuSeparatorColor = SkColorSetRGB(0xED, 0xED, 0xED);
-const SkColor kEnabledMenuButtonBorderColor = SkColorSetARGB(36, 0, 0, 0);
-const SkColor kFocusedMenuButtonBorderColor = SkColorSetARGB(72, 0, 0, 0);
-const SkColor kHoverMenuButtonBorderColor = SkColorSetARGB(72, 0, 0, 0);
-// Label:
-const SkColor kLabelEnabledColor = kButtonEnabledColor;
-const SkColor kLabelDisabledColor = kButtonDisabledColor;
-const SkColor kLabelBackgroundColor = SK_ColorWHITE;
-// Textfield:
-const SkColor kTextfieldDefaultColor = SK_ColorBLACK;
-const SkColor kTextfieldDefaultBackground = SK_ColorWHITE;
-const SkColor kTextfieldReadOnlyColor = SK_ColorDKGRAY;
-const SkColor kTextfieldReadOnlyBackground = 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);
-// Tree
-const SkColor kTreeBackground = SK_ColorWHITE;
-const SkColor kTreeTextColor = SK_ColorBLACK;
-const SkColor kTreeSelectedTextColor = SK_ColorBLACK;
-const SkColor kTreeSelectionBackgroundColor = SkColorSetRGB(0xEE, 0xEE, 0xEE);
-const SkColor kTreeArrowColor = SkColorSetRGB(0x7A, 0x7A, 0x7A);
-// Table
-const SkColor kTableBackground = SK_ColorWHITE;
-const SkColor kTableTextColor = SK_ColorBLACK;
-const SkColor kTableSelectedTextColor = SK_ColorBLACK;
-const SkColor kTableSelectionBackgroundColor = SkColorSetRGB(0xEE, 0xEE, 0xEE);
-const SkColor kTableGroupingIndicatorColor = SkColorSetRGB(0xCC, 0xCC, 0xCC);
-
} // namespace
namespace ui {
@@ -95,121 +42,6 @@ NativeThemeAura::NativeThemeAura() {
NativeThemeAura::~NativeThemeAura() {
}
-SkColor NativeThemeAura::GetSystemColor(ColorId color_id) const {
- // This implementation returns hardcoded colors.
- SkColor color;
- if (CommonThemeGetSystemColor(color_id, &color))
- return color;
-
- switch (color_id) {
- // Windows
- case kColorId_WindowBackground:
- return kWindowBackgroundColor;
-
- // Dialogs
- case kColorId_DialogBackground:
- return kDialogBackgroundColor;
-
- // FocusableBorder
- case kColorId_FocusedBorderColor:
- return kFocusedBorderColor;
- case kColorId_UnfocusedBorderColor:
- return kUnfocusedBorderColor;
-
- // Button
- case kColorId_ButtonBackgroundColor:
- return kButtonBackgroundColor;
- case kColorId_ButtonEnabledColor:
- return kButtonEnabledColor;
- case kColorId_ButtonDisabledColor:
- return kButtonDisabledColor;
- case kColorId_ButtonHighlightColor:
- return kButtonHighlightColor;
- case kColorId_ButtonHoverColor:
- return kButtonHoverColor;
-
- // MenuItem
- case kColorId_EnabledMenuItemForegroundColor:
- return kEnabledMenuItemForegroundColor;
- case kColorId_DisabledMenuItemForegroundColor:
- return kDisabledMenuItemForegroundColor;
- case kColorId_SelectedMenuItemForegroundColor:
- return kEnabledMenuItemForegroundColor;
- case kColorId_FocusedMenuItemBackgroundColor:
- return kFocusedMenuItemBackgroundColor;
- case kColorId_HoverMenuItemBackgroundColor:
- return kHoverMenuItemBackgroundColor;
- case kColorId_MenuSeparatorColor:
- return kMenuSeparatorColor;
- case kColorId_EnabledMenuButtonBorderColor:
- return kEnabledMenuButtonBorderColor;
- case kColorId_FocusedMenuButtonBorderColor:
- return kFocusedMenuButtonBorderColor;
- case kColorId_HoverMenuButtonBorderColor:
- return kHoverMenuButtonBorderColor;
-
- // 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_TextfieldReadOnlyColor:
- return kTextfieldReadOnlyColor;
- case kColorId_TextfieldReadOnlyBackground:
- return kTextfieldReadOnlyBackground;
- case kColorId_TextfieldSelectionColor:
- return kTextfieldSelectionColor;
- case kColorId_TextfieldSelectionBackgroundFocused:
- return kTextfieldSelectionBackgroundFocused;
- case kColorId_TextfieldSelectionBackgroundUnfocused:
- return kTextfieldSelectionBackgroundUnfocused;
-
- // Tree
- case kColorId_TreeBackground:
- return kTreeBackground;
- case kColorId_TreeText:
- return kTreeTextColor;
- case kColorId_TreeSelectedText:
- case kColorId_TreeSelectedTextUnfocused:
- return kTreeSelectedTextColor;
- case kColorId_TreeSelectionBackgroundFocused:
- case kColorId_TreeSelectionBackgroundUnfocused:
- return kTreeSelectionBackgroundColor;
- case kColorId_TreeArrow:
- return kTreeArrowColor;
-
- // Table
- case kColorId_TableBackground:
- return kTableBackground;
- case kColorId_TableText:
- return kTableTextColor;
- case kColorId_TableSelectedText:
- case kColorId_TableSelectedTextUnfocused:
- return kTableSelectedTextColor;
- case kColorId_TableSelectionBackgroundFocused:
- case kColorId_TableSelectionBackgroundUnfocused:
- return kTableSelectionBackgroundColor;
- case kColorId_TableGroupingIndicatorColor:
- return kTableGroupingIndicatorColor;
-
- case kColorId_MenuBackgroundColor:
- return kMenuBackgroundColor;
- case kColorId_MenuBorderColor:
- NOTREACHED();
- break;
- }
-
- return kInvalidColorIdColor;
-}
-
void NativeThemeAura::PaintMenuPopupBackground(
SkCanvas* canvas,
const gfx::Size& size,
diff --git a/ui/native_theme/native_theme_aura.h b/ui/native_theme/native_theme_aura.h
index 51ebd38..b3417b3 100644
--- a/ui/native_theme/native_theme_aura.h
+++ b/ui/native_theme/native_theme_aura.h
@@ -7,12 +7,12 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
-#include "ui/native_theme/native_theme_base.h"
+#include "ui/native_theme/fallback_theme.h"
namespace ui {
// Aura implementation of native theme support.
-class NATIVE_THEME_EXPORT NativeThemeAura : public NativeThemeBase {
+class NATIVE_THEME_EXPORT NativeThemeAura : public FallbackTheme {
public:
static NativeThemeAura* instance();
@@ -21,7 +21,6 @@ class NATIVE_THEME_EXPORT NativeThemeAura : public NativeThemeBase {
virtual ~NativeThemeAura();
// Overridden from NativeThemeBase:
- virtual SkColor GetSystemColor(ColorId color_id) const OVERRIDE;
virtual void PaintMenuPopupBackground(
SkCanvas* canvas,
const gfx::Size& size,
diff --git a/webkit/glue/webfallbackthemeengine_impl.cc b/webkit/glue/webfallbackthemeengine_impl.cc
new file mode 100644
index 0000000..213e3a7
--- /dev/null
+++ b/webkit/glue/webfallbackthemeengine_impl.cc
@@ -0,0 +1,191 @@
+// 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 "webkit/glue/webfallbackthemeengine_impl.h"
+
+#include "skia/ext/platform_canvas.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
+#include "ui/native_theme/fallback_theme.h"
+
+using WebKit::WebCanvas;
+using WebKit::WebColor;
+using WebKit::WebRect;
+using WebKit::WebFallbackThemeEngine;
+
+namespace webkit_glue {
+
+static ui::NativeTheme::Part NativeThemePart(
+ WebFallbackThemeEngine::Part part) {
+ switch (part) {
+ case WebFallbackThemeEngine::PartScrollbarDownArrow:
+ return ui::NativeTheme::kScrollbarDownArrow;
+ case WebFallbackThemeEngine::PartScrollbarLeftArrow:
+ return ui::NativeTheme::kScrollbarLeftArrow;
+ case WebFallbackThemeEngine::PartScrollbarRightArrow:
+ return ui::NativeTheme::kScrollbarRightArrow;
+ case WebFallbackThemeEngine::PartScrollbarUpArrow:
+ return ui::NativeTheme::kScrollbarUpArrow;
+ case WebFallbackThemeEngine::PartScrollbarHorizontalThumb:
+ return ui::NativeTheme::kScrollbarHorizontalThumb;
+ case WebFallbackThemeEngine::PartScrollbarVerticalThumb:
+ return ui::NativeTheme::kScrollbarVerticalThumb;
+ case WebFallbackThemeEngine::PartScrollbarHorizontalTrack:
+ return ui::NativeTheme::kScrollbarHorizontalTrack;
+ case WebFallbackThemeEngine::PartScrollbarVerticalTrack:
+ return ui::NativeTheme::kScrollbarVerticalTrack;
+ case WebFallbackThemeEngine::PartCheckbox:
+ return ui::NativeTheme::kCheckbox;
+ case WebFallbackThemeEngine::PartRadio:
+ return ui::NativeTheme::kRadio;
+ case WebFallbackThemeEngine::PartButton:
+ return ui::NativeTheme::kPushButton;
+ case WebFallbackThemeEngine::PartTextField:
+ return ui::NativeTheme::kTextField;
+ case WebFallbackThemeEngine::PartMenuList:
+ return ui::NativeTheme::kMenuList;
+ case WebFallbackThemeEngine::PartSliderTrack:
+ return ui::NativeTheme::kSliderTrack;
+ case WebFallbackThemeEngine::PartSliderThumb:
+ return ui::NativeTheme::kSliderThumb;
+ case WebFallbackThemeEngine::PartInnerSpinButton:
+ return ui::NativeTheme::kInnerSpinButton;
+ case WebFallbackThemeEngine::PartProgressBar:
+ return ui::NativeTheme::kProgressBar;
+ default:
+ return ui::NativeTheme::kScrollbarDownArrow;
+ }
+}
+
+static ui::NativeTheme::State NativeThemeState(
+ WebFallbackThemeEngine::State state) {
+ switch (state) {
+ case WebFallbackThemeEngine::StateDisabled:
+ return ui::NativeTheme::kDisabled;
+ case WebFallbackThemeEngine::StateHover:
+ return ui::NativeTheme::kHovered;
+ case WebFallbackThemeEngine::StateNormal:
+ return ui::NativeTheme::kNormal;
+ case WebFallbackThemeEngine::StatePressed:
+ return ui::NativeTheme::kPressed;
+ default:
+ return ui::NativeTheme::kDisabled;
+ }
+}
+
+static void GetNativeThemeExtraParams(
+ WebFallbackThemeEngine::Part part,
+ WebFallbackThemeEngine::State state,
+ const WebFallbackThemeEngine::ExtraParams* extra_params,
+ ui::NativeTheme::ExtraParams* native_theme_extra_params) {
+ switch (part) {
+ case WebFallbackThemeEngine::PartScrollbarHorizontalTrack:
+ case WebFallbackThemeEngine::PartScrollbarVerticalTrack:
+ native_theme_extra_params->scrollbar_track.track_x =
+ extra_params->scrollbarTrack.trackX;
+ native_theme_extra_params->scrollbar_track.track_y =
+ extra_params->scrollbarTrack.trackY;
+ native_theme_extra_params->scrollbar_track.track_width =
+ extra_params->scrollbarTrack.trackWidth;
+ native_theme_extra_params->scrollbar_track.track_height =
+ extra_params->scrollbarTrack.trackHeight;
+ break;
+ case WebFallbackThemeEngine::PartCheckbox:
+ native_theme_extra_params->button.checked = extra_params->button.checked;
+ native_theme_extra_params->button.indeterminate =
+ extra_params->button.indeterminate;
+ break;
+ case WebFallbackThemeEngine::PartRadio:
+ native_theme_extra_params->button.checked = extra_params->button.checked;
+ break;
+ case WebFallbackThemeEngine::PartButton:
+ native_theme_extra_params->button.is_default =
+ extra_params->button.isDefault;
+ native_theme_extra_params->button.has_border =
+ extra_params->button.hasBorder;
+ // Native buttons have a different focus style.
+ native_theme_extra_params->button.is_focused = false;
+ native_theme_extra_params->button.background_color =
+ extra_params->button.backgroundColor;
+ break;
+ case WebFallbackThemeEngine::PartTextField:
+ native_theme_extra_params->text_field.is_text_area =
+ extra_params->textField.isTextArea;
+ native_theme_extra_params->text_field.is_listbox =
+ extra_params->textField.isListbox;
+ native_theme_extra_params->text_field.background_color =
+ extra_params->textField.backgroundColor;
+ break;
+ case WebFallbackThemeEngine::PartMenuList:
+ native_theme_extra_params->menu_list.has_border =
+ extra_params->menuList.hasBorder;
+ native_theme_extra_params->menu_list.has_border_radius =
+ extra_params->menuList.hasBorderRadius;
+ native_theme_extra_params->menu_list.arrow_x =
+ extra_params->menuList.arrowX;
+ native_theme_extra_params->menu_list.arrow_y =
+ extra_params->menuList.arrowY;
+ native_theme_extra_params->menu_list.background_color =
+ extra_params->menuList.backgroundColor;
+ break;
+ case WebFallbackThemeEngine::PartSliderTrack:
+ case WebFallbackThemeEngine::PartSliderThumb:
+ native_theme_extra_params->slider.vertical =
+ extra_params->slider.vertical;
+ native_theme_extra_params->slider.in_drag = extra_params->slider.inDrag;
+ break;
+ case WebFallbackThemeEngine::PartInnerSpinButton:
+ native_theme_extra_params->inner_spin.spin_up =
+ extra_params->innerSpin.spinUp;
+ native_theme_extra_params->inner_spin.read_only =
+ extra_params->innerSpin.readOnly;
+ break;
+ case WebFallbackThemeEngine::PartProgressBar:
+ native_theme_extra_params->progress_bar.determinate =
+ extra_params->progressBar.determinate;
+ native_theme_extra_params->progress_bar.value_rect_x =
+ extra_params->progressBar.valueRectX;
+ native_theme_extra_params->progress_bar.value_rect_y =
+ extra_params->progressBar.valueRectY;
+ native_theme_extra_params->progress_bar.value_rect_width =
+ extra_params->progressBar.valueRectWidth;
+ native_theme_extra_params->progress_bar.value_rect_height =
+ extra_params->progressBar.valueRectHeight;
+ break;
+ default:
+ break; // Parts that have no extra params get here.
+ }
+}
+
+WebFallbackThemeEngineImpl::WebFallbackThemeEngineImpl()
+ : theme_(new ui::FallbackTheme()) {
+}
+
+WebFallbackThemeEngineImpl::~WebFallbackThemeEngineImpl() {}
+
+WebKit::WebSize WebFallbackThemeEngineImpl::getSize(
+ WebFallbackThemeEngine::Part part) {
+ ui::NativeTheme::ExtraParams extra;
+ return theme_->GetPartSize(NativeThemePart(part),
+ ui::NativeTheme::kNormal,
+ extra);
+}
+
+void WebFallbackThemeEngineImpl::paint(
+ WebKit::WebCanvas* canvas,
+ WebFallbackThemeEngine::Part part,
+ WebFallbackThemeEngine::State state,
+ const WebKit::WebRect& rect,
+ const WebFallbackThemeEngine::ExtraParams* extra_params) {
+ ui::NativeTheme::ExtraParams native_theme_extra_params;
+ GetNativeThemeExtraParams(
+ part, state, extra_params, &native_theme_extra_params);
+ theme_->Paint(canvas,
+ NativeThemePart(part),
+ NativeThemeState(state),
+ gfx::Rect(rect),
+ native_theme_extra_params);
+}
+
+} // namespace webkit_glue
diff --git a/webkit/glue/webfallbackthemeengine_impl.h b/webkit/glue/webfallbackthemeengine_impl.h
new file mode 100644
index 0000000..0887774
--- /dev/null
+++ b/webkit/glue/webfallbackthemeengine_impl.h
@@ -0,0 +1,39 @@
+// Copyright (c) 2011 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.
+
+#ifndef WEBKIT_GLUE_WEBFALLBACKTHEMEENGINE_IMPL_H_
+#define WEBKIT_GLUE_WEBFALLBACKTHEMEENGINE_IMPL_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebFallbackThemeEngine.h"
+
+namespace ui {
+class FallbackTheme;
+}
+
+namespace webkit_glue {
+
+class WebFallbackThemeEngineImpl : public WebKit::WebFallbackThemeEngine {
+ public:
+ WebFallbackThemeEngineImpl();
+ virtual ~WebFallbackThemeEngineImpl();
+
+ // WebFallbackThemeEngine methods:
+ virtual WebKit::WebSize getSize(WebKit::WebFallbackThemeEngine::Part);
+ virtual void paint(
+ WebKit::WebCanvas* canvas,
+ WebKit::WebFallbackThemeEngine::Part part,
+ WebKit::WebFallbackThemeEngine::State state,
+ const WebKit::WebRect& rect,
+ const WebKit::WebFallbackThemeEngine::ExtraParams* extra_params);
+
+ private:
+ scoped_ptr<ui::FallbackTheme> theme_;
+
+ DISALLOW_COPY_AND_ASSIGN(WebFallbackThemeEngineImpl);
+};
+
+} // namespace webkit_glue
+
+#endif // WEBKIT_GLUE_WEBFALLBACKTHEMEENGINE_IMPL_H_
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index 8311e2c..b05bf75 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -228,6 +228,8 @@
'webdropdata.cc',
'webdropdata_win.cc',
'webdropdata.h',
+ 'webfallbackthemeengine_impl.cc',
+ 'webfallbackthemeengine_impl.h',
'webfileutilities_impl.cc',
'webfileutilities_impl.h',
'webkit_glue.cc',
diff --git a/webkit/glue/webkitplatformsupport_impl.cc b/webkit/glue/webkitplatformsupport_impl.cc
index 00900a7..af0ec80 100644
--- a/webkit/glue/webkitplatformsupport_impl.cc
+++ b/webkit/glue/webkitplatformsupport_impl.cc
@@ -62,6 +62,7 @@
using WebKit::WebAudioBus;
using WebKit::WebCookie;
using WebKit::WebData;
+using WebKit::WebFallbackThemeEngine;
using WebKit::WebLocalizedString;
using WebKit::WebPluginListBuilder;
using WebKit::WebString;
@@ -383,7 +384,11 @@ void WebKitPlatformSupportImpl::SetFlingCurveParameters(
}
WebThemeEngine* WebKitPlatformSupportImpl::themeEngine() {
- return &theme_engine_;
+ return &native_theme_engine_;
+}
+
+WebFallbackThemeEngine* WebKitPlatformSupportImpl::fallbackThemeEngine() {
+ return &fallback_theme_engine_;
}
WebURLLoader* WebKitPlatformSupportImpl::createURLLoader() {
diff --git a/webkit/glue/webkitplatformsupport_impl.h b/webkit/glue/webkitplatformsupport_impl.h
index 145f631..e8c2b28 100644
--- a/webkit/glue/webkitplatformsupport_impl.h
+++ b/webkit/glue/webkitplatformsupport_impl.h
@@ -14,6 +14,7 @@
#include "third_party/WebKit/Source/Platform/chromium/public/WebURLError.h"
#include "ui/base/layout.h"
#include "webkit/glue/resource_loader_bridge.h"
+#include "webkit/glue/webfallbackthemeengine_impl.h"
#include "webkit/glue/webkit_glue_export.h"
#if defined(USE_DEFAULT_RENDER_THEME)
@@ -57,6 +58,7 @@ class WEBKIT_GLUE_EXPORT WebKitPlatformSupportImpl :
// Platform methods (partial implementation):
virtual WebKit::WebThemeEngine* themeEngine();
+ virtual WebKit::WebFallbackThemeEngine* fallbackThemeEngine();
virtual base::PlatformFile databaseOpenFile(
const WebKit::WebString& vfs_file_name, int desired_flags);
@@ -186,7 +188,8 @@ class WEBKIT_GLUE_EXPORT WebKitPlatformSupportImpl :
double shared_timer_fire_time_;
bool shared_timer_fire_time_was_set_while_suspended_;
int shared_timer_suspended_; // counter
- WebThemeEngineImpl theme_engine_;
+ WebThemeEngineImpl native_theme_engine_;
+ WebFallbackThemeEngineImpl fallback_theme_engine_;
base::ThreadLocalStorage::Slot current_thread_slot_;
scoped_ptr<FlingCurveConfiguration> fling_curve_configuration_;
};