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

Side by Side Diff: chrome/views/tree_view.cc

Issue 11253: Fixes trees on Hebrew locales. The current code was problematic... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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) 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 "chrome/views/tree_view.h" 5 #include "chrome/views/tree_view.h"
6 6
7 #include <shellapi.h> 7 #include <shellapi.h>
8 8
9 #include "base/win_util.h" 9 #include "base/win_util.h"
10 #include "chrome/app/theme/theme_resources.h" 10 #include "chrome/app/theme/theme_resources.h"
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 // flickering during resize. 635 // flickering during resize.
636 switch (message) { 636 switch (message) {
637 case WM_ERASEBKGND: 637 case WM_ERASEBKGND:
638 return 1; 638 return 1;
639 639
640 case WM_PAINT: { 640 case WM_PAINT: {
641 ChromeCanvasPaint canvas(window); 641 ChromeCanvasPaint canvas(window);
642 if (canvas.isEmpty()) 642 if (canvas.isEmpty())
643 return 0; 643 return 0;
644 644
645 HDC dc = canvas.beginPlatformPaint(); 645 HDC dc = canvas.beginPlatformPaint();
646 if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) { 646 if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) {
647 // ChromeCanvas ends up configuring the DC with a mode of GM_ADVANCED. 647 // ChromeCanvas ends up configuring the DC with a mode of GM_ADVANCED.
648 // For some reason a graphics mode of ADVANCED triggers all the text 648 // For some reason a graphics mode of ADVANCED triggers all the text
649 // to be mirrored when RTL. Set the mode back to COMPATIBLE and 649 // to be mirrored when RTL. Set the mode back to COMPATIBLE and
650 // explicitly set the layout. 650 // explicitly set the layout. Additionally SetWorldTransform and
651 // COMPATIBLE don't play nicely together. We need to use
652 // SetViewportOrgEx when using a mode of COMPATIBLE.
653 //
654 // Reset the transform to the identify transform. Even though
655 // SetWorldTransform and COMPATIBLE don't play nicely, bits of the
656 // transform still carry over when we set the mode.
657 XFORM xform = {0};
658 xform.eM11 = xform.eM22 = 1;
659 SetWorldTransform(dc, &xform);
660
661 // Set the mode and layout.
651 SetGraphicsMode(dc, GM_COMPATIBLE); 662 SetGraphicsMode(dc, GM_COMPATIBLE);
652 SetLayout(dc, LAYOUT_RTL); 663 SetLayout(dc, LAYOUT_RTL);
664
665 // Transform the viewport such that the origin of the dc is that of
666 // the dirty region. This way when we invoke WM_PRINTCLIENT tree-view
667 // draws the dirty region at the origin of the DC so that when we
668 // copy the bits everything lines up nicely. Without this we end up
669 // copying the upper-left corner to the redraw region.
670 SetViewportOrgEx(dc, -canvas.paintStruct().rcPaint.left,
671 -canvas.paintStruct().rcPaint.top, NULL);
653 } 672 }
654 SendMessage(window, WM_PRINTCLIENT, reinterpret_cast<WPARAM>(dc), 0); 673 SendMessage(window, WM_PRINTCLIENT, reinterpret_cast<WPARAM>(dc), 0);
674 if (l10n_util::GetTextDirection() == l10n_util::RIGHT_TO_LEFT) {
675 // Reset the origin of the dc back to 0. This way when we copy the bits
676 // over we copy the right bits.
677 SetViewportOrgEx(dc, 0, 0, NULL);
678 }
655 canvas.endPlatformPaint(); 679 canvas.endPlatformPaint();
656 return 0; 680 return 0;
657 } 681 }
658 682
659 case WM_RBUTTONDOWN: 683 case WM_RBUTTONDOWN:
660 if (tree->select_on_right_mouse_down_) { 684 if (tree->select_on_right_mouse_down_) {
661 TVHITTESTINFO hit_info; 685 TVHITTESTINFO hit_info;
662 hit_info.pt.x = GET_X_LPARAM(l_param); 686 hit_info.pt.x = GET_X_LPARAM(l_param);
663 hit_info.pt.y = GET_Y_LPARAM(l_param); 687 hit_info.pt.y = GET_Y_LPARAM(l_param);
664 HTREEITEM hit_item = TreeView_HitTest(window, &hit_info); 688 HTREEITEM hit_item = TreeView_HitTest(window, &hit_info);
665 if (hit_item && (hit_info.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT | 689 if (hit_item && (hit_info.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT |
666 TVHT_ONITEMINDENT)) != 0) 690 TVHT_ONITEMINDENT)) != 0)
667 TreeView_SelectItem(tree->tree_view_, hit_item); 691 TreeView_SelectItem(tree->tree_view_, hit_item);
668 } 692 }
669 // Fall through and let the default handler process as well. 693 // Fall through and let the default handler process as well.
670 break; 694 break;
671 } 695 }
672 WNDPROC handler = tree->original_handler_; 696 WNDPROC handler = tree->original_handler_;
673 DCHECK(handler); 697 DCHECK(handler);
674 return CallWindowProc(handler, window, message, w_param, l_param); 698 return CallWindowProc(handler, window, message, w_param, l_param);
675 } 699 }
676 700
677 } // namespace views 701 } // namespace views
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698