| 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 "views/controls/tree/tree_view.h" | 5 #include "views/controls/tree/tree_view.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 DestroyIcon(h_opened_icon); | 692 DestroyIcon(h_opened_icon); |
| 693 for (size_t i = 0; i < model_images.size(); ++i) { | 693 for (size_t i = 0; i < model_images.size(); ++i) { |
| 694 HICON model_icon; | 694 HICON model_icon; |
| 695 | 695 |
| 696 // Need to resize the provided icons to be the same size as | 696 // Need to resize the provided icons to be the same size as |
| 697 // IDR_FOLDER_CLOSED if they aren't already. | 697 // IDR_FOLDER_CLOSED if they aren't already. |
| 698 if (model_images[i].width() != width || | 698 if (model_images[i].width() != width || |
| 699 model_images[i].height() != height) { | 699 model_images[i].height() != height) { |
| 700 gfx::CanvasSkia canvas(width, height, false); | 700 gfx::CanvasSkia canvas(width, height, false); |
| 701 // Make the background completely transparent. | 701 // Make the background completely transparent. |
| 702 canvas.drawColor(SK_ColorBLACK, SkXfermode::kClear_Mode); | 702 canvas.sk_canvas()->drawColor(SK_ColorBLACK, SkXfermode::kClear_Mode); |
| 703 | 703 |
| 704 // Draw our icons into this canvas. | 704 // Draw our icons into this canvas. |
| 705 int height_offset = (height - model_images[i].height()) / 2; | 705 int height_offset = (height - model_images[i].height()) / 2; |
| 706 int width_offset = (width - model_images[i].width()) / 2; | 706 int width_offset = (width - model_images[i].width()) / 2; |
| 707 canvas.DrawBitmapInt(model_images[i], width_offset, height_offset); | 707 canvas.DrawBitmapInt(model_images[i], width_offset, height_offset); |
| 708 model_icon = IconUtil::CreateHICONFromSkBitmap(canvas.ExtractBitmap()); | 708 model_icon = IconUtil::CreateHICONFromSkBitmap(canvas.ExtractBitmap()); |
| 709 } else { | 709 } else { |
| 710 model_icon = IconUtil::CreateHICONFromSkBitmap(model_images[i]); | 710 model_icon = IconUtil::CreateHICONFromSkBitmap(model_images[i]); |
| 711 } | 711 } |
| 712 ImageList_AddIcon(image_list, model_icon); | 712 ImageList_AddIcon(image_list, model_icon); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 // flickering during resize. | 745 // flickering during resize. |
| 746 switch (message) { | 746 switch (message) { |
| 747 case WM_ERASEBKGND: | 747 case WM_ERASEBKGND: |
| 748 return 1; | 748 return 1; |
| 749 | 749 |
| 750 case WM_PAINT: { | 750 case WM_PAINT: { |
| 751 gfx::CanvasSkiaPaint canvas(window); | 751 gfx::CanvasSkiaPaint canvas(window); |
| 752 if (canvas.isEmpty()) | 752 if (canvas.isEmpty()) |
| 753 return 0; | 753 return 0; |
| 754 | 754 |
| 755 HDC dc = skia::BeginPlatformPaint(&canvas); | 755 HDC dc = skia::BeginPlatformPaint(canvas.sk_canvas()); |
| 756 if (base::i18n::IsRTL()) { | 756 if (base::i18n::IsRTL()) { |
| 757 // gfx::CanvasSkia ends up configuring the DC with a mode of | 757 // gfx::CanvasSkia ends up configuring the DC with a mode of |
| 758 // GM_ADVANCED. For some reason a graphics mode of ADVANCED triggers | 758 // GM_ADVANCED. For some reason a graphics mode of ADVANCED triggers |
| 759 // all the text to be mirrored when RTL. Set the mode back to COMPATIBLE | 759 // all the text to be mirrored when RTL. Set the mode back to COMPATIBLE |
| 760 // and explicitly set the layout. Additionally SetWorldTransform and | 760 // and explicitly set the layout. Additionally SetWorldTransform and |
| 761 // COMPATIBLE don't play nicely together. We need to use | 761 // COMPATIBLE don't play nicely together. We need to use |
| 762 // SetViewportOrgEx when using a mode of COMPATIBLE. | 762 // SetViewportOrgEx when using a mode of COMPATIBLE. |
| 763 // | 763 // |
| 764 // Reset the transform to the identify transform. Even though | 764 // Reset the transform to the identify transform. Even though |
| 765 // SetWorldTransform and COMPATIBLE don't play nicely, bits of the | 765 // SetWorldTransform and COMPATIBLE don't play nicely, bits of the |
| (...skipping 13 matching lines...) Expand all Loading... |
| 779 // copying the upper-left corner to the redraw region. | 779 // copying the upper-left corner to the redraw region. |
| 780 SetViewportOrgEx(dc, -canvas.paintStruct().rcPaint.left, | 780 SetViewportOrgEx(dc, -canvas.paintStruct().rcPaint.left, |
| 781 -canvas.paintStruct().rcPaint.top, NULL); | 781 -canvas.paintStruct().rcPaint.top, NULL); |
| 782 } | 782 } |
| 783 SendMessage(window, WM_PRINTCLIENT, reinterpret_cast<WPARAM>(dc), 0); | 783 SendMessage(window, WM_PRINTCLIENT, reinterpret_cast<WPARAM>(dc), 0); |
| 784 if (base::i18n::IsRTL()) { | 784 if (base::i18n::IsRTL()) { |
| 785 // Reset the origin of the dc back to 0. This way when we copy the bits | 785 // Reset the origin of the dc back to 0. This way when we copy the bits |
| 786 // over we copy the right bits. | 786 // over we copy the right bits. |
| 787 SetViewportOrgEx(dc, 0, 0, NULL); | 787 SetViewportOrgEx(dc, 0, 0, NULL); |
| 788 } | 788 } |
| 789 skia::EndPlatformPaint(&canvas); | 789 skia::EndPlatformPaint(canvas.sk_canvas()); |
| 790 return 0; | 790 return 0; |
| 791 } | 791 } |
| 792 | 792 |
| 793 case WM_RBUTTONDOWN: | 793 case WM_RBUTTONDOWN: |
| 794 if (tree->select_on_right_mouse_down_) { | 794 if (tree->select_on_right_mouse_down_) { |
| 795 TVHITTESTINFO hit_info; | 795 TVHITTESTINFO hit_info; |
| 796 hit_info.pt = gfx::Point(l_param).ToPOINT(); | 796 hit_info.pt = gfx::Point(l_param).ToPOINT(); |
| 797 HTREEITEM hit_item = TreeView_HitTest(window, &hit_info); | 797 HTREEITEM hit_item = TreeView_HitTest(window, &hit_info); |
| 798 if (hit_item && (hit_info.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT | | 798 if (hit_item && (hit_info.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT | |
| 799 TVHT_ONITEMINDENT)) != 0) | 799 TVHT_ONITEMINDENT)) != 0) |
| 800 TreeView_SelectItem(tree->tree_view_, hit_item); | 800 TreeView_SelectItem(tree->tree_view_, hit_item); |
| 801 } | 801 } |
| 802 // Fall through and let the default handler process as well. | 802 // Fall through and let the default handler process as well. |
| 803 break; | 803 break; |
| 804 } | 804 } |
| 805 WNDPROC handler = tree->original_handler_; | 805 WNDPROC handler = tree->original_handler_; |
| 806 DCHECK(handler); | 806 DCHECK(handler); |
| 807 return CallWindowProc(handler, window, message, w_param, l_param); | 807 return CallWindowProc(handler, window, message, w_param, l_param); |
| 808 } | 808 } |
| 809 | 809 |
| 810 } // namespace views | 810 } // namespace views |
| OLD | NEW |