Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: ui/native_theme/native_theme_win.cc

Issue 2640983002: Rename paint data structures (Closed)
Patch Set: DrawingDisplayItem Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/native_theme/native_theme_win.h ('k') | ui/views/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/native_theme/native_theme_win.h" 5 #include "ui/native_theme/native_theme_win.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <uxtheme.h> 9 #include <uxtheme.h>
10 #include <vsstyle.h> 10 #include <vsstyle.h>
11 #include <vssym32.h> 11 #include <vssym32.h>
12 12
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/win/scoped_gdi_object.h" 15 #include "base/win/scoped_gdi_object.h"
16 #include "base/win/scoped_hdc.h" 16 #include "base/win/scoped_hdc.h"
17 #include "base/win/scoped_select_object.h" 17 #include "base/win/scoped_select_object.h"
18 #include "base/win/win_util.h" 18 #include "base/win/win_util.h"
19 #include "base/win/windows_version.h" 19 #include "base/win/windows_version.h"
20 #include "cc/paint/paint_canvas.h"
21 #include "cc/paint/paint_flags.h"
20 #include "skia/ext/platform_canvas.h" 22 #include "skia/ext/platform_canvas.h"
21 #include "skia/ext/skia_utils_win.h" 23 #include "skia/ext/skia_utils_win.h"
22 #include "third_party/skia/include/core/SkCanvas.h" 24 #include "third_party/skia/include/core/SkCanvas.h"
23 #include "third_party/skia/include/core/SkColor.h" 25 #include "third_party/skia/include/core/SkColor.h"
24 #include "third_party/skia/include/core/SkColorPriv.h" 26 #include "third_party/skia/include/core/SkColorPriv.h"
25 #include "third_party/skia/include/core/SkPath.h" 27 #include "third_party/skia/include/core/SkPath.h"
26 #include "third_party/skia/include/core/SkRefCnt.h" 28 #include "third_party/skia/include/core/SkRefCnt.h"
27 #include "third_party/skia/include/core/SkShader.h" 29 #include "third_party/skia/include/core/SkShader.h"
28 #include "third_party/skia/include/core/SkSurface.h" 30 #include "third_party/skia/include/core/SkSurface.h"
29 #include "ui/base/material_design/material_design_controller.h" 31 #include "ui/base/material_design/material_design_controller.h"
(...skipping 21 matching lines...) Expand all
51 COLOR_GRAYTEXT, 53 COLOR_GRAYTEXT,
52 COLOR_HIGHLIGHT, 54 COLOR_HIGHLIGHT,
53 COLOR_HIGHLIGHTTEXT, 55 COLOR_HIGHLIGHTTEXT,
54 COLOR_HOTLIGHT, 56 COLOR_HOTLIGHT,
55 COLOR_MENUHIGHLIGHT, 57 COLOR_MENUHIGHLIGHT,
56 COLOR_SCROLLBAR, 58 COLOR_SCROLLBAR,
57 COLOR_WINDOW, 59 COLOR_WINDOW,
58 COLOR_WINDOWTEXT, 60 COLOR_WINDOWTEXT,
59 }; 61 };
60 62
61 void SetCheckerboardShader(SkPaint* paint, const RECT& align_rect) { 63 void SetCheckerboardShader(cc::PaintFlags* paint, const RECT& align_rect) {
62 // Create a 2x2 checkerboard pattern using the 3D face and highlight colors. 64 // Create a 2x2 checkerboard pattern using the 3D face and highlight colors.
63 const SkColor face = color_utils::GetSysSkColor(COLOR_3DFACE); 65 const SkColor face = color_utils::GetSysSkColor(COLOR_3DFACE);
64 const SkColor highlight = color_utils::GetSysSkColor(COLOR_3DHILIGHT); 66 const SkColor highlight = color_utils::GetSysSkColor(COLOR_3DHILIGHT);
65 SkColor buffer[] = { face, highlight, highlight, face }; 67 SkColor buffer[] = { face, highlight, highlight, face };
66 // Confusing bit: we first create a temporary bitmap with our desired pattern, 68 // Confusing bit: we first create a temporary bitmap with our desired pattern,
67 // then copy it to another bitmap. The temporary bitmap doesn't take 69 // then copy it to another bitmap. The temporary bitmap doesn't take
68 // ownership of the pixel data, and so will point to garbage when this 70 // ownership of the pixel data, and so will point to garbage when this
69 // function returns. The copy will copy the pixel data into a place owned by 71 // function returns. The copy will copy the pixel data into a place owned by
70 // the bitmap, which is in turn owned by the shader, etc., so it will live 72 // the bitmap, which is in turn owned by the shader, etc., so it will live
71 // until we're done using it. 73 // until we're done using it.
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 state_id, NULL, TS_TRUE, &size))) 246 state_id, NULL, TS_TRUE, &size)))
245 return gfx::Size(size.cx, size.cy); 247 return gfx::Size(size.cx, size.cy);
246 248
247 // TODO(rogerta): For now, we need to support radio buttons and checkboxes 249 // TODO(rogerta): For now, we need to support radio buttons and checkboxes
248 // when theming is not enabled. Support for other parts can be added 250 // when theming is not enabled. Support for other parts can be added
249 // if/when needed. 251 // if/when needed.
250 return (part == kCheckbox || part == kRadio) ? 252 return (part == kCheckbox || part == kRadio) ?
251 gfx::Size(13, 13) : gfx::Size(); 253 gfx::Size(13, 13) : gfx::Size();
252 } 254 }
253 255
254 void NativeThemeWin::Paint(SkCanvas* canvas, 256 void NativeThemeWin::Paint(cc::PaintCanvas* canvas,
255 Part part, 257 Part part,
256 State state, 258 State state,
257 const gfx::Rect& rect, 259 const gfx::Rect& rect,
258 const ExtraParams& extra) const { 260 const ExtraParams& extra) const {
259 if (rect.IsEmpty()) 261 if (rect.IsEmpty())
260 return; 262 return;
261 263
262 switch (part) { 264 switch (part) {
263 case kMenuPopupGutter: 265 case kMenuPopupGutter:
264 PaintMenuGutter(canvas, rect); 266 PaintMenuGutter(canvas, rect);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 NotifyObservers(); 371 NotifyObservers();
370 } 372 }
371 373
372 void NativeThemeWin::UpdateSystemColors() { 374 void NativeThemeWin::UpdateSystemColors() {
373 for (int kSystemColor : kSystemColors) 375 for (int kSystemColor : kSystemColors)
374 system_colors_[kSystemColor] = color_utils::GetSysSkColor(kSystemColor); 376 system_colors_[kSystemColor] = color_utils::GetSysSkColor(kSystemColor);
375 } 377 }
376 378
377 void NativeThemeWin::PaintMenuSeparator(SkCanvas* canvas, 379 void NativeThemeWin::PaintMenuSeparator(SkCanvas* canvas,
378 const gfx::Rect& rect) const { 380 const gfx::Rect& rect) const {
379 SkPaint paint; 381 cc::PaintFlags paint;
380 paint.setColor(GetSystemColor(NativeTheme::kColorId_MenuSeparatorColor)); 382 paint.setColor(GetSystemColor(NativeTheme::kColorId_MenuSeparatorColor));
381 int position_y = rect.y() + rect.height() / 2; 383 int position_y = rect.y() + rect.height() / 2;
382 canvas->drawLine(rect.x(), position_y, rect.right(), position_y, paint); 384 canvas->drawLine(rect.x(), position_y, rect.right(), position_y, paint);
383 } 385 }
384 386
385 void NativeThemeWin::PaintMenuGutter(SkCanvas* canvas, 387 void NativeThemeWin::PaintMenuGutter(SkCanvas* canvas,
386 const gfx::Rect& rect) const { 388 const gfx::Rect& rect) const {
387 SkPaint paint; 389 cc::PaintFlags paint;
388 paint.setColor(GetSystemColor(NativeTheme::kColorId_MenuSeparatorColor)); 390 paint.setColor(GetSystemColor(NativeTheme::kColorId_MenuSeparatorColor));
389 int position_x = rect.x() + rect.width() / 2; 391 int position_x = rect.x() + rect.width() / 2;
390 canvas->drawLine(position_x, rect.y(), position_x, rect.bottom(), paint); 392 canvas->drawLine(position_x, rect.y(), position_x, rect.bottom(), paint);
391 } 393 }
392 394
393 void NativeThemeWin::PaintMenuBackground(SkCanvas* canvas, 395 void NativeThemeWin::PaintMenuBackground(SkCanvas* canvas,
394 const gfx::Rect& rect) const { 396 const gfx::Rect& rect) const {
395 SkPaint paint; 397 cc::PaintFlags paint;
396 paint.setColor(GetSystemColor(NativeTheme::kColorId_MenuBackgroundColor)); 398 paint.setColor(GetSystemColor(NativeTheme::kColorId_MenuBackgroundColor));
397 canvas->drawRect(gfx::RectToSkRect(rect), paint); 399 canvas->drawRect(gfx::RectToSkRect(rect), paint);
398 } 400 }
399 401
400 void NativeThemeWin::PaintDirect(SkCanvas* destination_canvas, 402 void NativeThemeWin::PaintDirect(SkCanvas* destination_canvas,
401 HDC hdc, 403 HDC hdc,
402 Part part, 404 Part part,
403 State state, 405 State state,
404 const gfx::Rect& rect, 406 const gfx::Rect& rect,
405 const ExtraParams& extra) const { 407 const ExtraParams& extra) const {
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 } 1314 }
1313 1315
1314 if (handle && draw_theme_) 1316 if (handle && draw_theme_)
1315 return draw_theme_(handle, hdc, part_id, state_id, &rect_win, NULL); 1317 return draw_theme_(handle, hdc, part_id, state_id, &rect_win, NULL);
1316 1318
1317 // Draw it manually. 1319 // Draw it manually.
1318 if ((system_colors_[COLOR_SCROLLBAR] != system_colors_[COLOR_3DFACE]) && 1320 if ((system_colors_[COLOR_SCROLLBAR] != system_colors_[COLOR_3DFACE]) &&
1319 (system_colors_[COLOR_SCROLLBAR] != system_colors_[COLOR_WINDOW])) { 1321 (system_colors_[COLOR_SCROLLBAR] != system_colors_[COLOR_WINDOW])) {
1320 FillRect(hdc, &rect_win, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1)); 1322 FillRect(hdc, &rect_win, reinterpret_cast<HBRUSH>(COLOR_SCROLLBAR + 1));
1321 } else { 1323 } else {
1322 SkPaint paint; 1324 cc::PaintFlags paint;
1323 RECT align_rect = gfx::Rect(extra.track_x, extra.track_y, extra.track_width, 1325 RECT align_rect = gfx::Rect(extra.track_x, extra.track_y, extra.track_width,
1324 extra.track_height).ToRECT(); 1326 extra.track_height).ToRECT();
1325 SetCheckerboardShader(&paint, align_rect); 1327 SetCheckerboardShader(&paint, align_rect);
1326 canvas->drawIRect(skia::RECTToSkIRect(rect_win), paint); 1328 canvas->drawIRect(skia::RECTToSkIRect(rect_win), paint);
1327 } 1329 }
1328 if (extra.classic_state & DFCS_PUSHED) 1330 if (extra.classic_state & DFCS_PUSHED)
1329 InvertRect(hdc, &rect_win); 1331 InvertRect(hdc, &rect_win);
1330 return S_OK; 1332 return S_OK;
1331 } 1333 }
1332 1334
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 RECT right_half = bottom_section; 1433 RECT right_half = bottom_section;
1432 right_half.left += ((bottom_section.right - bottom_section.left) / 2); 1434 right_half.left += ((bottom_section.right - bottom_section.left) / 2);
1433 left_half.right = right_half.left; 1435 left_half.right = right_half.left;
1434 DrawEdge(hdc, &left_half, EDGE_RAISED, 1436 DrawEdge(hdc, &left_half, EDGE_RAISED,
1435 BF_DIAGONAL_ENDTOPLEFT | BF_SOFT | BF_MIDDLE | BF_ADJUST); 1437 BF_DIAGONAL_ENDTOPLEFT | BF_SOFT | BF_MIDDLE | BF_ADJUST);
1436 DrawEdge(hdc, &right_half, EDGE_RAISED, 1438 DrawEdge(hdc, &right_half, EDGE_RAISED,
1437 BF_DIAGONAL_ENDBOTTOMLEFT | BF_SOFT | BF_MIDDLE | BF_ADJUST); 1439 BF_DIAGONAL_ENDBOTTOMLEFT | BF_SOFT | BF_MIDDLE | BF_ADJUST);
1438 1440
1439 // If the button is pressed, draw hatching. 1441 // If the button is pressed, draw hatching.
1440 if (extra.classic_state & DFCS_PUSHED) { 1442 if (extra.classic_state & DFCS_PUSHED) {
1441 SkPaint paint; 1443 cc::PaintFlags paint;
1442 SetCheckerboardShader(&paint, rect_win); 1444 SetCheckerboardShader(&paint, rect_win);
1443 1445
1444 // Fill all three pieces with the pattern. 1446 // Fill all three pieces with the pattern.
1445 canvas->drawIRect(skia::RECTToSkIRect(top_section), paint); 1447 canvas->drawIRect(skia::RECTToSkIRect(top_section), paint);
1446 1448
1447 SkScalar left_triangle_top = SkIntToScalar(left_half.top); 1449 SkScalar left_triangle_top = SkIntToScalar(left_half.top);
1448 SkScalar left_triangle_right = SkIntToScalar(left_half.right); 1450 SkScalar left_triangle_right = SkIntToScalar(left_half.right);
1449 SkPath left_triangle; 1451 SkPath left_triangle;
1450 left_triangle.moveTo(SkIntToScalar(left_half.left), left_triangle_top); 1452 left_triangle.moveTo(SkIntToScalar(left_half.left), left_triangle_top);
1451 left_triangle.lineTo(left_triangle_right, left_triangle_top); 1453 left_triangle.lineTo(left_triangle_right, left_triangle_top);
(...skipping 649 matching lines...) Expand 10 before | Expand all | Expand 10 after
2101 break; 2103 break;
2102 case LAST: 2104 case LAST:
2103 NOTREACHED(); 2105 NOTREACHED();
2104 break; 2106 break;
2105 } 2107 }
2106 theme_handles_[theme_name] = handle; 2108 theme_handles_[theme_name] = handle;
2107 return handle; 2109 return handle;
2108 } 2110 }
2109 2111
2110 } // namespace ui 2112 } // namespace ui
OLDNEW
« no previous file with comments | « ui/native_theme/native_theme_win.h ('k') | ui/views/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698