Chromium Code Reviews| 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; | |
|
darin (slow to review)
2011/12/14 17:56:36
it seems like adding WebThemeEngine here would be
Peter Beverloo
2011/12/14 18:58:41
Good catch, fixed! The file was based on the webth
| |
| 16 | |
| 17 namespace webkit_glue { | |
| 18 | |
| 19 static gfx::Rect WebRectToRect(const WebRect& rect) { | |
|
darin (slow to review)
2011/12/14 17:56:36
Hmm, webthemeengine_impl_linux.cc defines this too
Peter Beverloo
2011/12/14 18:58:41
Avoiding the duplicate function would be ideal, of
| |
| 20 return gfx::Rect(rect.x, rect.y, rect.width, rect.height); | |
| 21 } | |
| 22 | |
| 23 static gfx::NativeThemeAndroid::Part NativeThemePart( | |
| 24 WebKit::WebThemeEngine::Part part) { | |
| 25 switch (part) { | |
| 26 case WebKit::WebThemeEngine::PartScrollbarDownArrow: | |
| 27 return gfx::NativeThemeAndroid::SCROLLBAR_DOWN_ARROW; | |
| 28 case WebKit::WebThemeEngine::PartScrollbarLeftArrow: | |
| 29 return gfx::NativeThemeAndroid::SCROLLBAR_LEFT_ARROW; | |
| 30 case WebKit::WebThemeEngine::PartScrollbarRightArrow: | |
| 31 return gfx::NativeThemeAndroid::SCROLLBAR_RIGHT_ARROW; | |
| 32 case WebKit::WebThemeEngine::PartScrollbarUpArrow: | |
| 33 return gfx::NativeThemeAndroid::SCROLLBAR_UP_ARROW; | |
| 34 case WebKit::WebThemeEngine::PartScrollbarHorizontalThumb: | |
| 35 // Android doesn't draw scrollbars. | |
| 36 NOTREACHED(); | |
| 37 return static_cast<gfx::NativeThemeAndroid::Part>(0); | |
| 38 case WebKit::WebThemeEngine::PartScrollbarVerticalThumb: | |
| 39 // Android doesn't draw scrollbars. | |
| 40 NOTREACHED(); | |
| 41 return static_cast<gfx::NativeThemeAndroid::Part>(0); | |
| 42 case WebKit::WebThemeEngine::PartScrollbarHorizontalTrack: | |
| 43 // Android doesn't draw scrollbars. | |
| 44 NOTREACHED(); | |
| 45 return static_cast<gfx::NativeThemeAndroid::Part>(0); | |
| 46 case WebKit::WebThemeEngine::PartScrollbarVerticalTrack: | |
| 47 // Android doesn't draw scrollbars. | |
| 48 NOTREACHED(); | |
| 49 return static_cast<gfx::NativeThemeAndroid::Part>(0); | |
| 50 case WebKit::WebThemeEngine::PartCheckbox: | |
| 51 return gfx::NativeThemeAndroid::CHECKBOX; | |
| 52 case WebKit::WebThemeEngine::PartRadio: | |
| 53 return gfx::NativeThemeAndroid::RADIO; | |
| 54 case WebKit::WebThemeEngine::PartButton: | |
| 55 return gfx::NativeThemeAndroid::PUSH_BUTTON; | |
| 56 case WebKit::WebThemeEngine::PartTextField: | |
| 57 return gfx::NativeThemeAndroid::TEXTFIELD; | |
| 58 case WebKit::WebThemeEngine::PartMenuList: | |
| 59 return gfx::NativeThemeAndroid::MENU_LIST; | |
| 60 case WebKit::WebThemeEngine::PartSliderTrack: | |
| 61 return gfx::NativeThemeAndroid::SLIDER_TRACK; | |
| 62 case WebKit::WebThemeEngine::PartSliderThumb: | |
| 63 return gfx::NativeThemeAndroid::SLIDER_THUMB; | |
| 64 case WebKit::WebThemeEngine::PartInnerSpinButton: | |
| 65 return gfx::NativeThemeAndroid::INNER_SPIN_BUTTON; | |
| 66 case WebKit::WebThemeEngine::PartProgressBar: | |
| 67 return gfx::NativeThemeAndroid::PROGRESS_BAR; | |
| 68 default: | |
| 69 return gfx::NativeThemeAndroid::SCROLLBAR_DOWN_ARROW; | |
| 70 } | |
| 71 } | |
| 72 | |
| 73 static gfx::NativeThemeAndroid::State NativeThemeState( | |
| 74 WebKit::WebThemeEngine::State state) { | |
| 75 switch (state) { | |
| 76 case WebKit::WebThemeEngine::StateDisabled: | |
| 77 return gfx::NativeThemeAndroid::DISABLED; | |
| 78 case WebKit::WebThemeEngine::StateHover: | |
| 79 return gfx::NativeThemeAndroid::HOVERED; | |
| 80 case WebKit::WebThemeEngine::StateNormal: | |
| 81 return gfx::NativeThemeAndroid::NORMAL; | |
| 82 case WebKit::WebThemeEngine::StatePressed: | |
| 83 return gfx::NativeThemeAndroid::PRESSED; | |
| 84 default: | |
| 85 return gfx::NativeThemeAndroid::DISABLED; | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 static void GetNativeThemeExtraParams( | |
| 90 WebKit::WebThemeEngine::Part part, | |
| 91 WebKit::WebThemeEngine::State state, | |
| 92 const WebKit::WebThemeEngine::ExtraParams* extra_params, | |
| 93 gfx::NativeThemeAndroid::ExtraParams* native_theme_extra_params) { | |
| 94 switch (part) { | |
| 95 case WebKit::WebThemeEngine::PartScrollbarHorizontalTrack: | |
| 96 case WebKit::WebThemeEngine::PartScrollbarVerticalTrack: | |
| 97 // Android doesn't draw scrollbars. | |
| 98 NOTREACHED(); | |
| 99 break; | |
| 100 case WebKit::WebThemeEngine::PartCheckbox: | |
| 101 native_theme_extra_params->button.checked = extra_params->button.checked; | |
| 102 native_theme_extra_params->button.indeterminate = | |
| 103 extra_params->button.indeterminate; | |
| 104 break; | |
| 105 case WebKit::WebThemeEngine::PartRadio: | |
| 106 native_theme_extra_params->button.checked = extra_params->button.checked; | |
| 107 break; | |
| 108 case WebKit::WebThemeEngine::PartButton: | |
| 109 native_theme_extra_params->button.is_default = | |
| 110 extra_params->button.isDefault; | |
| 111 native_theme_extra_params->button.has_border = | |
| 112 extra_params->button.hasBorder; | |
| 113 native_theme_extra_params->button.background_color = | |
| 114 extra_params->button.backgroundColor; | |
| 115 break; | |
| 116 case WebKit::WebThemeEngine::PartTextField: | |
| 117 native_theme_extra_params->text_field.is_text_area = | |
| 118 extra_params->textField.isTextArea; | |
| 119 native_theme_extra_params->text_field.is_listbox = | |
| 120 extra_params->textField.isListbox; | |
| 121 native_theme_extra_params->text_field.background_color = | |
| 122 extra_params->textField.backgroundColor; | |
| 123 break; | |
| 124 case WebKit::WebThemeEngine::PartMenuList: | |
| 125 native_theme_extra_params->menu_list.has_border = | |
| 126 extra_params->menuList.hasBorder; | |
| 127 native_theme_extra_params->menu_list.has_border_radius = | |
| 128 extra_params->menuList.hasBorderRadius; | |
| 129 native_theme_extra_params->menu_list.arrow_x = | |
| 130 extra_params->menuList.arrowX; | |
| 131 native_theme_extra_params->menu_list.arrow_y = | |
| 132 extra_params->menuList.arrowY; | |
| 133 native_theme_extra_params->menu_list.background_color = | |
| 134 extra_params->menuList.backgroundColor; | |
| 135 break; | |
| 136 case WebKit::WebThemeEngine::PartSliderTrack: | |
| 137 case WebKit::WebThemeEngine::PartSliderThumb: | |
| 138 native_theme_extra_params->slider.vertical = | |
| 139 extra_params->slider.vertical; | |
| 140 native_theme_extra_params->slider.in_drag = extra_params->slider.inDrag; | |
| 141 break; | |
| 142 case WebKit::WebThemeEngine::PartInnerSpinButton: | |
| 143 native_theme_extra_params->inner_spin.spin_up = | |
| 144 extra_params->innerSpin.spinUp; | |
| 145 native_theme_extra_params->inner_spin.read_only = | |
| 146 extra_params->innerSpin.readOnly; | |
| 147 break; | |
| 148 case WebKit::WebThemeEngine::PartProgressBar: | |
| 149 native_theme_extra_params->progress_bar.determinate = | |
| 150 extra_params->progressBar.determinate; | |
| 151 native_theme_extra_params->progress_bar.value_rect_x = | |
| 152 extra_params->progressBar.valueRectX; | |
| 153 native_theme_extra_params->progress_bar.value_rect_y = | |
| 154 extra_params->progressBar.valueRectY; | |
| 155 native_theme_extra_params->progress_bar.value_rect_width = | |
| 156 extra_params->progressBar.valueRectWidth; | |
| 157 native_theme_extra_params->progress_bar.value_rect_height = | |
| 158 extra_params->progressBar.valueRectHeight; | |
| 159 break; | |
| 160 default: | |
| 161 break; // Parts that have no extra params get here. | |
| 162 } | |
| 163 } | |
| 164 | |
| 165 WebKit::WebSize WebThemeEngineImpl::getSize(WebKit::WebThemeEngine::Part part) { | |
| 166 return gfx::NativeThemeAndroid::instance()->GetPartSize( | |
| 167 NativeThemePart(part)); | |
|
darin (slow to review)
2011/12/14 17:56:36
nit: indentation
Peter Beverloo
2011/12/14 18:58:41
Done.
| |
| 168 } | |
| 169 | |
| 170 void WebThemeEngineImpl::paint( | |
| 171 WebKit::WebCanvas* canvas, | |
| 172 WebKit::WebThemeEngine::Part part, | |
| 173 WebKit::WebThemeEngine::State state, | |
| 174 const WebKit::WebRect& rect, | |
| 175 const WebKit::WebThemeEngine::ExtraParams* extra_params) { | |
| 176 gfx::NativeThemeAndroid::ExtraParams native_theme_extra_params; | |
| 177 GetNativeThemeExtraParams( | |
| 178 part, state, extra_params, &native_theme_extra_params); | |
| 179 gfx::NativeThemeAndroid::instance()->Paint( | |
| 180 canvas, | |
| 181 NativeThemePart(part), | |
| 182 NativeThemeState(state), | |
| 183 WebRectToRect(rect), | |
| 184 native_theme_extra_params); | |
| 185 } | |
| 186 } // namespace webkit_glue | |
| OLD | NEW |