| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_DISPLAY_TYPES_DISPLAY_CONSTANTS_H_ |
| #define UI_DISPLAY_TYPES_DISPLAY_CONSTANTS_H_ |
| |
| #include <stdint.h> |
| #include <array> |
| |
| #include "ui/gfx/geometry/size_conversions.h" |
| |
| namespace display { |
| |
| // Display ID that represents an invalid display. Often used as a default value |
| // before display IDs are known. |
| constexpr int64_t kInvalidDisplayId = -1; |
| |
| // Display ID that represents a valid display to be used when there's no actual |
| // display connected. |
| constexpr int64_t kDefaultDisplayId = 0xFF; |
| |
| // Display ID for a virtual display assigned to a unified desktop. |
| constexpr int64_t kUnifiedDisplayId = -10; |
| |
| // Invalid year of manufacture of the display. |
| constexpr int32_t kInvalidYearOfManufacture = -1; |
| |
| // Used to describe the state of a multi-display configuration. |
| enum MultipleDisplayState { |
| MULTIPLE_DISPLAY_STATE_INVALID, |
| MULTIPLE_DISPLAY_STATE_HEADLESS, |
| MULTIPLE_DISPLAY_STATE_SINGLE, |
| MULTIPLE_DISPLAY_STATE_MULTI_MIRROR, // 2+ displays in mirror mode. |
| MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED, // 2+ displays in extended mode. |
| }; |
| |
| // Video output types. |
| enum DisplayConnectionType { |
| DISPLAY_CONNECTION_TYPE_NONE = 0, |
| DISPLAY_CONNECTION_TYPE_UNKNOWN = 1 << 0, |
| DISPLAY_CONNECTION_TYPE_INTERNAL = 1 << 1, |
| DISPLAY_CONNECTION_TYPE_VGA = 1 << 2, |
| DISPLAY_CONNECTION_TYPE_HDMI = 1 << 3, |
| DISPLAY_CONNECTION_TYPE_DVI = 1 << 4, |
| DISPLAY_CONNECTION_TYPE_DISPLAYPORT = 1 << 5, |
| DISPLAY_CONNECTION_TYPE_NETWORK = 1 << 6, |
| |
| // Update this when adding a new type. |
| DISPLAY_CONNECTION_TYPE_LAST = DISPLAY_CONNECTION_TYPE_NETWORK |
| }; |
| |
| // Content protection methods applied on video output. |
| enum ContentProtectionMethod { |
| CONTENT_PROTECTION_METHOD_NONE = 0, |
| CONTENT_PROTECTION_METHOD_HDCP = 1 << 0, |
| // TYPE_0 for HDCP is the default, so make them equivalent. |
| CONTENT_PROTECTION_METHOD_HDCP_TYPE_0 = CONTENT_PROTECTION_METHOD_HDCP, |
| CONTENT_PROTECTION_METHOD_HDCP_TYPE_1 = 1 << 1, |
| }; |
| |
| // Bitmask of all the different HDCP types. |
| constexpr uint32_t kContentProtectionMethodHdcpAll = |
| CONTENT_PROTECTION_METHOD_HDCP_TYPE_0 | |
| CONTENT_PROTECTION_METHOD_HDCP_TYPE_1; |
| |
| // HDCP protection state. |
| enum HDCPState { |
| HDCP_STATE_UNDESIRED, |
| HDCP_STATE_DESIRED, |
| HDCP_STATE_ENABLED, |
| |
| // Update this when adding a new type. |
| HDCP_STATE_LAST = HDCP_STATE_ENABLED |
| }; |
| |
| // The orientation of the panel in respect to the natural device orientation. |
| enum PanelOrientation { |
| kNormal = 0, |
| kBottomUp = 1, |
| kLeftUp = 2, |
| kRightUp = 3, |
| kLast = kRightUp |
| }; |
| |
| // The existence, or lack thereof, and state of an ePrivacy screen. |
| enum PrivacyScreenState { |
| kDisabled = 0, |
| kEnabled = 1, |
| kNotSupported = 2, |
| kPrivacyScreenStateLast = kNotSupported, |
| }; |
| |
| // Defines the float values closest to repeating decimal scale factors. |
| constexpr float kDsf_1_777 = 1.77777779102325439453125f; |
| constexpr float kDsf_2_252 = 2.2522523403167724609375f; |
| constexpr float kDsf_2_666 = 2.6666667461395263671875f; |
| constexpr float kDsf_1_8 = 1.80000007152557373046875f; |
| constexpr char kDsfStr_1_777[] = "1.77777779102325439453125"; |
| constexpr char kDsfStr_2_252[] = "2.2522523403167724609375"; |
| constexpr char kDsfStr_2_666[] = "2.6666667461395263671875"; |
| constexpr char kDsfStr_1_8[] = "1.80000007152557373046875"; |
| |
| // The total number of display zoom factors to enumerate. |
| constexpr int kNumOfZoomFactors = 9; |
| |
| // A pair representing the list of zoom values for a given minimum display |
| // resolution width. |
| using ZoomListBucket = std::pair<int, std::array<float, kNumOfZoomFactors>>; |
| |
| // A pair representing the list of zoom values for a given minimum default dsf. |
| using ZoomListBucketDsf = |
| std::pair<float, std::array<float, kNumOfZoomFactors>>; |
| |
| // For displays with a device scale factor of unity, we use a static list of |
| // initialized zoom values. For a given resolution width of a display, we can |
| // find its associated list of zoom values by simply finding the last bucket |
| // with a width less than the given resolution width. |
| // Ex. A resolution width of 1024, we will use the bucket with the width of 960. |
| constexpr std::array<ZoomListBucket, 8> kZoomListBuckets{{ |
| {0, {0.60f, 0.65f, 0.70f, 0.75f, 0.80f, 0.85f, 0.90f, 0.95f, 1.f}}, |
| {720, {0.70f, 0.75f, 0.80f, 0.85f, 0.90f, 0.95f, 1.f, 1.05f, 1.10f}}, |
| {800, {0.75f, 0.80f, 0.85f, 0.90f, 0.95f, 1.f, 1.05f, 1.10f, 1.15f}}, |
| {960, {0.90f, 0.95f, 1.f, 1.05f, 1.10f, 1.15f, 1.20f, 1.25f, 1.30f}}, |
| {1280, {0.90f, 1.f, 1.05f, 1.10f, 1.15f, 1.20f, 1.25f, 1.30f, 1.50f}}, |
| {1920, {1.f, 1.10f, 1.15f, 1.20f, 1.30f, 1.40f, 1.50f, 1.75f, 2.00f}}, |
| {3840, {1.f, 1.10f, 1.20f, 1.40f, 1.60f, 1.80f, 2.00f, 2.20f, 2.40f}}, |
| {5120, {1.f, 1.25f, 1.50f, 1.75f, 2.00f, 2.25f, 2.50f, 2.75f, 3.00f}}, |
| }}; |
| |
| // Displays with a default device scale factor have a static list of initialized |
| // zoom values that includes a zoom level to go to the native resolution of the |
| // display. Ensure that the list of DSFs are in sync with the list of default |
| // device scale factors in display_change_observer.cc. |
| constexpr std::array<ZoomListBucketDsf, 8> kZoomListBucketsForDsf{{ |
| {1.25f, {0.7f, 1.f / 1.25f, 0.85f, 0.9f, 0.95f, 1.f, 1.1f, 1.2f, 1.3f}}, |
| {1.6f, {1.f / 1.6f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 1.f, 1.15f, 1.3f}}, |
| {kDsf_1_777, |
| {1.f / kDsf_1_777, 0.65f, 0.75f, 0.8f, 0.9f, 1.f, 1.1f, 1.2f, 1.3f}}, |
| {kDsf_1_8, |
| {1.f / kDsf_1_8, 0.65f, 0.75f, 0.8f, 0.9f, 1.f, 1.1f, 1.2f, 1.3f}}, |
| {2.f, {1.f / 2.f, 0.6f, 0.7f, 0.8f, 0.9f, 1.f, 1.1f, 1.25f, 1.5f}}, |
| {kDsf_2_252, |
| {1.f / kDsf_2_252, 0.6f, 0.7f, 0.8f, 0.9f, 1.f, 1.15f, 1.3f, 1.5f}}, |
| {2.4f, {1.f / 2.4f, 0.5f, 0.6f, 0.8f, 0.9f, 1.f, 1.2f, 1.35f, 1.5f}}, |
| {kDsf_2_666, |
| {1.f / kDsf_2_666, 0.5f, 0.6f, 0.8f, 0.9f, 1.f, 1.2f, 1.35f, 1.5f}}, |
| }}; |
| |
| // Valid Displays |
| constexpr gfx::Size kWXGA_768{1366, 768}; |
| constexpr gfx::Size kWXGA_800{1280, 800}; |
| constexpr gfx::Size kHD_PLUS{1600, 900}; |
| constexpr gfx::Size kFHD{1920, 1080}; |
| constexpr gfx::Size kSHD{1280, 720}; |
| constexpr gfx::Size kWUXGA{1920, 1200}; |
| // Dru |
| constexpr gfx::Size kQXGA_P{1536, 2048}; |
| constexpr gfx::Size kQHD{2560, 1440}; |
| // Chell |
| constexpr gfx::Size kQHD_PLUS{3200, 1800}; |
| constexpr gfx::Size k4K_UHD{3840, 2160}; |
| |
| // Chromebook special panels |
| constexpr gfx::Size kLux{2160, 1440}; |
| constexpr gfx::Size kAkaliQHD{2256, 1504}; |
| constexpr gfx::Size kLink{2560, 1700}; |
| constexpr gfx::Size kEveDisplay{2400, 1600}; |
| constexpr gfx::Size kNocturne{3000, 2000}; |
| |
| enum SizeErrorCheckType { |
| kExact, // Exact match. |
| kEpsilon, // Matches within epsilon. |
| kSkip, // Skip testing the error. |
| }; |
| |
| constexpr struct Data { |
| const float diagonal_size; |
| const gfx::Size resolution; |
| const float expected_dsf; |
| const gfx::Size expected_dp_size; |
| const bool bad_range; |
| const SizeErrorCheckType screenshot_size_error; |
| } display_configs[] = { |
| // clang-format off |
| // inch, resolution, DSF, size in DP, Bad range, size error |
| {9.7f, kQXGA_P, 2.0f, {768, 1024}, false, kExact}, |
| {10.f, kWXGA_800, 1.25f, {1024, 640}, false, kExact}, |
| {10.1f, kWXGA_800, 1.f, kWXGA_800, false, kExact}, |
| {10.1f, kFHD, 1.6, {1200, 675}, true, kExact}, |
| {10.1f, kWUXGA, kDsf_1_777, {1080, 675}, false, kExact}, |
| {10.5f, kWUXGA, 1.6f, {1200, 750}, true, kExact}, |
| {11.6f, kWXGA_768, 1.f, kWXGA_768, false, kExact}, |
| {11.6f, kSHD, 1.f, kSHD, false, kExact}, |
| {11.6f, kFHD, 1.6f, {1200, 675}, false, kExact}, |
| {12.f, kFHD, 1.6f, {1200, 675}, false, kExact}, |
| {12.1f, kWXGA_800, 1.f, kWXGA_800, true, kExact}, |
| {12.2f, kWUXGA, 1.6f, {1200, 750}, false, kExact}, |
| {12.2f, kFHD, 1.6f, {1200, 675}, false, kExact}, |
| {12.3f, kQHD, 2.f, {1280, 720}, false, kExact}, |
| {13.0f, kFHD, 1.25f, {1536, 864}, true, kExact}, |
| {13.1f, k4K_UHD, kDsf_2_666, {1440, 810}, false, kExact}, |
| {13.3f, kWXGA_768, 1.f, kWXGA_768, true, kExact}, |
| {13.3f, kFHD, 1.25f, {1536, 864}, true, kExact}, |
| {13.3f, k4K_UHD, kDsf_2_666, {1440, 810}, false, kExact}, |
| {13.5f, kFHD, 1.25f, {1536, 864}, false, kExact}, |
| {14.f, kWXGA_768, 1.f, kWXGA_768, true, kExact}, |
| {14.f, kFHD, 1.25f, {1536, 864}, false, kExact}, |
| {14.f, kWUXGA, 1.25f, {1536, 960}, false, kExact}, |
| {14.f, k4K_UHD, kDsf_2_666, {1440, 810}, false, kExact}, |
| {15.6f, kWXGA_768, 1.f, kWXGA_768, true, kExact}, |
| {15.6f, kWUXGA, 1.f, kWUXGA, false, kExact}, |
| {15.6f, kFHD, 1.f, kFHD, false, kExact}, |
| {15.6f, k4K_UHD, 2.4f, {1600, 900}, false, kEpsilon}, |
| {17.f, kHD_PLUS, 1.f, kHD_PLUS, true, kExact}, |
| {17.f, kFHD, 1.0f, {1920, 1080},false, kExact}, |
| {17.3f, kFHD, 1.0f, {1920, 1080},false, kExact}, |
| {18.51f, kWXGA_768, 1.0f, kWXGA_768, true, kExact}, |
| |
| // Non standard panels |
| {11.0f, kLux, kDsf_1_8, {1200, 800}, false, kExact}, |
| {12.f, {1366, 912},1.f, {1366, 912}, false, kExact}, |
| {12.3f, kEveDisplay,2.0f, {1200, 800}, false, kExact}, |
| {12.85f, kLink, 2.0f, {1280, 850}, false, kExact}, |
| {12.3f, kNocturne, kDsf_2_252, {1332, 888}, false, kEpsilon}, |
| {13.3f, kQHD_PLUS, 2.f, {1600, 900}, false, kExact}, |
| {13.3f, kAkaliQHD, 1.6f, {1410, 940}, false, kExact}, |
| {13.6f, kAkaliQHD, 1.6f, {1410, 940}, false, kExact}, |
| |
| // Chromebase |
| {19.5, kHD_PLUS, 1.f, kHD_PLUS, true, kExact}, |
| {21.5f, kFHD, 1.f, kFHD, true, kExact}, |
| {23.8f, kFHD, 1.f, kFHD, true, kExact}, |
| |
| // clang-format on |
| }; |
| |
| } // namespace display |
| |
| #endif // UI_DISPLAY_TYPES_DISPLAY_CONSTANTS_H_ |