| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "base/gfx/native_theme.h" | 5 #include "base/gfx/native_theme.h" |
| 6 | 6 |
| 7 #include <windows.h> | 7 #include <windows.h> |
| 8 #include <uxtheme.h> | 8 #include <uxtheme.h> |
| 9 #include <vsstyle.h> | 9 #include <vsstyle.h> |
| 10 #include <vssym32.h> | 10 #include <vssym32.h> |
| 11 | 11 |
| 12 #include "base/gfx/gdi_util.h" | 12 #include "base/gfx/gdi_util.h" |
| 13 #include "base/gfx/skia_utils.h" | |
| 14 #include "base/gfx/rect.h" | 13 #include "base/gfx/rect.h" |
| 15 #include "base/logging.h" | 14 #include "base/logging.h" |
| 16 #include "base/scoped_handle.h" | 15 #include "base/scoped_handle.h" |
| 17 #include "skia/ext/platform_canvas.h" | 16 #include "skia/ext/platform_canvas.h" |
| 17 #include "skia/ext/skia_utils_win.h" |
| 18 #include "skia/include/SkShader.h" | 18 #include "skia/include/SkShader.h" |
| 19 | 19 |
| 20 namespace gfx { | 20 namespace gfx { |
| 21 | 21 |
| 22 /* static */ | 22 /* static */ |
| 23 const NativeTheme* NativeTheme::instance() { | 23 const NativeTheme* NativeTheme::instance() { |
| 24 // The global NativeTheme instance. | 24 // The global NativeTheme instance. |
| 25 static const NativeTheme s_native_theme; | 25 static const NativeTheme s_native_theme; |
| 26 return &s_native_theme; | 26 return &s_native_theme; |
| 27 } | 27 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 206 |
| 207 // Draw it manually. | 207 // Draw it manually. |
| 208 const DWORD colorScrollbar = GetSysColor(COLOR_SCROLLBAR); | 208 const DWORD colorScrollbar = GetSysColor(COLOR_SCROLLBAR); |
| 209 const DWORD color3DFace = GetSysColor(COLOR_3DFACE); | 209 const DWORD color3DFace = GetSysColor(COLOR_3DFACE); |
| 210 if ((colorScrollbar != color3DFace) && | 210 if ((colorScrollbar != color3DFace) && |
| 211 (colorScrollbar != GetSysColor(COLOR_WINDOW))) { | 211 (colorScrollbar != GetSysColor(COLOR_WINDOW))) { |
| 212 FillRect(hdc, target_rect, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1)); | 212 FillRect(hdc, target_rect, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1)); |
| 213 } else { | 213 } else { |
| 214 // Create a 2x2 checkerboard pattern using the 3D face and highlight | 214 // Create a 2x2 checkerboard pattern using the 3D face and highlight |
| 215 // colors. | 215 // colors. |
| 216 SkColor face = COLORREFToSkColor(color3DFace); | 216 SkColor face = skia::COLORREFToSkColor(color3DFace); |
| 217 SkColor highlight = COLORREFToSkColor(GetSysColor(COLOR_3DHILIGHT)); | 217 SkColor highlight = skia::COLORREFToSkColor(GetSysColor(COLOR_3DHILIGHT)); |
| 218 SkColor buffer[] = { face, highlight, highlight, face }; | 218 SkColor buffer[] = { face, highlight, highlight, face }; |
| 219 SkBitmap bitmap; | 219 SkBitmap bitmap; |
| 220 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 2, 2); | 220 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 2, 2); |
| 221 bitmap.setPixels(buffer); | 221 bitmap.setPixels(buffer); |
| 222 SkShader* shader = SkShader::CreateBitmapShader(bitmap, | 222 SkShader* shader = SkShader::CreateBitmapShader(bitmap, |
| 223 SkShader::kRepeat_TileMode, | 223 SkShader::kRepeat_TileMode, |
| 224 SkShader::kRepeat_TileMode); | 224 SkShader::kRepeat_TileMode); |
| 225 | 225 |
| 226 // Draw that pattern into the target rect, setting the origin to the top | 226 // Draw that pattern into the target rect, setting the origin to the top |
| 227 // left corner of the scrollbar track (so the checked rect below the thumb | 227 // left corner of the scrollbar track (so the checked rect below the thumb |
| 228 // aligns properly with the portion above the thumb). | 228 // aligns properly with the portion above the thumb). |
| 229 SkMatrix matrix; | 229 SkMatrix matrix; |
| 230 matrix.setTranslate(SkIntToScalar(align_rect->left), | 230 matrix.setTranslate(SkIntToScalar(align_rect->left), |
| 231 SkIntToScalar(align_rect->top)); | 231 SkIntToScalar(align_rect->top)); |
| 232 shader->setLocalMatrix(matrix); | 232 shader->setLocalMatrix(matrix); |
| 233 SkPaint paint; | 233 SkPaint paint; |
| 234 paint.setShader(shader)->unref(); | 234 paint.setShader(shader)->unref(); |
| 235 canvas->drawIRect(RECTToSkIRect(*target_rect), paint); | 235 canvas->drawIRect(skia::RECTToSkIRect(*target_rect), paint); |
| 236 } | 236 } |
| 237 if (classic_state & DFCS_PUSHED) | 237 if (classic_state & DFCS_PUSHED) |
| 238 InvertRect(hdc, target_rect); | 238 InvertRect(hdc, target_rect); |
| 239 return S_OK; | 239 return S_OK; |
| 240 } | 240 } |
| 241 | 241 |
| 242 HRESULT NativeTheme::PaintScrollbarThumb(HDC hdc, | 242 HRESULT NativeTheme::PaintScrollbarThumb(HDC hdc, |
| 243 int part_id, | 243 int part_id, |
| 244 int state_id, | 244 int state_id, |
| 245 int classic_state, | 245 int classic_state, |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 HRESULT NativeTheme::GetThemeColor(ThemeName theme, | 459 HRESULT NativeTheme::GetThemeColor(ThemeName theme, |
| 460 int part_id, | 460 int part_id, |
| 461 int state_id, | 461 int state_id, |
| 462 int prop_id, | 462 int prop_id, |
| 463 SkColor* color) const { | 463 SkColor* color) const { |
| 464 HANDLE handle = GetThemeHandle(theme); | 464 HANDLE handle = GetThemeHandle(theme); |
| 465 if (handle && get_theme_color_) { | 465 if (handle && get_theme_color_) { |
| 466 COLORREF color_ref; | 466 COLORREF color_ref; |
| 467 if (get_theme_color_(handle, part_id, state_id, prop_id, &color_ref) == | 467 if (get_theme_color_(handle, part_id, state_id, prop_id, &color_ref) == |
| 468 S_OK) { | 468 S_OK) { |
| 469 *color = gfx::COLORREFToSkColor(color_ref); | 469 *color = skia::COLORREFToSkColor(color_ref); |
| 470 return S_OK; | 470 return S_OK; |
| 471 } | 471 } |
| 472 } | 472 } |
| 473 return E_NOTIMPL; | 473 return E_NOTIMPL; |
| 474 } | 474 } |
| 475 | 475 |
| 476 SkColor NativeTheme::GetThemeColorWithDefault(ThemeName theme, | 476 SkColor NativeTheme::GetThemeColorWithDefault(ThemeName theme, |
| 477 int part_id, | 477 int part_id, |
| 478 int state_id, | 478 int state_id, |
| 479 int prop_id, | 479 int prop_id, |
| 480 int default_sys_color) const { | 480 int default_sys_color) const { |
| 481 SkColor color; | 481 SkColor color; |
| 482 if (GetThemeColor(theme, part_id, state_id, prop_id, &color) != S_OK) | 482 if (GetThemeColor(theme, part_id, state_id, prop_id, &color) != S_OK) |
| 483 color = gfx::COLORREFToSkColor(GetSysColor(default_sys_color)); | 483 color = skia::COLORREFToSkColor(GetSysColor(default_sys_color)); |
| 484 return color; | 484 return color; |
| 485 } | 485 } |
| 486 | 486 |
| 487 HRESULT NativeTheme::GetThemeInt(ThemeName theme, | 487 HRESULT NativeTheme::GetThemeInt(ThemeName theme, |
| 488 int part_id, | 488 int part_id, |
| 489 int state_id, | 489 int state_id, |
| 490 int prop_id, | 490 int prop_id, |
| 491 int *value) const { | 491 int *value) const { |
| 492 HANDLE handle = GetThemeHandle(theme); | 492 HANDLE handle = GetThemeHandle(theme); |
| 493 if (handle && get_theme_int_) | 493 if (handle && get_theme_int_) |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 break; | 603 break; |
| 604 default: | 604 default: |
| 605 NOTREACHED(); | 605 NOTREACHED(); |
| 606 } | 606 } |
| 607 theme_handles_[theme_name] = handle; | 607 theme_handles_[theme_name] = handle; |
| 608 return handle; | 608 return handle; |
| 609 } | 609 } |
| 610 | 610 |
| 611 } // namespace gfx | 611 } // namespace gfx |
| 612 | 612 |
| OLD | NEW |