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

Side by Side Diff: ui/views/mus/native_widget_mus.cc

Issue 2328523003: mash: Fix shelf on second display appearing in wrong position (Closed)
Patch Set: . Created 4 years, 3 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 | « 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/views/mus/native_widget_mus.h" 5 #include "ui/views/mus/native_widget_mus.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 window_->ClearSharedProperty(kWindowAppIcon_Property); 900 window_->ClearSharedProperty(kWindowAppIcon_Property);
901 } 901 }
902 } 902 }
903 903
904 void NativeWidgetMus::InitModalType(ui::ModalType modal_type) { 904 void NativeWidgetMus::InitModalType(ui::ModalType modal_type) {
905 if (modal_type != ui::MODAL_TYPE_NONE) 905 if (modal_type != ui::MODAL_TYPE_NONE)
906 window_->SetModal(); 906 window_->SetModal();
907 } 907 }
908 908
909 gfx::Rect NativeWidgetMus::GetWindowBoundsInScreen() const { 909 gfx::Rect NativeWidgetMus::GetWindowBoundsInScreen() const {
910 return window_ ? window_->GetBoundsInRoot() : gfx::Rect(); 910 if (!window_)
911 return gfx::Rect();
912
913 // Correct for the origin of the display.
914 const int64_t window_display_id = window_->GetRoot()->display_id();
915 for (display::Display display :
916 display::Screen::GetScreen()->GetAllDisplays()) {
917 if (display.id() == window_display_id) {
918 gfx::Point display_origin = display.bounds().origin();
919 gfx::Rect bounds_in_screen = window_->GetBoundsInRoot();
920 bounds_in_screen.Offset(display_origin.x(), display_origin.y());
921 return bounds_in_screen;
922 }
923 }
924 // Unknown display, assume primary display at 0,0.
925 return window_->GetBoundsInRoot();
911 } 926 }
912 927
913 gfx::Rect NativeWidgetMus::GetClientAreaBoundsInScreen() const { 928 gfx::Rect NativeWidgetMus::GetClientAreaBoundsInScreen() const {
914 // View-to-screen coordinate system transformations depend on this returning 929 // View-to-screen coordinate system transformations depend on this returning
915 // the full window bounds, for example View::ConvertPointToScreen(). 930 // the full window bounds, for example View::ConvertPointToScreen().
916 return GetWindowBoundsInScreen(); 931 return GetWindowBoundsInScreen();
917 } 932 }
918 933
919 gfx::Rect NativeWidgetMus::GetRestoredBounds() const { 934 gfx::Rect NativeWidgetMus::GetRestoredBounds() const {
920 // Restored bounds should only be relevant if the window is minimized, 935 // Restored bounds should only be relevant if the window is minimized,
921 // maximized, fullscreen or docked. However, in some places the code expects 936 // maximized, fullscreen or docked. However, in some places the code expects
922 // GetRestoredBounds() to return the current window bounds if the window is 937 // GetRestoredBounds() to return the current window bounds if the window is
923 // not in either state. 938 // not in either state.
924 if (IsMinimized() || IsMaximized() || IsFullscreen()) { 939 if (IsMinimized() || IsMaximized() || IsFullscreen()) {
925 const char* kRestoreBounds_Property = 940 const char* kRestoreBounds_Property =
926 ui::mojom::WindowManager::kRestoreBounds_Property; 941 ui::mojom::WindowManager::kRestoreBounds_Property;
927 if (window_->HasSharedProperty(kRestoreBounds_Property)) 942 if (window_->HasSharedProperty(kRestoreBounds_Property))
928 return window_->GetSharedProperty<gfx::Rect>(kRestoreBounds_Property); 943 return window_->GetSharedProperty<gfx::Rect>(kRestoreBounds_Property);
929 } 944 }
930 return GetWindowBoundsInScreen(); 945 return GetWindowBoundsInScreen();
931 } 946 }
932 947
933 std::string NativeWidgetMus::GetWorkspace() const { 948 std::string NativeWidgetMus::GetWorkspace() const {
934 return std::string(); 949 return std::string();
935 } 950 }
936 951
937 void NativeWidgetMus::SetBounds(const gfx::Rect& bounds) { 952 void NativeWidgetMus::SetBounds(const gfx::Rect& bounds_in_screen) {
sky 2016/09/08 23:52:56 Rename arg in header to match.
James Cook 2016/09/09 03:55:36 Done.
938 if (!(window_ && window_tree_host_)) 953 if (!(window_ && window_tree_host_))
939 return; 954 return;
940 955
941 gfx::Size size(bounds.size()); 956 // TODO(jamescook): Needs something like aura::ScreenPositionClient so higher
957 // level code can move windows between displays. crbug.com/645291
958 gfx::Point origin(bounds_in_screen.origin());
959 const gfx::Point display_origin = display::Screen::GetScreen()
960 ->GetDisplayMatching(bounds_in_screen)
961 .bounds()
962 .origin();
963 origin.Offset(-display_origin.x(), -display_origin.y());
964
965 gfx::Size size(bounds_in_screen.size());
942 const gfx::Size min_size = GetMinimumSize(); 966 const gfx::Size min_size = GetMinimumSize();
943 const gfx::Size max_size = GetMaximumSize(); 967 const gfx::Size max_size = GetMaximumSize();
944 if (!max_size.IsEmpty()) 968 if (!max_size.IsEmpty())
945 size.SetToMin(max_size); 969 size.SetToMin(max_size);
946 size.SetToMax(min_size); 970 size.SetToMax(min_size);
947 window_->SetBounds(gfx::Rect(bounds.origin(), size)); 971 window_->SetBounds(gfx::Rect(origin, size));
948 // Observer on |window_tree_host_| expected to synchronously update bounds. 972 // Observer on |window_tree_host_| expected to synchronously update bounds.
949 DCHECK(window_->bounds() == window_tree_host_->GetBounds()); 973 DCHECK(window_->bounds() == window_tree_host_->GetBounds());
950 } 974 }
951 975
952 void NativeWidgetMus::SetSize(const gfx::Size& size) { 976 void NativeWidgetMus::SetSize(const gfx::Size& size) {
953 if (!window_tree_host_) 977 if (!window_tree_host_)
954 return; 978 return;
955 979
956 gfx::Rect bounds = window_tree_host_->GetBounds(); 980 gfx::Rect bounds = window_tree_host_->GetBounds();
957 SetBounds(gfx::Rect(bounds.origin(), size)); 981 SetBounds(gfx::Rect(bounds.origin(), size));
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 1461
1438 gfx::Path mask_path; 1462 gfx::Path mask_path;
1439 native_widget_delegate_->GetHitTestMask(&mask_path); 1463 native_widget_delegate_->GetHitTestMask(&mask_path);
1440 // TODO(jamescook): Use the full path for the mask. 1464 // TODO(jamescook): Use the full path for the mask.
1441 gfx::Rect mask_rect = 1465 gfx::Rect mask_rect =
1442 gfx::ToEnclosingRect(gfx::SkRectToRectF(mask_path.getBounds())); 1466 gfx::ToEnclosingRect(gfx::SkRectToRectF(mask_path.getBounds()));
1443 window_->SetHitTestMask(mask_rect); 1467 window_->SetHitTestMask(mask_rect);
1444 } 1468 }
1445 1469
1446 } // namespace views 1470 } // 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