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

Unified Diff: ash/display/display_util.cc

Issue 2286523002: Relocate reuseable portions of ash/display/display_util.* (Closed)
Patch Set: fixed ozone build Created 4 years, 4 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
« no previous file with comments | « ash/display/display_util.h ('k') | ash/display/display_util_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/display/display_util.cc
diff --git a/ash/display/display_util.cc b/ash/display/display_util.cc
index 2c4b167b99629f52f8e8ed589dd843d31be32b57..e5b254462901ba068486041978059c5d8d070f2a 100644
--- a/ash/display/display_util.cc
+++ b/ash/display/display_util.cc
@@ -59,55 +59,6 @@ class DisplayErrorNotificationDelegate
DISALLOW_COPY_AND_ASSIGN(DisplayErrorNotificationDelegate);
};
-// List of value UI Scale values. Scales for 2x are equivalent to 640,
-// 800, 1024, 1280, 1440, 1600 and 1920 pixel width respectively on
-// 2560 pixel width 2x density display. Please see crbug.com/233375
-// for the full list of resolutions.
-const float kUIScalesFor2x[] = {0.5f, 0.625f, 0.8f, 1.0f,
- 1.125f, 1.25f, 1.5f, 2.0f};
-const float kUIScalesFor1_25x[] = {0.5f, 0.625f, 0.8f, 1.0f, 1.25f};
-const float kUIScalesFor1280[] = {0.5f, 0.625f, 0.8f, 1.0f, 1.125f};
-const float kUIScalesFor1366[] = {0.5f, 0.6f, 0.75f, 1.0f, 1.125f};
-
-std::vector<float> GetScalesForDisplay(
- const scoped_refptr<display::ManagedDisplayMode>& native_mode) {
-#define ASSIGN_ARRAY(v, a) v.assign(a, a + arraysize(a))
-
- std::vector<float> ret;
- if (native_mode->device_scale_factor() == 2.0f) {
- ASSIGN_ARRAY(ret, kUIScalesFor2x);
- return ret;
- } else if (native_mode->device_scale_factor() == 1.25f) {
- ASSIGN_ARRAY(ret, kUIScalesFor1_25x);
- return ret;
- }
- switch (native_mode->size().width()) {
- case 1280:
- ASSIGN_ARRAY(ret, kUIScalesFor1280);
- break;
- case 1366:
- ASSIGN_ARRAY(ret, kUIScalesFor1366);
- break;
- default:
- ASSIGN_ARRAY(ret, kUIScalesFor1280);
-#if defined(OS_CHROMEOS)
- if (base::SysInfo::IsRunningOnChromeOS())
- NOTREACHED() << "Unknown resolution:" << native_mode->size().ToString();
-#endif
- }
- return ret;
-}
-
-struct ScaleComparator {
- explicit ScaleComparator(float s) : scale(s) {}
-
- bool operator()(
- const scoped_refptr<display::ManagedDisplayMode>& mode) const {
- const float kEpsilon = 0.0001f;
- return std::abs(scale - mode->ui_scale()) < kEpsilon;
- }
- float scale;
-};
void ConvertPointFromScreenToNative(aura::WindowTreeHost* host,
gfx::Point* point) {
@@ -130,126 +81,8 @@ scoped_refptr<display::ManagedDisplayMode> GetDisplayModeForUIScale(
return *iter;
}
-scoped_refptr<display::ManagedDisplayMode> FindNextMode(
- const display::ManagedDisplayInfo::ManagedDisplayModeList& modes,
- size_t index,
- bool up) {
- DCHECK_LT(index, modes.size());
- size_t new_index = index;
- if (up && (index + 1 < modes.size()))
- ++new_index;
- else if (!up && index != 0)
- --new_index;
- return modes[new_index];
-}
-
} // namespace
-display::ManagedDisplayInfo::ManagedDisplayModeList
-CreateInternalManagedDisplayModeList(
- const scoped_refptr<display::ManagedDisplayMode>& native_mode) {
- display::ManagedDisplayInfo::ManagedDisplayModeList display_mode_list;
-
- float native_ui_scale = (native_mode->device_scale_factor() == 1.25f)
- ? 1.0f
- : native_mode->device_scale_factor();
- for (float ui_scale : GetScalesForDisplay(native_mode)) {
- scoped_refptr<display::ManagedDisplayMode> mode(
- new display::ManagedDisplayMode(
- native_mode->size(), native_mode->refresh_rate(),
- native_mode->is_interlaced(), ui_scale == native_ui_scale, ui_scale,
- native_mode->device_scale_factor()));
- display_mode_list.push_back(mode);
- }
- return display_mode_list;
-}
-
-display::ManagedDisplayInfo::ManagedDisplayModeList
-CreateUnifiedManagedDisplayModeList(
- const scoped_refptr<display::ManagedDisplayMode>& native_mode,
- const std::set<std::pair<float, float>>& dsf_scale_list) {
- display::ManagedDisplayInfo::ManagedDisplayModeList display_mode_list;
-
- for (auto& pair : dsf_scale_list) {
- gfx::SizeF scaled_size(native_mode->size());
- scaled_size.Scale(pair.second);
- scoped_refptr<display::ManagedDisplayMode> mode(
- new display::ManagedDisplayMode(
- gfx::ToFlooredSize(scaled_size), native_mode->refresh_rate(),
- native_mode->is_interlaced(), false /* native */,
- native_mode->ui_scale(), pair.first /* device_scale_factor */));
- display_mode_list.push_back(mode);
- }
- // Sort the mode by the size in DIP.
- std::sort(display_mode_list.begin(), display_mode_list.end(),
- [](const scoped_refptr<display::ManagedDisplayMode>& a,
- const scoped_refptr<display::ManagedDisplayMode>& b) {
- return a->GetSizeInDIP(false).GetArea() <
- b->GetSizeInDIP(false).GetArea();
- });
- return display_mode_list;
-}
-
-scoped_refptr<display::ManagedDisplayMode> GetDisplayModeForResolution(
- const display::ManagedDisplayInfo& info,
- const gfx::Size& resolution) {
- if (display::Display::IsInternalDisplayId(info.id()))
- return scoped_refptr<display::ManagedDisplayMode>();
-
- const display::ManagedDisplayInfo::ManagedDisplayModeList& modes =
- info.display_modes();
- DCHECK_NE(0u, modes.size());
- scoped_refptr<display::ManagedDisplayMode> target_mode;
- display::ManagedDisplayInfo::ManagedDisplayModeList::const_iterator iter =
- std::find_if(
- modes.begin(), modes.end(),
- [resolution](const scoped_refptr<display::ManagedDisplayMode>& mode) {
- return mode->size() == resolution;
- });
- if (iter == modes.end()) {
- LOG(WARNING) << "Unsupported resolution was requested:"
- << resolution.ToString();
- return scoped_refptr<display::ManagedDisplayMode>();
- }
- return *iter;
-}
-
-scoped_refptr<display::ManagedDisplayMode> GetDisplayModeForNextUIScale(
- const display::ManagedDisplayInfo& info,
- bool up) {
- DisplayManager* display_manager = Shell::GetInstance()->display_manager();
- if (!display_manager->IsActiveDisplayId(info.id()) ||
- !display::Display::IsInternalDisplayId(info.id())) {
- return scoped_refptr<display::ManagedDisplayMode>();
- }
- const display::ManagedDisplayInfo::ManagedDisplayModeList& modes =
- info.display_modes();
- ScaleComparator comparator(info.configured_ui_scale());
- auto iter = std::find_if(modes.begin(), modes.end(), comparator);
- return FindNextMode(modes, iter - modes.begin(), up);
-}
-
-scoped_refptr<display::ManagedDisplayMode> GetDisplayModeForNextResolution(
- const display::ManagedDisplayInfo& info,
- bool up) {
- if (display::Display::IsInternalDisplayId(info.id()))
- return scoped_refptr<display::ManagedDisplayMode>();
-
- const display::ManagedDisplayInfo::ManagedDisplayModeList& modes =
- info.display_modes();
- scoped_refptr<display::ManagedDisplayMode> tmp =
- new display::ManagedDisplayMode(info.size_in_pixel(), 0.0, false, false,
- 1.0, info.device_scale_factor());
- gfx::Size resolution = tmp->GetSizeInDIP(false);
-
- auto iter = std::find_if(
- modes.begin(), modes.end(),
- [resolution](const scoped_refptr<display::ManagedDisplayMode>& mode) {
- return mode->GetSizeInDIP(false) == resolution;
- });
- return FindNextMode(modes, iter - modes.begin(), up);
-}
-
bool SetDisplayUIScale(int64_t id, float ui_scale) {
DisplayManager* display_manager = Shell::GetInstance()->display_manager();
if (!display_manager->IsActiveDisplayId(id) ||
@@ -265,80 +98,6 @@ bool SetDisplayUIScale(int64_t id, float ui_scale) {
return display_manager->SetDisplayMode(id, mode);
}
-bool HasDisplayModeForUIScale(const display::ManagedDisplayInfo& info,
- float ui_scale) {
- ScaleComparator comparator(ui_scale);
- const display::ManagedDisplayInfo::ManagedDisplayModeList& modes =
- info.display_modes();
- return std::find_if(modes.begin(), modes.end(), comparator) != modes.end();
-}
-
-bool ComputeBoundary(const display::Display& a_display,
- const display::Display& b_display,
- gfx::Rect* a_edge_in_screen,
- gfx::Rect* b_edge_in_screen) {
- const gfx::Rect& a_bounds = a_display.bounds();
- const gfx::Rect& b_bounds = b_display.bounds();
-
- // Find touching side.
- int rx = std::max(a_bounds.x(), b_bounds.x());
- int ry = std::max(a_bounds.y(), b_bounds.y());
- int rr = std::min(a_bounds.right(), b_bounds.right());
- int rb = std::min(a_bounds.bottom(), b_bounds.bottom());
-
- display::DisplayPlacement::Position position;
- if ((rb - ry) == 0) {
- // top bottom
- if (a_bounds.bottom() == b_bounds.y()) {
- position = display::DisplayPlacement::BOTTOM;
- } else if (a_bounds.y() == b_bounds.bottom()) {
- position = display::DisplayPlacement::TOP;
- } else {
- return false;
- }
- } else {
- // left right
- if (a_bounds.right() == b_bounds.x()) {
- position = display::DisplayPlacement::RIGHT;
- } else if (a_bounds.x() == b_bounds.right()) {
- position = display::DisplayPlacement::LEFT;
- } else {
- DCHECK_NE(rr, rx);
- return false;
- }
- }
-
- switch (position) {
- case display::DisplayPlacement::TOP:
- case display::DisplayPlacement::BOTTOM: {
- int left = std::max(a_bounds.x(), b_bounds.x());
- int right = std::min(a_bounds.right(), b_bounds.right());
- if (position == display::DisplayPlacement::TOP) {
- a_edge_in_screen->SetRect(left, a_bounds.y(), right - left, 1);
- b_edge_in_screen->SetRect(left, b_bounds.bottom() - 1, right - left, 1);
- } else {
- a_edge_in_screen->SetRect(left, a_bounds.bottom() - 1, right - left, 1);
- b_edge_in_screen->SetRect(left, b_bounds.y(), right - left, 1);
- }
- break;
- }
- case display::DisplayPlacement::LEFT:
- case display::DisplayPlacement::RIGHT: {
- int top = std::max(a_bounds.y(), b_bounds.y());
- int bottom = std::min(a_bounds.bottom(), b_bounds.bottom());
- if (position == display::DisplayPlacement::LEFT) {
- a_edge_in_screen->SetRect(a_bounds.x(), top, 1, bottom - top);
- b_edge_in_screen->SetRect(b_bounds.right() - 1, top, 1, bottom - top);
- } else {
- a_edge_in_screen->SetRect(a_bounds.right() - 1, top, 1, bottom - top);
- b_edge_in_screen->SetRect(b_bounds.x(), top, 1, bottom - top);
- }
- break;
- }
- }
- return true;
-}
-
gfx::Rect GetNativeEdgeBounds(AshWindowTreeHost* ash_host,
const gfx::Rect& bounds_in_screen) {
aura::WindowTreeHost* host = ash_host->AsWindowTreeHost();
@@ -416,47 +175,6 @@ void MoveCursorTo(AshWindowTreeHost* ash_host,
}
}
-int FindDisplayIndexContainingPoint(
- const std::vector<display::Display>& displays,
- const gfx::Point& point_in_screen) {
- auto iter = std::find_if(displays.begin(), displays.end(),
- [point_in_screen](const display::Display& display) {
- return display.bounds().Contains(point_in_screen);
- });
- return iter == displays.end() ? -1 : (iter - displays.begin());
-}
-
-display::DisplayIdList CreateDisplayIdList(const display::DisplayList& list) {
- return GenerateDisplayIdList(
- list.begin(), list.end(),
- [](const display::Display& display) { return display.id(); });
-}
-
-void SortDisplayIdList(display::DisplayIdList* ids) {
- std::sort(ids->begin(), ids->end(),
- [](int64_t a, int64_t b) { return CompareDisplayIds(a, b); });
-}
-
-std::string DisplayIdListToString(const display::DisplayIdList& list) {
- std::stringstream s;
- const char* sep = "";
- for (int64_t id : list) {
- s << sep << id;
- sep = ",";
- }
- return s.str();
-}
-
-bool CompareDisplayIds(int64_t id1, int64_t id2) {
- DCHECK_NE(id1, id2);
- // Output index is stored in the first 8 bits. See GetDisplayIdFromEDID
- // in edid_parser.cc.
- int index_1 = id1 & 0xFF;
- int index_2 = id2 & 0xFF;
- DCHECK_NE(index_1, index_2) << id1 << " and " << id2;
- return display::Display::IsInternalDisplayId(id1) ||
- (index_1 < index_2 && !display::Display::IsInternalDisplayId(id2));
-}
#if defined(OS_CHROMEOS)
void ShowDisplayErrorNotification(int message_id) {
« no previous file with comments | « ash/display/display_util.h ('k') | ash/display/display_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698