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 "ui/gfx/native_theme_win.h" | 5 #include "ui/gfx/native_theme_win.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/logging.h" | 12 #include "base/logging.h" |
13 #include "base/memory/scoped_handle.h" | 13 #include "base/memory/scoped_handle.h" |
14 #include "base/win/scoped_gdi_object.h" | 14 #include "base/win/scoped_gdi_object.h" |
15 #include "base/win/scoped_hdc.h" | 15 #include "base/win/scoped_hdc.h" |
16 #include "base/win/windows_version.h" | 16 #include "base/win/windows_version.h" |
17 #include "skia/ext/platform_canvas.h" | |
18 #include "skia/ext/skia_utils_win.h" | 17 #include "skia/ext/skia_utils_win.h" |
| 18 #include "third_party/skia/include/core/SkCanvas.h" |
19 #include "third_party/skia/include/core/SkShader.h" | 19 #include "third_party/skia/include/core/SkShader.h" |
20 #include "ui/gfx/gdi_util.h" | 20 #include "ui/gfx/gdi_util.h" |
21 #include "ui/gfx/rect.h" | 21 #include "ui/gfx/rect.h" |
22 | 22 |
23 namespace { | 23 namespace { |
24 | 24 |
25 void SetCheckerboardShader(SkPaint* paint, const RECT& align_rect) { | 25 void SetCheckerboardShader(SkPaint* paint, const RECT& align_rect) { |
26 // Create a 2x2 checkerboard pattern using the 3D face and highlight colors. | 26 // Create a 2x2 checkerboard pattern using the 3D face and highlight colors. |
27 SkColor face = skia::COLORREFToSkColor(GetSysColor(COLOR_3DFACE)); | 27 SkColor face = skia::COLORREFToSkColor(GetSysColor(COLOR_3DFACE)); |
28 SkColor highlight = skia::COLORREFToSkColor(GetSysColor(COLOR_3DHILIGHT)); | 28 SkColor highlight = skia::COLORREFToSkColor(GetSysColor(COLOR_3DHILIGHT)); |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 return S_OK; | 326 return S_OK; |
327 } | 327 } |
328 | 328 |
329 HRESULT NativeThemeWin::PaintScrollbarTrack( | 329 HRESULT NativeThemeWin::PaintScrollbarTrack( |
330 HDC hdc, | 330 HDC hdc, |
331 int part_id, | 331 int part_id, |
332 int state_id, | 332 int state_id, |
333 int classic_state, | 333 int classic_state, |
334 RECT* target_rect, | 334 RECT* target_rect, |
335 RECT* align_rect, | 335 RECT* align_rect, |
336 skia::PlatformCanvas* canvas) const { | 336 SkCanvas* canvas) const { |
337 HANDLE handle = GetThemeHandle(SCROLLBAR); | 337 HANDLE handle = GetThemeHandle(SCROLLBAR); |
338 if (handle && draw_theme_) | 338 if (handle && draw_theme_) |
339 return draw_theme_(handle, hdc, part_id, state_id, target_rect, NULL); | 339 return draw_theme_(handle, hdc, part_id, state_id, target_rect, NULL); |
340 | 340 |
341 // Draw it manually. | 341 // Draw it manually. |
342 const DWORD colorScrollbar = GetSysColor(COLOR_SCROLLBAR); | 342 const DWORD colorScrollbar = GetSysColor(COLOR_SCROLLBAR); |
343 const DWORD color3DFace = GetSysColor(COLOR_3DFACE); | 343 const DWORD color3DFace = GetSysColor(COLOR_3DFACE); |
344 if ((colorScrollbar != color3DFace) && | 344 if ((colorScrollbar != color3DFace) && |
345 (colorScrollbar != GetSysColor(COLOR_WINDOW))) { | 345 (colorScrollbar != GetSysColor(COLOR_WINDOW))) { |
346 FillRect(hdc, target_rect, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1)); | 346 FillRect(hdc, target_rect, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1)); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 // Classic just renders a flat color background. | 409 // Classic just renders a flat color background. |
410 FillRect(hdc, rect, reinterpret_cast<HBRUSH>(COLOR_3DFACE + 1)); | 410 FillRect(hdc, rect, reinterpret_cast<HBRUSH>(COLOR_3DFACE + 1)); |
411 return S_OK; | 411 return S_OK; |
412 } | 412 } |
413 | 413 |
414 HRESULT NativeThemeWin::PaintTrackbar(HDC hdc, | 414 HRESULT NativeThemeWin::PaintTrackbar(HDC hdc, |
415 int part_id, | 415 int part_id, |
416 int state_id, | 416 int state_id, |
417 int classic_state, | 417 int classic_state, |
418 RECT* rect, | 418 RECT* rect, |
419 skia::PlatformCanvas* canvas) const { | 419 SkCanvas* canvas) const { |
420 // Make the channel be 4 px thick in the center of the supplied rect. (4 px | 420 // Make the channel be 4 px thick in the center of the supplied rect. (4 px |
421 // matches what XP does in various menus; GetThemePartSize() doesn't seem to | 421 // matches what XP does in various menus; GetThemePartSize() doesn't seem to |
422 // return good values here.) | 422 // return good values here.) |
423 RECT channel_rect = *rect; | 423 RECT channel_rect = *rect; |
424 const int channel_thickness = 4; | 424 const int channel_thickness = 4; |
425 if (part_id == TKP_TRACK) { | 425 if (part_id == TKP_TRACK) { |
426 channel_rect.top += | 426 channel_rect.top += |
427 ((channel_rect.bottom - channel_rect.top - channel_thickness) / 2); | 427 ((channel_rect.bottom - channel_rect.top - channel_thickness) / 2); |
428 channel_rect.bottom = channel_rect.top + channel_thickness; | 428 channel_rect.bottom = channel_rect.top + channel_thickness; |
429 } else if (part_id == TKP_TRACKVERT) { | 429 } else if (part_id == TKP_TRACKVERT) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 gfx::Rect result(*rect); | 518 gfx::Rect result(*rect); |
519 result.Inset(size, size); | 519 result.Inset(size, size); |
520 return result.ToRECT(); | 520 return result.ToRECT(); |
521 } | 521 } |
522 | 522 |
523 HRESULT NativeThemeWin::PaintProgressBar(HDC hdc, | 523 HRESULT NativeThemeWin::PaintProgressBar(HDC hdc, |
524 RECT* bar_rect, | 524 RECT* bar_rect, |
525 RECT* value_rect, | 525 RECT* value_rect, |
526 bool determinate, | 526 bool determinate, |
527 double animated_seconds, | 527 double animated_seconds, |
528 skia::PlatformCanvas* canvas) const { | 528 SkCanvas* canvas) const { |
529 // There is no documentation about the animation speed, frame-rate, nor | 529 // There is no documentation about the animation speed, frame-rate, nor |
530 // size of moving overlay of the indeterminate progress bar. | 530 // size of moving overlay of the indeterminate progress bar. |
531 // So we just observed real-world programs and guessed following parameters. | 531 // So we just observed real-world programs and guessed following parameters. |
532 const int kDeteminateOverlayPixelsPerSecond = 300; | 532 const int kDeteminateOverlayPixelsPerSecond = 300; |
533 const int kDeteminateOverlayWidth = 120; | 533 const int kDeteminateOverlayWidth = 120; |
534 const int kIndeterminateOverlayPixelsPerSecond = 175; | 534 const int kIndeterminateOverlayPixelsPerSecond = 175; |
535 const int kVistaIndeterminateOverlayWidth = 120; | 535 const int kVistaIndeterminateOverlayWidth = 120; |
536 const int kXPIndeterminateOverlayWidth = 55; | 536 const int kXPIndeterminateOverlayWidth = 55; |
537 // The thickness of the bar frame inside |value_rect| | 537 // The thickness of the bar frame inside |value_rect| |
538 const int kXPBarPadding = 3; | 538 const int kXPBarPadding = 3; |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
865 handle = open_theme_(NULL, L"Spin"); | 865 handle = open_theme_(NULL, L"Spin"); |
866 break; | 866 break; |
867 default: | 867 default: |
868 NOTREACHED(); | 868 NOTREACHED(); |
869 } | 869 } |
870 theme_handles_[theme_name] = handle; | 870 theme_handles_[theme_name] = handle; |
871 return handle; | 871 return handle; |
872 } | 872 } |
873 | 873 |
874 } // namespace gfx | 874 } // namespace gfx |
OLD | NEW |