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

Unified Diff: ui/display/android/screen_android.cc

Issue 2416403002: Reland of Android: support multiple displays on C++ side (Closed)
Patch Set: Update a map of Displays from Java Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« ui/display/android/screen_android.h ('K') | « ui/display/android/screen_android.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/display/android/screen_android.cc
diff --git a/ui/display/android/screen_android.cc b/ui/display/android/screen_android.cc
index 015d68cd4848a310125d559df280bbfa8d32b9be..9b3ca51653d800b385b110b3702053ed0ef6a7af 100644
--- a/ui/display/android/screen_android.cc
+++ b/ui/display/android/screen_android.cc
@@ -2,89 +2,89 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "ui/display/screen.h"
+#include "ui/display/android/screen_android.h"
#include "base/logging.h"
-#include "base/macros.h"
-#include "ui/display/display.h"
-#include "ui/gfx/android/device_display_info.h"
-#include "ui/gfx/geometry/size_conversions.h"
+#include "ui/android/window_android.h"
namespace display {
-class ScreenAndroid : public Screen {
- public:
- ScreenAndroid() {}
-
- gfx::Point GetCursorScreenPoint() override { return gfx::Point(); }
-
- bool IsWindowUnderCursor(gfx::NativeWindow window) override {
- NOTIMPLEMENTED();
- return false;
- }
-
- gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override {
- NOTIMPLEMENTED();
- return NULL;
- }
-
- Display GetPrimaryDisplay() const override {
- gfx::DeviceDisplayInfo device_info;
- const float device_scale_factor = device_info.GetDIPScale();
- // Note: GetPhysicalDisplayWidth/Height() does not subtract window
- // decorations etc. Use it instead of GetDisplayWidth/Height() when
- // available.
- const gfx::Rect bounds_in_pixels =
- gfx::Rect(device_info.GetPhysicalDisplayWidth()
- ? device_info.GetPhysicalDisplayWidth()
- : device_info.GetDisplayWidth(),
- device_info.GetPhysicalDisplayHeight()
- ? device_info.GetPhysicalDisplayHeight()
- : device_info.GetDisplayHeight());
- const gfx::Rect bounds_in_dip = gfx::Rect(gfx::ScaleToCeiledSize(
- bounds_in_pixels.size(), 1.0f / device_scale_factor));
- Display display(0, bounds_in_dip);
- if (!Display::HasForceDeviceScaleFactor())
- display.set_device_scale_factor(device_scale_factor);
- display.SetRotationAsDegree(device_info.GetRotationDegrees());
- display.set_color_depth(device_info.GetBitsPerPixel());
- display.set_depth_per_component(device_info.GetBitsPerComponent());
- display.set_is_monochrome(device_info.GetBitsPerComponent() == 0);
- return display;
- }
-
- Display GetDisplayNearestWindow(gfx::NativeView view) const override {
- return GetPrimaryDisplay();
- }
-
- Display GetDisplayNearestPoint(const gfx::Point& point) const override {
- return GetPrimaryDisplay();
- }
-
- int GetNumDisplays() const override { return 1; }
-
- std::vector<Display> GetAllDisplays() const override {
- return std::vector<Display>(1, GetPrimaryDisplay());
- }
-
- Display GetDisplayMatching(const gfx::Rect& match_rect) const override {
- return GetPrimaryDisplay();
- }
-
- void AddObserver(DisplayObserver* observer) override {
- // no display change on Android.
- }
-
- void RemoveObserver(DisplayObserver* observer) override {
- // no display change on Android.
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(ScreenAndroid);
-};
-
Screen* CreateNativeScreen() {
return new ScreenAndroid;
}
+ScreenAndroid::ScreenAndroid() {}
+
+ScreenAndroid::~ScreenAndroid() {}
+
+gfx::Point ScreenAndroid::GetCursorScreenPoint() {
+ return gfx::Point();
+}
+
+bool ScreenAndroid::IsWindowUnderCursor(gfx::NativeWindow window) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+gfx::NativeWindow ScreenAndroid::GetWindowAtScreenPoint(
+ const gfx::Point& point) {
+ NOTIMPLEMENTED();
+ return NULL;
+}
+
+int ScreenAndroid::GetNumDisplays() const {
+ DCHECK_GE(displays_.size(), 1U);
+ return displays_.size();
+}
+
+std::vector<Display> ScreenAndroid::GetAllDisplays() const {
+ DCHECK_GE(displays_.size(), 1U);
+
+ std::vector<Display> result;
+ for (const auto& display : displays_)
+ result.push_back(display.second);
+
+ return result;
+}
+
+Display ScreenAndroid::GetDisplayNearestWindow(gfx::NativeView view) const {
+ DCHECK(view);
+ ui::WindowAndroid* window = view->GetWindowAndroid();
+
+ DCHECK(window);
boliu 2016/10/26 17:24:20 this may not hold either
+ int display_id = window->display_id();
+
+ DCHECK_EQ(displays_.count(display_id), 1U);
Tima Vaisburd 2016/10/26 02:02:18 This DCHECK will succeed because DisplayAndroid is
boliu 2016/10/26 17:24:20 It's more subtle than that. In theory, it's possib
Tima Vaisburd 2016/10/26 17:58:10 I was asking whether in GetPrimaryDisplay() and ma
boliu 2016/10/26 18:24:44 Primary display should be pushed down as well. And
+ return displays_.find(display_id)->second;
mthiesse 2016/10/26 14:49:49 I think we need to guarantee always returning a di
boliu 2016/10/26 17:24:20 +1 looks like most desktop implementations fallbac
Tima Vaisburd 2016/10/27 07:55:58 Following the offline conversation I add the prima
+}
+
+Display ScreenAndroid::GetDisplayNearestPoint(const gfx::Point& point) const {
+ NOTIMPLEMENTED();
+ return Display();
+}
+
+Display ScreenAndroid::GetDisplayMatching(const gfx::Rect& match_rect) const {
+ NOTIMPLEMENTED();
+ return Display();
+}
+
+Display ScreenAndroid::GetPrimaryDisplay() const {
+ const int kPrimaryDisplayId = 0;
boliu 2016/10/26 18:24:44 where did we decide 0 is the primary one?
Tima Vaisburd 2016/10/27 07:55:58 Display.DEFAULT_DISPLAY is defined as 0, I added t
+ DCHECK_EQ(displays_.count(kPrimaryDisplayId), 1U);
+ return displays_.find(kPrimaryDisplayId)->second;
+}
+
+// Native side observers are not implemenetd for Android.
+void ScreenAndroid::AddObserver(DisplayObserver* observer) {}
+
+void ScreenAndroid::RemoveObserver(DisplayObserver* observer) {}
+
+void ScreenAndroid::UpdateDisplay(int display_id, const Display& display) {
+ displays_[display_id] = display;
+}
+
+void ScreenAndroid::RemoveDisplay(int display_id) {
+ displays_.erase(display_id);
+}
+
} // namespace display
« ui/display/android/screen_android.h ('K') | « ui/display/android/screen_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698