| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "webkit/glue/webthemeengine_impl_android.h" |
| 6 |
| 7 #include "base/logging.h" |
| 8 #include "skia/ext/platform_canvas.h" |
| 9 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" |
| 10 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" |
| 11 #include "ui/gfx/native_theme_android.h" |
| 12 |
| 13 using WebKit::WebCanvas; |
| 14 using WebKit::WebColor; |
| 15 using WebKit::WebRect; |
| 16 using WebKit::WebThemeEngine; |
| 17 |
| 18 namespace webkit_glue { |
| 19 |
| 20 static gfx::NativeThemeAndroid::Part NativeThemePart( |
| 21 WebThemeEngine::Part part) { |
| 22 switch (part) { |
| 23 case WebThemeEngine::PartScrollbarDownArrow: |
| 24 return gfx::NativeThemeAndroid::SCROLLBAR_DOWN_ARROW; |
| 25 case WebThemeEngine::PartScrollbarLeftArrow: |
| 26 return gfx::NativeThemeAndroid::SCROLLBAR_LEFT_ARROW; |
| 27 case WebThemeEngine::PartScrollbarRightArrow: |
| 28 return gfx::NativeThemeAndroid::SCROLLBAR_RIGHT_ARROW; |
| 29 case WebThemeEngine::PartScrollbarUpArrow: |
| 30 return gfx::NativeThemeAndroid::SCROLLBAR_UP_ARROW; |
| 31 case WebThemeEngine::PartScrollbarHorizontalThumb: |
| 32 // Android doesn't draw scrollbars. |
| 33 NOTREACHED(); |
| 34 return static_cast<gfx::NativeThemeAndroid::Part>(0); |
| 35 case WebThemeEngine::PartScrollbarVerticalThumb: |
| 36 // Android doesn't draw scrollbars. |
| 37 NOTREACHED(); |
| 38 return static_cast<gfx::NativeThemeAndroid::Part>(0); |
| 39 case WebThemeEngine::PartScrollbarHorizontalTrack: |
| 40 // Android doesn't draw scrollbars. |
| 41 NOTREACHED(); |
| 42 return static_cast<gfx::NativeThemeAndroid::Part>(0); |
| 43 case WebThemeEngine::PartScrollbarVerticalTrack: |
| 44 // Android doesn't draw scrollbars. |
| 45 NOTREACHED(); |
| 46 return static_cast<gfx::NativeThemeAndroid::Part>(0); |
| 47 case WebThemeEngine::PartCheckbox: |
| 48 return gfx::NativeThemeAndroid::CHECKBOX; |
| 49 case WebThemeEngine::PartRadio: |
| 50 return gfx::NativeThemeAndroid::RADIO; |
| 51 case WebThemeEngine::PartButton: |
| 52 return gfx::NativeThemeAndroid::PUSH_BUTTON; |
| 53 case WebThemeEngine::PartTextField: |
| 54 return gfx::NativeThemeAndroid::TEXTFIELD; |
| 55 case WebThemeEngine::PartMenuList: |
| 56 return gfx::NativeThemeAndroid::MENU_LIST; |
| 57 case WebThemeEngine::PartSliderTrack: |
| 58 return gfx::NativeThemeAndroid::SLIDER_TRACK; |
| 59 case WebThemeEngine::PartSliderThumb: |
| 60 return gfx::NativeThemeAndroid::SLIDER_THUMB; |
| 61 case WebThemeEngine::PartInnerSpinButton: |
| 62 return gfx::NativeThemeAndroid::INNER_SPIN_BUTTON; |
| 63 case WebThemeEngine::PartProgressBar: |
| 64 return gfx::NativeThemeAndroid::PROGRESS_BAR; |
| 65 default: |
| 66 return gfx::NativeThemeAndroid::SCROLLBAR_DOWN_ARROW; |
| 67 } |
| 68 } |
| 69 |
| 70 static gfx::NativeThemeAndroid::State NativeThemeState( |
| 71 WebThemeEngine::State state) { |
| 72 switch (state) { |
| 73 case WebThemeEngine::StateDisabled: |
| 74 return gfx::NativeThemeAndroid::DISABLED; |
| 75 case WebThemeEngine::StateHover: |
| 76 return gfx::NativeThemeAndroid::HOVERED; |
| 77 case WebThemeEngine::StateNormal: |
| 78 return gfx::NativeThemeAndroid::NORMAL; |
| 79 case WebThemeEngine::StatePressed: |
| 80 return gfx::NativeThemeAndroid::PRESSED; |
| 81 default: |
| 82 return gfx::NativeThemeAndroid::DISABLED; |
| 83 } |
| 84 } |
| 85 |
| 86 static void GetNativeThemeExtraParams( |
| 87 WebThemeEngine::Part part, |
| 88 WebThemeEngine::State state, |
| 89 const WebThemeEngine::ExtraParams* extra_params, |
| 90 gfx::NativeThemeAndroid::ExtraParams* native_theme_extra_params) { |
| 91 switch (part) { |
| 92 case WebThemeEngine::PartScrollbarHorizontalTrack: |
| 93 case WebThemeEngine::PartScrollbarVerticalTrack: |
| 94 // Android doesn't draw scrollbars. |
| 95 NOTREACHED(); |
| 96 break; |
| 97 case WebThemeEngine::PartCheckbox: |
| 98 native_theme_extra_params->button.checked = extra_params->button.checked; |
| 99 native_theme_extra_params->button.indeterminate = |
| 100 extra_params->button.indeterminate; |
| 101 break; |
| 102 case WebThemeEngine::PartRadio: |
| 103 native_theme_extra_params->button.checked = extra_params->button.checked; |
| 104 break; |
| 105 case WebThemeEngine::PartButton: |
| 106 native_theme_extra_params->button.is_default = |
| 107 extra_params->button.isDefault; |
| 108 native_theme_extra_params->button.has_border = |
| 109 extra_params->button.hasBorder; |
| 110 native_theme_extra_params->button.background_color = |
| 111 extra_params->button.backgroundColor; |
| 112 break; |
| 113 case WebThemeEngine::PartTextField: |
| 114 native_theme_extra_params->text_field.is_text_area = |
| 115 extra_params->textField.isTextArea; |
| 116 native_theme_extra_params->text_field.is_listbox = |
| 117 extra_params->textField.isListbox; |
| 118 native_theme_extra_params->text_field.background_color = |
| 119 extra_params->textField.backgroundColor; |
| 120 break; |
| 121 case WebThemeEngine::PartMenuList: |
| 122 native_theme_extra_params->menu_list.has_border = |
| 123 extra_params->menuList.hasBorder; |
| 124 native_theme_extra_params->menu_list.has_border_radius = |
| 125 extra_params->menuList.hasBorderRadius; |
| 126 native_theme_extra_params->menu_list.arrow_x = |
| 127 extra_params->menuList.arrowX; |
| 128 native_theme_extra_params->menu_list.arrow_y = |
| 129 extra_params->menuList.arrowY; |
| 130 native_theme_extra_params->menu_list.background_color = |
| 131 extra_params->menuList.backgroundColor; |
| 132 break; |
| 133 case WebThemeEngine::PartSliderTrack: |
| 134 case WebThemeEngine::PartSliderThumb: |
| 135 native_theme_extra_params->slider.vertical = |
| 136 extra_params->slider.vertical; |
| 137 native_theme_extra_params->slider.in_drag = extra_params->slider.inDrag; |
| 138 break; |
| 139 case WebThemeEngine::PartInnerSpinButton: |
| 140 native_theme_extra_params->inner_spin.spin_up = |
| 141 extra_params->innerSpin.spinUp; |
| 142 native_theme_extra_params->inner_spin.read_only = |
| 143 extra_params->innerSpin.readOnly; |
| 144 break; |
| 145 case WebThemeEngine::PartProgressBar: |
| 146 native_theme_extra_params->progress_bar.determinate = |
| 147 extra_params->progressBar.determinate; |
| 148 native_theme_extra_params->progress_bar.value_rect_x = |
| 149 extra_params->progressBar.valueRectX; |
| 150 native_theme_extra_params->progress_bar.value_rect_y = |
| 151 extra_params->progressBar.valueRectY; |
| 152 native_theme_extra_params->progress_bar.value_rect_width = |
| 153 extra_params->progressBar.valueRectWidth; |
| 154 native_theme_extra_params->progress_bar.value_rect_height = |
| 155 extra_params->progressBar.valueRectHeight; |
| 156 break; |
| 157 default: |
| 158 break; // Parts that have no extra params get here. |
| 159 } |
| 160 } |
| 161 |
| 162 WebKit::WebSize WebThemeEngineImpl::getSize(WebThemeEngine::Part part) { |
| 163 return gfx::NativeThemeAndroid::instance()->GetPartSize( |
| 164 NativeThemePart(part)); |
| 165 } |
| 166 |
| 167 void WebThemeEngineImpl::paint( |
| 168 WebKit::WebCanvas* canvas, |
| 169 WebThemeEngine::Part part, |
| 170 WebThemeEngine::State state, |
| 171 const WebKit::WebRect& rect, |
| 172 const WebThemeEngine::ExtraParams* extra_params) { |
| 173 gfx::NativeThemeAndroid::ExtraParams native_theme_extra_params; |
| 174 GetNativeThemeExtraParams( |
| 175 part, state, extra_params, &native_theme_extra_params); |
| 176 gfx::NativeThemeAndroid::instance()->Paint( |
| 177 canvas, |
| 178 NativeThemePart(part), |
| 179 NativeThemeState(state), |
| 180 gfx::Rect(rect), |
| 181 native_theme_extra_params); |
| 182 } |
| 183 } // namespace webkit_glue |
| OLD | NEW |