Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/glue/webthemeengine_impl_linux.h" | 5 #include "webkit/glue/webthemeengine_impl_linux.h" |
| 6 | 6 |
| 7 #include "skia/ext/platform_canvas.h" | 7 #include "skia/ext/platform_canvas.h" |
| 8 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" | 8 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" |
| 9 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" | 9 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" |
| 10 #include "ui/gfx/native_theme.h" | 10 #include "ui/gfx/native_theme.h" |
| 11 | 11 |
| 12 using WebKit::WebCanvas; | 12 using WebKit::WebCanvas; |
| 13 using WebKit::WebColor; | 13 using WebKit::WebColor; |
| 14 using WebKit::WebRect; | 14 using WebKit::WebRect; |
| 15 using WebKit::WebThemeEngine; | |
| 15 | 16 |
| 16 namespace webkit_glue { | 17 namespace webkit_glue { |
| 17 | 18 |
| 18 static gfx::Rect WebRectToRect(const WebRect& rect) { | |
| 19 return gfx::Rect(rect.x, rect.y, rect.width, rect.height); | |
| 20 } | |
| 21 | |
| 22 static gfx::NativeTheme::Part NativeThemePart( | 19 static gfx::NativeTheme::Part NativeThemePart( |
| 23 WebKit::WebThemeEngine::Part part) { | 20 WebThemeEngine::Part part) { |
| 24 switch (part) { | 21 switch (part) { |
| 25 case WebKit::WebThemeEngine::PartScrollbarDownArrow: | 22 case WebThemeEngine::PartScrollbarDownArrow: |
| 26 return gfx::NativeTheme::kScrollbarDownArrow; | 23 return gfx::NativeTheme::kScrollbarDownArrow; |
| 27 case WebKit::WebThemeEngine::PartScrollbarLeftArrow: | 24 case WebThemeEngine::PartScrollbarLeftArrow: |
| 28 return gfx::NativeTheme::kScrollbarLeftArrow; | 25 return gfx::NativeTheme::kScrollbarLeftArrow; |
| 29 case WebKit::WebThemeEngine::PartScrollbarRightArrow: | 26 case WebThemeEngine::PartScrollbarRightArrow: |
| 30 return gfx::NativeTheme::kScrollbarRightArrow; | 27 return gfx::NativeTheme::kScrollbarRightArrow; |
| 31 case WebKit::WebThemeEngine::PartScrollbarUpArrow: | 28 case WebThemeEngine::PartScrollbarUpArrow: |
| 32 return gfx::NativeTheme::kScrollbarUpArrow; | 29 return gfx::NativeTheme::kScrollbarUpArrow; |
| 33 case WebKit::WebThemeEngine::PartScrollbarHorizontalThumb: | 30 case WebThemeEngine::PartScrollbarHorizontalThumb: |
| 34 return gfx::NativeTheme::kScrollbarHorizontalThumb; | 31 return gfx::NativeTheme::kScrollbarHorizontalThumb; |
| 35 case WebKit::WebThemeEngine::PartScrollbarVerticalThumb: | 32 case WebThemeEngine::PartScrollbarVerticalThumb: |
| 36 return gfx::NativeTheme::kScrollbarVerticalThumb; | 33 return gfx::NativeTheme::kScrollbarVerticalThumb; |
| 37 case WebKit::WebThemeEngine::PartScrollbarHorizontalTrack: | 34 case WebThemeEngine::PartScrollbarHorizontalTrack: |
| 38 return gfx::NativeTheme::kScrollbarHorizontalTrack; | 35 return gfx::NativeTheme::kScrollbarHorizontalTrack; |
| 39 case WebKit::WebThemeEngine::PartScrollbarVerticalTrack: | 36 case WebThemeEngine::PartScrollbarVerticalTrack: |
| 40 return gfx::NativeTheme::kScrollbarVerticalTrack; | 37 return gfx::NativeTheme::kScrollbarVerticalTrack; |
| 41 case WebKit::WebThemeEngine::PartCheckbox: | 38 case WebThemeEngine::PartCheckbox: |
| 42 return gfx::NativeTheme::kCheckbox; | 39 return gfx::NativeTheme::kCheckbox; |
| 43 case WebKit::WebThemeEngine::PartRadio: | 40 case WebThemeEngine::PartRadio: |
| 44 return gfx::NativeTheme::kRadio; | 41 return gfx::NativeTheme::kRadio; |
| 45 case WebKit::WebThemeEngine::PartButton: | 42 case WebThemeEngine::PartButton: |
| 46 return gfx::NativeTheme::kPushButton; | 43 return gfx::NativeTheme::kPushButton; |
| 47 case WebKit::WebThemeEngine::PartTextField: | 44 case WebThemeEngine::PartTextField: |
| 48 return gfx::NativeTheme::kTextField; | 45 return gfx::NativeTheme::kTextField; |
| 49 case WebKit::WebThemeEngine::PartMenuList: | 46 case WebThemeEngine::PartMenuList: |
| 50 return gfx::NativeTheme::kMenuList; | 47 return gfx::NativeTheme::kMenuList; |
| 51 case WebKit::WebThemeEngine::PartSliderTrack: | 48 case WebThemeEngine::PartSliderTrack: |
| 52 return gfx::NativeTheme::kSliderTrack; | 49 return gfx::NativeTheme::kSliderTrack; |
| 53 case WebKit::WebThemeEngine::PartSliderThumb: | 50 case WebThemeEngine::PartSliderThumb: |
| 54 return gfx::NativeTheme::kSliderThumb; | 51 return gfx::NativeTheme::kSliderThumb; |
| 55 case WebKit::WebThemeEngine::PartInnerSpinButton: | 52 case WebThemeEngine::PartInnerSpinButton: |
| 56 return gfx::NativeTheme::kInnerSpinButton; | 53 return gfx::NativeTheme::kInnerSpinButton; |
| 57 case WebKit::WebThemeEngine::PartProgressBar: | 54 case WebThemeEngine::PartProgressBar: |
| 58 return gfx::NativeTheme::kProgressBar; | 55 return gfx::NativeTheme::kProgressBar; |
| 59 default: | 56 default: |
| 60 return gfx::NativeTheme::kScrollbarDownArrow; | 57 return gfx::NativeTheme::kScrollbarDownArrow; |
| 61 } | 58 } |
| 62 } | 59 } |
| 63 | 60 |
| 64 static gfx::NativeTheme::State NativeThemeState( | 61 static gfx::NativeTheme::State NativeThemeState( |
| 65 WebKit::WebThemeEngine::State state) { | 62 WebThemeEngine::State state) { |
| 66 switch (state) { | 63 switch (state) { |
| 67 case WebKit::WebThemeEngine::StateDisabled: | 64 case WebThemeEngine::StateDisabled: |
| 68 return gfx::NativeTheme::kDisabled; | 65 return gfx::NativeTheme::kDisabled; |
| 69 case WebKit::WebThemeEngine::StateHover: | 66 case WebThemeEngine::StateHover: |
| 70 return gfx::NativeTheme::kHovered; | 67 return gfx::NativeTheme::kHovered; |
| 71 case WebKit::WebThemeEngine::StateNormal: | 68 case WebThemeEngine::StateNormal: |
| 72 return gfx::NativeTheme::kNormal; | 69 return gfx::NativeTheme::kNormal; |
| 73 case WebKit::WebThemeEngine::StatePressed: | 70 case WebThemeEngine::StatePressed: |
| 74 return gfx::NativeTheme::kPressed; | 71 return gfx::NativeTheme::kPressed; |
| 75 default: | 72 default: |
| 76 return gfx::NativeTheme::kDisabled; | 73 return gfx::NativeTheme::kDisabled; |
| 77 } | 74 } |
| 78 } | 75 } |
| 79 | 76 |
| 80 static void GetNativeThemeExtraParams( | 77 static void GetNativeThemeExtraParams( |
| 81 WebKit::WebThemeEngine::Part part, | 78 WebThemeEngine::Part part, |
| 82 WebKit::WebThemeEngine::State state, | 79 WebThemeEngine::State state, |
| 83 const WebKit::WebThemeEngine::ExtraParams* extra_params, | 80 const WebThemeEngine::ExtraParams* extra_params, |
| 84 gfx::NativeTheme::ExtraParams* native_theme_extra_params) { | 81 gfx::NativeTheme::ExtraParams* native_theme_extra_params) { |
| 85 switch (part) { | 82 switch (part) { |
| 86 case WebKit::WebThemeEngine::PartScrollbarHorizontalTrack: | 83 case WebThemeEngine::PartScrollbarHorizontalTrack: |
| 87 case WebKit::WebThemeEngine::PartScrollbarVerticalTrack: | 84 case WebThemeEngine::PartScrollbarVerticalTrack: |
| 88 native_theme_extra_params->scrollbar_track.track_x = | 85 native_theme_extra_params->scrollbar_track.track_x = |
| 89 extra_params->scrollbarTrack.trackX; | 86 extra_params->scrollbarTrack.trackX; |
| 90 native_theme_extra_params->scrollbar_track.track_y = | 87 native_theme_extra_params->scrollbar_track.track_y = |
| 91 extra_params->scrollbarTrack.trackY; | 88 extra_params->scrollbarTrack.trackY; |
| 92 native_theme_extra_params->scrollbar_track.track_width = | 89 native_theme_extra_params->scrollbar_track.track_width = |
| 93 extra_params->scrollbarTrack.trackWidth; | 90 extra_params->scrollbarTrack.trackWidth; |
| 94 native_theme_extra_params->scrollbar_track.track_height = | 91 native_theme_extra_params->scrollbar_track.track_height = |
| 95 extra_params->scrollbarTrack.trackHeight; | 92 extra_params->scrollbarTrack.trackHeight; |
| 96 break; | 93 break; |
| 97 case WebKit::WebThemeEngine::PartCheckbox: | 94 case WebThemeEngine::PartCheckbox: |
| 98 native_theme_extra_params->button.checked = extra_params->button.checked; | 95 native_theme_extra_params->button.checked = extra_params->button.checked; |
| 99 native_theme_extra_params->button.indeterminate = | 96 native_theme_extra_params->button.indeterminate = |
| 100 extra_params->button.indeterminate; | 97 extra_params->button.indeterminate; |
| 101 break; | 98 break; |
| 102 case WebKit::WebThemeEngine::PartRadio: | 99 case WebThemeEngine::PartRadio: |
| 103 native_theme_extra_params->button.checked = extra_params->button.checked; | 100 native_theme_extra_params->button.checked = extra_params->button.checked; |
| 104 break; | 101 break; |
| 105 case WebKit::WebThemeEngine::PartButton: | 102 case WebThemeEngine::PartButton: |
| 106 native_theme_extra_params->button.is_default = | 103 native_theme_extra_params->button.is_default = |
| 107 extra_params->button.isDefault; | 104 extra_params->button.isDefault; |
| 108 native_theme_extra_params->button.has_border = | 105 native_theme_extra_params->button.has_border = |
| 109 extra_params->button.hasBorder; | 106 extra_params->button.hasBorder; |
| 110 native_theme_extra_params->button.background_color = | 107 native_theme_extra_params->button.background_color = |
| 111 extra_params->button.backgroundColor; | 108 extra_params->button.backgroundColor; |
| 112 break; | 109 break; |
| 113 case WebKit::WebThemeEngine::PartTextField: | 110 case WebThemeEngine::PartTextField: |
| 114 native_theme_extra_params->text_field.is_text_area = | 111 native_theme_extra_params->text_field.is_text_area = |
| 115 extra_params->textField.isTextArea; | 112 extra_params->textField.isTextArea; |
| 116 native_theme_extra_params->text_field.is_listbox = | 113 native_theme_extra_params->text_field.is_listbox = |
| 117 extra_params->textField.isListbox; | 114 extra_params->textField.isListbox; |
| 118 native_theme_extra_params->text_field.background_color = | 115 native_theme_extra_params->text_field.background_color = |
| 119 extra_params->textField.backgroundColor; | 116 extra_params->textField.backgroundColor; |
| 120 break; | 117 break; |
| 121 case WebKit::WebThemeEngine::PartMenuList: | 118 case WebThemeEngine::PartMenuList: |
| 122 native_theme_extra_params->menu_list.has_border = | 119 native_theme_extra_params->menu_list.has_border = |
| 123 extra_params->menuList.hasBorder; | 120 extra_params->menuList.hasBorder; |
| 124 native_theme_extra_params->menu_list.has_border_radius = | 121 native_theme_extra_params->menu_list.has_border_radius = |
| 125 extra_params->menuList.hasBorderRadius; | 122 extra_params->menuList.hasBorderRadius; |
| 126 native_theme_extra_params->menu_list.arrow_x = | 123 native_theme_extra_params->menu_list.arrow_x = |
| 127 extra_params->menuList.arrowX; | 124 extra_params->menuList.arrowX; |
| 128 native_theme_extra_params->menu_list.arrow_y = | 125 native_theme_extra_params->menu_list.arrow_y = |
| 129 extra_params->menuList.arrowY; | 126 extra_params->menuList.arrowY; |
| 130 native_theme_extra_params->menu_list.background_color = | 127 native_theme_extra_params->menu_list.background_color = |
| 131 extra_params->menuList.backgroundColor; | 128 extra_params->menuList.backgroundColor; |
| 132 break; | 129 break; |
| 133 case WebKit::WebThemeEngine::PartSliderTrack: | 130 case WebThemeEngine::PartSliderTrack: |
| 134 case WebKit::WebThemeEngine::PartSliderThumb: | 131 case WebThemeEngine::PartSliderThumb: |
| 135 native_theme_extra_params->slider.vertical = | 132 native_theme_extra_params->slider.vertical = |
| 136 extra_params->slider.vertical; | 133 extra_params->slider.vertical; |
| 137 native_theme_extra_params->slider.in_drag = extra_params->slider.inDrag; | 134 native_theme_extra_params->slider.in_drag = extra_params->slider.inDrag; |
| 138 break; | 135 break; |
| 139 case WebKit::WebThemeEngine::PartInnerSpinButton: | 136 case WebThemeEngine::PartInnerSpinButton: |
| 140 native_theme_extra_params->inner_spin.spin_up = | 137 native_theme_extra_params->inner_spin.spin_up = |
| 141 extra_params->innerSpin.spinUp; | 138 extra_params->innerSpin.spinUp; |
| 142 native_theme_extra_params->inner_spin.read_only = | 139 native_theme_extra_params->inner_spin.read_only = |
| 143 extra_params->innerSpin.readOnly; | 140 extra_params->innerSpin.readOnly; |
| 144 break; | 141 break; |
| 145 case WebKit::WebThemeEngine::PartProgressBar: | 142 case WebThemeEngine::PartProgressBar: |
| 146 native_theme_extra_params->progress_bar.determinate = | 143 native_theme_extra_params->progress_bar.determinate = |
| 147 extra_params->progressBar.determinate; | 144 extra_params->progressBar.determinate; |
| 148 native_theme_extra_params->progress_bar.value_rect_x = | 145 native_theme_extra_params->progress_bar.value_rect_x = |
| 149 extra_params->progressBar.valueRectX; | 146 extra_params->progressBar.valueRectX; |
| 150 native_theme_extra_params->progress_bar.value_rect_y = | 147 native_theme_extra_params->progress_bar.value_rect_y = |
| 151 extra_params->progressBar.valueRectY; | 148 extra_params->progressBar.valueRectY; |
| 152 native_theme_extra_params->progress_bar.value_rect_width = | 149 native_theme_extra_params->progress_bar.value_rect_width = |
| 153 extra_params->progressBar.valueRectWidth; | 150 extra_params->progressBar.valueRectWidth; |
| 154 native_theme_extra_params->progress_bar.value_rect_height = | 151 native_theme_extra_params->progress_bar.value_rect_height = |
| 155 extra_params->progressBar.valueRectHeight; | 152 extra_params->progressBar.valueRectHeight; |
| 156 break; | 153 break; |
| 157 default: | 154 default: |
| 158 break; // Parts that have no extra params get here. | 155 break; // Parts that have no extra params get here. |
| 159 } | 156 } |
| 160 } | 157 } |
| 161 | 158 |
| 162 WebKit::WebSize WebThemeEngineImpl::getSize(WebKit::WebThemeEngine::Part part) { | 159 WebKit::WebSize WebThemeEngineImpl::getSize(WebThemeEngine::Part part) { |
| 163 gfx::NativeTheme::ExtraParams extra; | 160 gfx::NativeTheme::ExtraParams extra; |
| 164 return gfx::NativeTheme::instance()->GetPartSize(NativeThemePart(part), | 161 return gfx::NativeTheme::instance()->GetPartSize(NativeThemePart(part), |
| 165 gfx::NativeTheme::kNormal, | 162 gfx::NativeTheme::kNormal, |
| 166 extra); | 163 extra); |
| 167 } | 164 } |
| 168 | 165 |
| 169 void WebThemeEngineImpl::paint( | 166 void WebThemeEngineImpl::paint( |
| 170 WebKit::WebCanvas* canvas, | 167 WebKit::WebCanvas* canvas, |
| 171 WebKit::WebThemeEngine::Part part, | 168 WebThemeEngine::Part part, |
| 172 WebKit::WebThemeEngine::State state, | 169 WebThemeEngine::State state, |
| 173 const WebKit::WebRect& rect, | 170 const WebKit::WebRect& rect, |
| 174 const WebKit::WebThemeEngine::ExtraParams* extra_params) { | 171 const WebThemeEngine::ExtraParams* extra_params) { |
| 175 gfx::NativeTheme::ExtraParams native_theme_extra_params; | 172 gfx::NativeTheme::ExtraParams native_theme_extra_params; |
| 176 GetNativeThemeExtraParams( | 173 GetNativeThemeExtraParams( |
| 177 part, state, extra_params, &native_theme_extra_params); | 174 part, state, extra_params, &native_theme_extra_params); |
| 178 gfx::NativeTheme::instance()->Paint( | 175 gfx::NativeTheme::instance()->Paint( |
| 179 canvas, | 176 canvas, |
| 180 NativeThemePart(part), | 177 NativeThemePart(part), |
| 181 NativeThemeState(state), | 178 NativeThemeState(state), |
| 182 WebRectToRect(rect), | 179 static_cast<gfx::Rect>(rect), |
|
darin (slow to review)
2011/12/16 18:01:02
nit: we usually just write gfx::Rect(rect) when we
| |
| 183 native_theme_extra_params); | 180 native_theme_extra_params); |
| 184 } | 181 } |
| 185 | 182 |
| 186 } // namespace webkit_glue | 183 } // namespace webkit_glue |
| OLD | NEW |